G-code Dialects

MapleCAM supports multiple G-code dialects to match different CNC controllers.

Supported Dialects

GRBL

The most common controller for hobby CNC machines. Used by Shapeoko, X-Carve, OpenBuilds, 3018 machines, and many others.

Key characteristics:

  • Spindle control via M3 S{speed} / M5
  • Feed rate set with F{rate} on motion commands
  • Arc commands G2/G3 with I/J offsets
  • No subroutines or canned cycles

grblHAL

An enhanced GRBL fork with extended capabilities — cutter radius compensation (G41/G42), tool wear compensation, and canned drilling cycles (G81–G89).

Selecting the grblHAL dialect today produces the same G-code as GRBL: MapleCAM doesn't yet emit the grblHAL-only features, so the choice is purely informational. Pick it if your machine runs grblHAL — output will be identical to GRBL but the dialect setting is recorded with the project so future versions of MapleCAM can take advantage of the extra features.

LinuxCNC

An open-source CNC controller running on Linux PCs. Common in more advanced hobby and semi-professional setups.

Key characteristics:

  • Full G-code implementation including canned cycles
  • Spindle control via M3 S{speed} / M5
  • Programs are wrapped with % markers and an O#### program number
  • Comments use ( comment ) parentheses (MapleCAM emits this style for LinuxCNC; GRBL uses ; comment)
  • Path blending hint emitted (G64)

Dialect Differences

FeatureGRBLgrblHALLinuxCNC
Comment style; comment; comment( comment )
Program markersnonenone% start/end, O#### program number
Program endM30M30M2
Arc formatI/J incrementalI/J incrementalI/J incremental
Spindle controlM3/M5M3/M5M3/M5
Path blendingnot emittednot emittedG64 (naive mode)
Tool changeM6 T{n} (typically a pause for manual change)M6 T{n}M6 T{n}
Cutter compensation (G41/G42)not supported by firmwarecapable, not emitted todaycapable, not emitted today

Choosing a Dialect

Select the dialect in your machine configuration. If you're unsure, GRBL is the safe default — it works with the majority of hobby CNC controllers.

The dialect is used during G-code export. You can change it at any time without regenerating toolpaths.