M00 is a program stop command. When the CNC machine reads it, everything stops — axes, spindle, and coolant — and the program waits until you press Cycle Start to continue.
Key Takeaways
- M00 stops the machine mid-program: axes, spindle, and coolant all shut off
- Nothing resets when M00 triggers — all modal states stay exactly as they were
- The machine resumes from the next line when Cycle Start is pressed
- Use it for manual tool changes, part inspection, chip clearing, or coolant adjustment
- Unlike M30, M00 does not end the program — it just pauses it
| M00 – At A Glance | |
|---|---|
| Function | Program Stop (unconditional) |
| Type | Non-modal |
| Turns off | Spindle, coolant, axis movement |
| Resumes with | Cycle Start button |
| Resets modal states? | No |
| Related codes | M01 (optional stop), M02 (program end), M30 (program end + rewind) |
What Does M00 Do?
M00 is a mandatory, unconditional program stop. Every time the controller reads it, the machine stops — no exceptions.
When M00 executes, it shuts off:
- All axis movement
- Spindle rotation
- Coolant flow
The program halts at that line and waits. No alarm fires. The machine is just paused.
What Stays Active After M00?
This is the part that trips up a lot of beginners.
M00 does not reset anything. When the machine stops, it keeps all of its current settings:
- Feed rate (F value)
- Spindle speed (S value)
- Unit mode (G20 or G21 — inches vs. millimeters)
- Positioning mode (G90 absolute or G91 incremental)
- Active work offset (G54, G55, etc.)
- Tool length compensation
Think of it like pressing pause on a video. Everything is frozen in place, not rewound.
COMMON MISTAKE – Expecting the spindle to restart automatically
Why it matters: M00 turns the spindle off, and it stays off. Pressing Cycle Start doesn’t automatically restart it.
If your program doesn’t include an M03 (or M04) after the M00, the machine will keep running with no spindle — which can damage your tool and the part.
When Should You Use M00?
Program stops are used any time you need the operator to do something manually before the program continues. Common reasons include:
- Manual tool changes (if not using an ATC)
- Measuring a critical dimension mid-cycle
- Inspecting the surface finish
- Clearing chips from a deep pocket
- Adding tapping fluid before a threading operation
- Repositioning or adjusting coolant lines

Ideally, the programmer will document why each M00 is used — in the program comments and on the setup sheet. If you’re an operator and you don’t know why the machine stopped, check those first.
M00 Code Example
Here’s a simple example showing M00 used mid-program so the operator can inspect a bore diameter before the finish pass runs:
O1000 (Program number)
T01 M06 (Call tool 1)
G90 G54 G00 X0. Y0. (Absolute mode, work offset, rapid to start)
G43 H01 Z1.0 M03 S800 (Tool length comp, spindle on at 800 RPM)
G01 Z-1.0 F10.0 (Rough bore pass)
G00 Z1.0 (Rapid out)
M00 (PROGRAM STOP — measure bore before finish pass)
M03 S1200 (Restart spindle for finish speed)
G01 Z-1.0 F5.0 (Finish bore pass)
G00 Z10.0 (Rapid to safe Z)
M30 (Program end and rewind)
Notice that after the M00, the program explicitly turns the spindle back on with M03. It doesn’t come back on by itself.
How to Resume After M00
When M00 stops the machine, the operator presses the Cycle Start button to continue.

The program picks up on the line immediately after the M00. It does not restart from the beginning.
Make sure any spindle or coolant that was turned off by M00 gets turned back on in the program before the next operation needs them.
M00 vs M01 — What’s the Difference?
M00 and M01 behave almost identically. Both stop the machine the same way. Both require Cycle Start to resume.
The key difference: M01 is an optional stop. It only executes if the Optional Stop button (or switch) on the control panel is turned on. If that button is off, the machine reads M01 and keeps running like nothing happened.
M00 always stops. There’s no way to skip it.

Use M00 when the stop is mandatory — the operator absolutely must do something before continuing. Use M01 when the stop is useful during setup or inspection but should be skippable in production.
Use the buttons below to step through the program one line at a time. Watch how M00 pauses execution and shuts off the spindle and coolant — and notice that all other settings stay exactly as they were. Switch to M01 mode to see how the Optional Stop switch changes the behavior.
Interactive — Program Stop Visualizer
Press Cycle Start to run the program. It runs automatically and stops when it hits a stop command.
Key observation: after the stop, the program has to explicitly restart the spindle with M03. Pressing Cycle Start does not bring it back on automatically.
COMMON MISTAKE – Using M00 instead of M01 for inspection stops
Why it matters: In production, operators often don’t need to stop at every inspection point. Using M00 forces a stop every single cycle. M01 gives them the flexibility to skip it once the process is dialed in.
M00 vs M30 — What’s the Difference?
M00 pauses the program. M30 ends it.
After M00, pressing Cycle Start continues from the next line. After M30, pressing Cycle Start starts the entire program over from the beginning.
M30 also typically rewinds the program pointer and resets the control to the top of the program. M00 does none of that.
FAQs
What does M00 do in CNC?
M00 is a program stop command. It halts all machine functions — spindle, axes, and coolant — and waits for the operator to press Cycle Start before continuing. Nothing resets when M00 triggers; the program just pauses at that line.
Does M00 reset the CNC program?
No. M00 only pauses the program. All modal settings (feed rate, spindle speed, offsets, positioning mode) stay exactly as they were. The program resumes from the next line when Cycle Start is pressed.
What is the difference between M00 and M01?
M00 is an unconditional stop — the machine always stops when it reads M00. M01 is an optional stop — it only stops the machine if the Optional Stop switch on the control panel is turned on. If the switch is off, M01 is ignored.
Do I need to turn the spindle back on after M00?
Yes. M00 turns the spindle off, and it doesn’t restart automatically when Cycle Start is pressed. You need to include an M03 (or M04 for reverse) in the program after the M00 to restart the spindle.