Skip to content

GRBL '$' Commands

Nikos Siatras edited this page Mar 2, 2026 · 20 revisions

The $ commands in Rabbit GRBL are special system-level commands used to read and modify settings, view controller state, run homing cycles, store startup blocks, and perform configuration actions.
They are not G-code and execute immediately when received.

To view available system commands, open a serial terminal and type:

$

Rabbit GRBL will respond with a help list of all $ commands.


Summary of $ Commands

Command Description
$$ View all Rabbit GRBL settings
$+ View all Rabbit GRBL extended settings
$L List all GRBL setting names
$S List all settings (GRBL + Extended)
$SC List only settings that differ from their default values
$x=val Change a Rabbit GRBL setting
$# View G-code parameters (offsets, probe data)
$G View G-code parser modal state
$I View build info string
$N View startup blocks
$Nx=line Save a startup block
$C Check G-code mode (no movement)
$X Kill alarm lock
$H Run homing cycle (all axes)
$HX $HY $HZ $HA $HB $HC Home a single axis
$J=line Execute jog command
$EA & $EA=id List all Rabbit GRBL alarm codes and titles
$EE & $EE=id List all Rabbit GRBL error codes and titles
$CMD List all registered $ commands
$V View NVS (EEPROM) storage statistics
$RST=$ Restore settings to defaults
$RST=# Clear work coordinate offsets
$RST=* Factory reset Rabbit GRBL EEPROM
$NVX Erase the entire NVS partition
$SLP Enter sleep mode

Detailed Command Descriptions

$$ — View Rabbit GRBL Settings

Prints all standard GRBL configuration settings (steps/mm, max rate, acceleration, limits, etc.).
Values are stored in NVS (non-volatile storage) and persist across power cycles.

See Rabbit GRBL Settings for more details.


$+ — View Extended Settings

Prints all Rabbit GRBL extended settings — configuration options that go beyond the standard GRBL setting set.
These include Rabbit GRBL-specific parameters such as spindle delays, stepper enable delays, and other advanced options.

Like standard settings, extended settings are stored in NVS and persist across power cycles.


$L — List GRBL Setting Names

Prints the named path of every standard GRBL setting.
This is useful for identifying the human-readable name of a setting alongside its numeric index.

Example response:

$0 =Stepper/Pulse
$1 =Stepper/IdleDelay
$2 =Stepper/StepInvert
...

$S — List All Settings

Prints all settings — both standard GRBL settings and Rabbit GRBL extended settings — in a single combined list.

This is equivalent to running $$ and $+ together.


$SC — List Changed Settings

Prints only the settings whose current value differs from their compiled default.
This is useful for auditing your configuration and quickly identifying what has been customized.


$x=val — Write Setting

Writes a value to a setting.
Example:

$100=80

Sets X-axis steps/mm to 80.


$# — View G-Code Parameters

Displays stored coordinate offsets and system values:

  • G54–G59 work coordinate offsets
  • G28/G30 stored positions
  • G92 offset
  • Tool length offset (TLO)
  • Last probe position (PRB)

Example response:

[G54:0.000,0.000,0.000]
[PRB:10.000,5.000,-2.000:1]

$G — View Parser State

Shows all currently active G-code modal states.

Example:

[GC:G0 G54 G17 G21 G90 G94 M5 M9 T0 F500 S0]

$I — View Build Info

Prints firmware version and optional custom identifier.

When sent to the controller, it responds with structured status lines such as:

[VER:1.1h.20260222]
[OPT:MPH]

Description

  • [VER:1.1h.20260222]
    Contains the GRBL core version (1.1h) and the firmware build date in YYYYMMDD format.

  • [OPT:MPH]
    Lists the compile-time options enabled in the firmware.

Why It Matters

G-code senders use the VER string to determine how the controller's Status Report should be parsed.

Rabbit GRBL reports VER:1.1h because its Status Report message format is 100% compatible with the GRBL 1.1h Status Report structure.

This ensures that G-code senders designed for GRBL 1.1h can correctly interpret and parse the status messages returned by Rabbit GRBL.


$N — View Startup Blocks

Shows stored startup lines executed automatically on reset.

Example:

$N0=
$N1=

$Nx=line — Save Startup Block

Stores a G-code line to run at startup.

Example:

$N0=G20 G17 G54

⚠️ Do NOT store motion commands (G0/G1/etc.).
They will run after reset and may cause unintended movement.


$C — Check G-Code Mode

This command toggles Check Mode in Rabbit GRBL.

When enabled, Rabbit GRBL processes all incoming G-code blocks exactly as it would during normal operation, fully parsing and validating them. However, no axis motion is executed, dwell commands are ignored, and the spindle and coolant outputs remain off.

This mode allows users to verify how their G-code program is interpreted by the parser and detect potential errors before running a real job. If soft limits are enabled, soft limit violations are also checked.

When Check Mode is toggled off, Rabbit GRBL performs an automatic soft reset (^X). This simplifies internal state management and ensures the controller returns to a clean and consistent state, preventing accidental job execution with unexpected or leftover modal states. A system reset guarantees a predictable starting condition before actual machining begins.


$X — Kill Alarm Lock

Rabbit GRBL enters Alarm mode when a critical condition occurs, such as a hard limit trigger, an abort during a cycle, or when the controller does not know its machine position.

If homing is enabled, Rabbit GRBL will enter Alarm mode at power-up because the machine position is unknown. In this state, all G-code commands are locked until a homing cycle ($H) is completed.

