G-code and M-code List with Examples and Tutorials

Last modified: June 12, 2024

Complete CNC G-code list with M-codes for milling in the Fanuc, LinuxCNC, GRBL, and Haas CNC machines dialects.  We give a quick definition for all G-codes along with a link to tutorials and examples of how to use it in CNC programming.  Click the G-code link (if any) to visit a tutorial from our popular Online Free G-code Training that shows examples and teaches how to program CNC machines using the G-code commands.  This page is your ideal G-code reference.

G-code List

Code Category Function Notes
G00 Motion Rapid: Move in a straight line at rapid speed. XYZ of endpoint
G01 Motion Move in a straight line at last speed commanded by a (F)eedrate XYZ of endpoint
G02 Motion Circular Interpolation: Clockwise circular arc at (F)eedrate XYZ of endpoint IJK relative to center R for radius
G03 Motion Circular Interpolation: Counter-clockwise circular arc at (F)eedrate XYZ of endpoint IJK relative to center R for radius
G04 Motion Dwell: Stop for a specified time. P for milliseconds X for seconds
G05 Motion FADAL Non-Modal Rapids
G09 Motion Exact stop check
G10 Compensation Programmable parameter input
G15 Coordinate Turn Polar Coordinates OFF, return to Cartesian Coordinates
G16 Coordinate Turn Polar Coordinates ON
G17 Coordinate Select X-Y plane (Plane Selection)
G18 Coordinate Select X-Z plane (Plane Selection)
G19 Coordinate Select Y-Z plane (Plane Selection)
G20 Coordinate Program coordinates are inches
G21 Coordinate Program coordinates are mm
G27 Motion Reference point return check
G28 Motion Return to home position
G29 Motion Return from the reference position
G30 Motion Return to the 2nd, 3rd, and 4th reference point
G32 Canned Constant lead threading (like G01 synchronized with spindle)
G40 Compensation Tool cutter compensation off (radius comp.)
G41 Compensation Tool cutter compensation left (radius comp.)
G42 Compensation Tool cutter compensation right (radius comp.)
G43 Compensation Apply tool length compensation (plus)
G44 Compensation Apply tool length compensation (minus)
G49 Compensation Tool length compensation cancel
G50 Compensation Reset all scale factors to 1.0
G51 Compensation Turn on scale factors
G52 Coordinate Local workshift for all coordinate systems: add XYZ offsets
G53 Coordinate Machine coordinate system (cancel work offsets)
G54 Coordinate Work coordinate system (1st Workpiece)
G55 Coordinate Work coordinate system (2nd Workpiece)
G56 Coordinate Work coordinate system (3rd Workpiece)
G57 Coordinate Work coordinate system (4th Workpiece)
G58 Coordinate Work coordinate system (5th Workpiece)
G59 Coordinate Work coordinate system (6th Workpiece)
G61 Other Exact stop check mode
G62 Other Automatic corner override
G63 Other Tapping mode
G64 Other Best speed path
G65 Other Custom macro simple call
G68 Coordinate Coordinate System Rotation
G69 Coordinate Cancel Coordinate System Rotation
G73 Canned High speed drilling cycle (small retract)
G74 Canned Left hand tapping cycle
G76 Canned Fine boring cycle
G80 Canned Cancel canned cycle
G81 Canned Simple drilling cycle
G82 Canned Drilling cycle with dwell (counterboring)
G83 Canned Peck drilling cycle (full retract)
G84 Canned Tapping cycle
G85 Canned Boring cycle, no dwell, feed out
G86 Canned Boring cycle, spindle stop, rapid out
G87 Canned Back boring canned cycle
G88 Canned Boring canned cycle, spindle stop, manual out
G89 Canned Boring canned cycle, dwell, feed out
G90 Coordinate Absolute programming of XYZ (type B and C systems)
G90.1 Coordinate Absolute programming IJK (type B and C systems)
G91 Coordinate Incremental programming of XYZ (type B and C systems)
G91.1 Coordinate Incremental programming IJK (type B and C systems)
G92 Coordinate Offset coordinate system and save parameters
G92 (alternate) Motion Clamp of maximum spindle speed S
G92.1 Coordinate Cancel offset and zero parameters
G92.2 Coordinate Cancel offset and retain parameters
G92.3 Coordinate Offset coordinate system with saved parameters
G93 Motion Inverse Time Feed Mode. For use with rotary axes
G94 Motion Units per minute feed mode. Units in inches or mm
G95 Motion Units per revolution feed mode. Units in inches or mm
G96 Motion Constant surface speed
G97 Motion Cancel constant surface speed
G98 Canned Return to initial Z plane after canned cycle
G99 Canned Return to initial R plane after canned cycle

