M00 G-Code: Program Stop Explained With Examples

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
FunctionProgram Stop (unconditional)
TypeNon-modal
Turns offSpindle, coolant, axis movement
Resumes withCycle Start button
Resets modal states?No
Related codesM01 (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:

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
cnc machine table with coolant lines and spindle shown
So many coolant lines to move

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.

fanuc cnc control panel with cycle start button highlighted
Fanuc cycle start button

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.

haas cnc control panel with optional stop button highlighted
Haas optional stop button

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.

Speed:
— M01 will be skipped
Machine State
Spindle
Coolant
Feed
ProgramIDLE
Press Cycle Start to run the program.
Executing
Completed
Stop command
Skipped (M01 off)

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.