G-code Reference for CNC Milling
Motion Codes (Modal Group 1)
Modal codes remain active until replaced by another code from the same group.
| Code |
Function |
Parameters |
| G00 |
Rapid positioning (max speed, no cutting) |
X Y Z |
| G01 |
Linear interpolation (cutting feed) |
X Y Z F |
| G02 |
Circular interpolation, clockwise |
X Y Z I J K / R, F |
| G03 |
Circular interpolation, counter-clockwise |
X Y Z I J K / R, F |
Arc Interpolation (G02/G03)
Two formats for specifying arcs:
Center Offset (I, J, K):
- I = X-offset from current position to arc center
- J = Y-offset from current position to arc center
- K = Z-offset (for helical arcs)
- In XY plane (G17): uses I, J
- In XZ plane (G18): uses I, K
- In YZ plane (G19): uses J, K
Radius (R):
- R > 0: arc < 180 degrees
- R < 0: arc > 180 degrees
Example:
G02 X10 Y0 I5 J0 F200 ; CW arc to , center offset (5,0)
G03 X0 Y10 R10 F200 ; CCW arc to , radius 10
Plane Selection (Modal Group 2)
| Code |
Function |
| G17 |
XY plane (default for milling) |
| G18 |
ZX plane |
| G19 |
YZ plane |
Distance Mode (Modal Group 3)
| Code |
Function |
| G90 |
Absolute positioning |
| G91 |
Incremental positioning |
Units (Modal Group 6)
| Code |
Function |
| G20 |
Inch mode |
| G21 |
Millimeter mode |
Canned Drilling Cycles (Modal Group 1)
| Code |
Function |
Key Params |
| G80 |
Cancel canned cycle |
-- |
| G81 |
Simple drilling |
X Y Z R F L |
| G82 |
Spot drill with dwell |
X Y Z R P F L |
| G83 |
Deep-hole peck drilling (full retract) |
X Y Z R Q F L |
| G84 |
Right-hand tapping |
X Y Z R F L |
| G85 |
Boring, feed out |
X Y Z R F L |
| G86 |
Boring, spindle stop, rapid out |
X Y Z R F L |
| G73 |
High-speed peck (chip break, short retract) |
X Y Z R Q F L |
Parameters:
- R = retract plane (Z height for rapid between holes)
- Q = peck depth increment
- P = dwell time at bottom (milliseconds)
- L = repeat count
Tool Compensation
| Code |
Function |
| G40 |
Cancel cutter radius compensation |
| G41 |
Cutter radius compensation left |
| G42 |
Cutter radius compensation right |
| G43 |
Tool length compensation positive |
| G49 |
Cancel tool length compensation |
Work Coordinate Systems
| Code |
Function |
| G54 |
Work coordinate system 1 (default) |
| G55-G59 |
Work coordinate systems 2-6 |
| G92 |
Set position (coordinate system offset) |
M-Codes (Miscellaneous Functions)
| Code |
Function |
| M0 |
Program pause (operator resume) |
| M1 |
Optional stop |
| M2 |
Program end |
| M3 |
Spindle on, clockwise |
| M4 |
Spindle on, counter-clockwise |
| M5 |
Spindle stop |
| M6 |
Tool change |
| M7 |
Mist coolant on |
| M8 |
Flood coolant on |
| M9 |
Coolant off |
| M30 |
Program end and rewind |
Feed Rate and Spindle
| Letter |
Function |
| F |
Feed rate (mm/min or in/min) |
| S |
Spindle speed (RPM) |
| T |
Tool number (e.g., T1, T2) |
| N |
Line number (optional) |
Complete G-code Program Example
%
O0001
G21 G90 G17
G54
T1 M6
S18000 M3
G43 H1
G00 X0 Y0 Z10
G00 Z2
G01 Z-2 F200
G01 X40 F800
G01 Y30
G01 X0
G01 Y0
G01 Z-4 F200
G01 X40 F800
G01 Y30
G01 X0
G01 Y0
G00 Z50
M5
M9
G28
M30
%
Modal vs Non-Modal
Modal codes stay active: G00, G01, G02, G03, G17-G19, G20/G21, G40-G43, G54-G59, G80-G89, G90/G91
Non-modal codes execute once: G04 (dwell), G28 (return to home), G92 (set position)
Controller Dialects
| Feature |
LinuxCNC |
Grbl |
FANUC |
Haas |
| Arc format |
I/J/K and R |
I/J/K and R |
I/J/K and R |
I/J/K and R |
| Canned cycles |
Full G73-G89 |
None |
Full G73-G89 |
Full G73-G89 |
| Tool change |
M6 |
Manual |
M6 |
M6 |
| Subroutines |
O-codes |
None |
M98/M99 |
M97/M98 |
| Variables |
#1-#999 |
None |
#1-#999 |
#1-#999 |
| Peck drilling |
G83 |
Manual |
G83 |
G83 |