M-code List

Code Category Function Notes
M00 M-code Program stop (non-optional)
M01 M-code Optional Stop: Operator Selected to Enable
M02 M-code End of Program
M03 M-code Spindle ON clockwise
M04 M-code Spindle ON (CCW Rotation)
M05 M-code Spindle Stop
M06 M-code Tool Change
M07 M-code Mist Coolant ON
M08 M-code Flood Coolant ON
M09 M-code Coolant OFF
M17 M-code FADAL subroutine return
M29 M-code Rigid Tapping Mode on Fanuc Controls
M30 M-code End of Program, Rewind and Reset Modes
M97 M-code Haas-Style Subprogram Call
M98 M-code Subprogram Call
M99 M-code Return from Subprogram
F Address Set Feedrate
S Address Set Spindle Speed
T Address Select Tool for Tool Change
X, Y, Z, A Address Sets coordinates for the axes: x axis, y axis, z axis and a axis.

Some Thoughts on G-codes and M-codes

G-codes and M-codes are the basic programming language used by most CNC Machines.  These same G-codes are probably the ones used by your CNC machine.

Most cnc programming of G-codes and M-codes is done using Computer Aided Manufacturing (CAM) Software.  If you are able to program directly in G-codes and M-codes, you can do things that CAM software cannot.  These things will make you a more productive CNC'er.  Being able to control cnc machines at this level is one thing that can give machine shops competitive advantage.

More In-Depth CNC Guides

If you're a CNC beginner, check out our CNC Beginner's Cookbook. It'll get you up to speed with a solid CNC foundation fast.

We also have Cookbooks for Feeds and Speeds, G-code Programming, CNC Manufacturing and Shop Management, DIY CNC, and don't forget the CNC Cookbook Blog-with over 4 million visitors a year it's the most popular CNC blog by far on the web.

More Resources

Mazatrol Training Classes

Fanuc CNC Training Classes

G-code Commands FAQ

How many G-codes are there in cnc machining?

There are about 100 G-code commands, give or take.  There are many dialects of G-code, and some have proprietary G-codes.

What are G-codes in CNC Machines?

This page lists all the G-code commands used in CNC programming and tells what they do.  It also gives links to tutorials and examples.  G-codes are single-letter commands that tell the CNC machine what to do.  They may command motion (i.e. tell the machine where to cut) or do things like turn the spindle on or off.

Is learning G-code hard?

Learning G-code isn't very hard.  We have a complete free online G-code tutorial to teach you and a G-code simulator that makes learning easy.

Why are G-codes used?

G-codes make CNC Machines programmable, which gives them the flexibility to make almost any part.

What is the difference between G-codes and M-codes?

The G in G-codes stands for Geometry, which means giving the CNC Machine directions on how and where to move.  The four simplest motion-related G-codes are:

M-codes are about Machine functions on the CNC machine.

Do all CNC machines use G-code?

Not all CNC machines use G-code.  Some CNC machines may have both G-code and other ways of programming, for example, alternate languages such as Mazak's Mazatrol or Conversational Programming.  Others may have an alternate language and no ability to execute G-code at all.

Be the first to know about updates at CNC Cookbook

Join our newsletter to get updates on what's next at CNC Cookbook.