The $X command clears the alarm lock and re-enables G-code execution without performing homing. This can be useful, for example, to move the machine away from limit switches.

However, use this command with extreme caution. The machine position is likely undefined, and the controller may not be where you expect it to be. It is strongly recommended to use G91 (incremental mode) and perform short, controlled moves. A homing cycle or a full reset should be executed immediately afterward.

Startup lines do not execute after a $X command. Once the alarm condition has been resolved, perform a reset to return the controller to a known and consistent state. After reset, startup lines will execute normally.


$H — Run Homing Cycle

This command is the only way to execute the homing cycle in Rabbit GRBL.
Unlike some motion controllers that use a dedicated G-code command for homing, Rabbit GRBL follows the G-code standard, where homing is handled as a controller-level command, not as a G-code instruction.

TIP: After completing a homing cycle, instead of manually jogging the machine to a preferred working area every time, you can define a preset position using G28 or G30.

To set a post-homing position:

  1. Jog the machine to the desired location.
  2. Enter G28.1 (or G30.1) to store that position.

After running $H, you can simply enter G28 (or G30) and the machine will automatically move to the stored position.

A common and safe practice is to move the XY axes toward the center of the workspace and keep the Z-axis raised. This reduces the risk of tool interference and prevents the spindle from catching on fixtures or material.


$HX $HY $HZ $HA $HB $HC — Single Axis Homing

When HOMING_SINGLE_AXIS_COMMANDS is enabled at compile time, Rabbit GRBL registers individual homing commands for each axis.

Command Description
$HX Home the X axis only
$HY Home the Y axis only
$HZ Home the Z axis only
$HA Home the A axis only
$HB Home the B axis only
$HC Home the C axis only

These commands are useful when you need to re-home a single axis without running a full homing cycle. Each command obeys the same homing rules (feed rate, pull-off, direction) as the full $H cycle.

Note: Single-axis homing commands do not execute startup lines after completion. Startup lines only run after a full $H (all axes) cycle.


$J=line — Jog Mode

Executes a real-time jog movement.

Example:

$J=G91 X5 F200

Notes:

  • Jog commands do not modify modal state.
  • Can be cancelled with the Jog Cancel real-time command.
  • Soft-limit violations return an error but do not trigger an ALARM.

$EA — List Alarm Codes

Prints a list of all Rabbit GRBL alarm codes, their titles and descriptions.

Example response:

[ALARMCODE:0|No alarm|No alarm has been triggered.]
[ALARMCODE:1|Hard limit|Hard limit has been triggered. Machine position is likely lost due to sudden halt. Re-homing is highly recommended.]
[ALARMCODE:2|Soft limit|Soft limit alarm. G-code motion target exceeds machine travel. Machine position retained. Alarm may be safely unlocked.]
...

You can also query a specific alarm by number:

$EA=1

Response:

[ALARMCODE:1|Hard limit|Hard limit has been triggered. Machine position is likely lost due to sudden halt. Re-homing is highly recommended.]

$EE — List Error Codes

Prints a list of all Rabbit GRBL error codes, their titles and descriptions.

Example response:

[ERRORCODE:0|No error|No error.]
[ERRORCODE:1|Expected command letter|G-code words consist of a letter and a value. Letter was not found.]
[ERRORCODE:2|Bad number format|Missing the expected G-code word value or numeric value format is not valid.]
...

You can also query a specific error by number:

$EE=8

Response:

[ERRORCODE:8|Command requires idle state|Grbl '$' command cannot be used unless Grbl is IDLE. Ensure no motions are active and try again.]

$CMD — List All $ Commands

Prints a complete list of all registered $ commands, including their descriptions.

This is useful for discovering all available commands at runtime, especially on custom builds where optional commands (such as single-axis homing) may or may not be enabled.

Example response:

$ = Help
$I = Build Info
$J = Jog Command
$$ = Report Settings
$+ = Report Extended Settings
...

$V — NVS Storage Stats

Prints NVS (Non-Volatile Storage) partition usage statistics.

Example response:

[MSG:NVS Used: 12 Free: 488 Total: 500]

This is useful for diagnosing storage issues on the ESP32, especially after many setting changes or if the controller behaves unexpectedly after a power cycle.


$RST=$ — Restore Rabbit GRBL Settings

Resets all $$ settings to their compiled defaults.


$RST=# — Clear Offsets

Clears all $# coordinate offsets (G54–G59, G28, G30, G92, TLO, PRB).


$RST=* — Full NVS Reset

Clears all settings, offsets, startup lines, and the build info string.


$NVX — Erase NVS Partition

⚠️ DANGER — Irreversible operation.

Completely erases the ESP32 NVS (Non-Volatile Storage) partition. This removes all stored data, including settings, coordinate offsets, startup lines, and any other persisted values.

This is a lower-level operation than $RST=*. Use this only as a last resort, for example when the NVS partition is corrupted and the controller fails to boot or behave correctly.

After executing $NVX, the controller must be reset. On next boot, all settings will revert to their compiled defaults.


$SLP — Sleep Mode

De-energizes stepper motors, spindle, and coolant.
Rabbit GRBL will enter ALARM state when woken via reset or power cycle.


Notes

  • $ commands are configuration or state commands — not motion commands.
  • Real-time commands (~, !, ?, Ctrl+X) are completely separate from $ commands.
  • Startup blocks do not execute if Rabbit GRBL powers up in ALARM state.

Clone this wiki locally