Reference

Supported G-code & M-code

The complete, current list. What the viewer executes and puts on the clock, and what it deliberately leaves out. Anything in the second group is disclosed per file, by name, in the “Good to know” panel. Matches viewer v1.3.

How to read this page

Codes in the first group are executed: they move the simulated machine and their time lands in the estimate. Codes in the second group are declared out of scope: the viewer falls back to safe behaviour and names them in a per-file note, so you always know what the number covers. A file made entirely of codes from the first group simulates completely.

Motion & time model

  • G00 rapid, G01 feed, G02/G03 arcs (R or I/J/K) in all three planes (G17/G18/G19)
  • Every move is motion planned against your machine profile: per-axis rapid and acceleration limits, corner speed from true path geometry (√(a × R)), and, when a jerk value is set, full S-curve ramps with a jerk corner limit (∛(J × R²)). Jerk = 0 gives exact trapezoidal motion.
  • G90/G91 absolute / incremental, G20/G21 inch / metric

Canned cycles, expanded and timed

  • G81 drill, G82 spot/counterbore with bottom dwell, G83 deep-hole peck, G73 chip-break peck
  • G84 / G74 rigid tapping: feed in, spindle reversal pause at the bottom, feed out
  • G85 / G86 boring, G89 boring with dwell. Feed retracts where the cycle feeds out
  • G80 cancel, G98/G99 retract planes, L repeat counts, modal cycle parameters

Subprograms, expanded inline

  • Fanuc M98 P with L repeats, including the packed form (M98 P51000 = O1000 × 5), plus M99 return
  • Haas M97 local N-block calls (resolved after M30, per convention)
  • LinuxCNC o…sub / o…call / o…return / o…endsub, numbered or named
  • Nested calls to depth 10, up to 10,000 repeats per call and 200,000 expanded lines. Beyond a cap, or on any unresolved call, the file falls back to unexpanded, with the reason named.

Dwells, read by dialect

G04 with P or X. Integer P is read as milliseconds for Fanuc/Haas-style programs and seconds for LinuxCNC/GRBL-style ones. The viewer infers the dialect from the whole file (headers, parameter style) and tells you which rule it applied. Cycle dwells (G82/G89 P) follow the same rules.

Feed modes

G94 units per minute and G95 units per revolution. In G95 the actual feed is F × S from the modal spindle speed, and the viewer says so if S was never set.

Path control, in the time model

G61 / G61.1 exact stop mode and G09 (single block) bring the tool to a full stop at block ends. G64 P blend tolerance raises corner speed by exactly the tolerance you programmed.

Program flow & M-codes

  • M02 / M30 program end. Nothing after it runs except called subprograms
  • M06 tool change at your configured seconds, animated in playback. T words tracked
  • M03 / M04 / M05 spindle (feeds G95 and tapping behaviour). S and F modal
  • G28 / G30 reference return via the optional intermediate point, to a home position you set
  • Comments, N numbers, % wrappers and blank lines handled as a control reads them

Machine dynamics you configure

Rapid XY and Z, acceleration XY and Z, jerk (0 = off), tool change seconds, and the G28/G30 home position. Two numbers from your machine’s manual get close. Simulating a program you’ve actually timed gets exact.

Declared out of scope, disclosed per file

When any of these appear, the viewer names them in the “Good to know” panel and falls back safely:

  • Macro B: #variables, G65, WHILE/IF/REPEAT. Subprogram calls with [arguments] are left unexpanded and named
  • G41/G42 cutter compensation. The programmed path is shown, not the offset path
  • G10 / G52 / G53 / G92 coordinate system offsets. Not applied
  • Multiple work offsets (G54 to G59). The time is right, but all fixtures plot from one origin, so rapids between them are approximate
  • G76 / G87 / G88 fine and back-boring cycles
  • G33 threading, G5.x splines/NURBS, G7 lathe diameter mode
  • G93 inverse-time feed. Affected moves use an assumed feed, with a warning
  • M00 / M01 program stop. Operator wait time is yours to add

Finding one of these in a file without a matching note would be a bug, so please tell us.

Reporting a file we simulate wrong

That’s the most valuable thing you can send. Confirmed issues get fixed, added to our regression tests, and credited in the changelog. Include the file, or just the offending lines, with your report via feedback. A stripped-down snippet that shows the problem is plenty.

Testing, on the other hand, is always private: the viewer runs your G-code locally and never uploads it. What you share with a bug report is entirely your call.

Open the viewer →

← Back to the G-code Viewer