2a21c010. The Fall 2026 announcement still describes feed hold as work in progress. An installed firmware build may predate it.
Feed hold pauses queued motion without waiting for the planner queue to empty. Send the real-time character ! to start the hold. Send ~ to resume motion.
| Character | Name | Result |
|---|---|---|
! |
Feed hold | Smoothie reduces the step-ticker rate until motion stops, then reports the Hold state |
~ |
Cycle start | Smoothie raises the rate again and continues the interrupted motion |
These are single real-time characters. Do not add a newline and do not place them inside a G-code file.
The hold starts as soon as the console receives !; it does not wait for buffered moves to finish. Smoothie decelerates by reducing the step-ticker frequency, so the tool still travels some distance before stopping. ~ accelerates the same motion back to its normal rate.
During the held state:
? status query reports Hold.// action:feedhold to its consoles so a connected host can pause its own sender. Host support for this message varies.! while the machine is idle.$J -c jog with $J STOP.ed or le, can consume these characters before the real-time handler sees them. Exit the editor first.~ resumes a feed hold only. It does not clear a halt, recover an emergency stop, or replace M601 after a suspend operation.Feed hold preserves the active motion and allows it to resume. Use suspend and resume for a planned SD-card or streamed-job interruption that may include heater handling and jogging. Use a hardware emergency-stop circuit or Smoothie’s kill controls when safety requires power removal or a non-resumable halt.
See Stopping Smoothie for a side-by-side comparison.
Consoles.cpp receives ! and ~.StepTicker.cpp implements deceleration, hold, and acceleration.Laser.cpp disables laser output during the hold.