---
title: "Lathe vs Mill G-Code Differences: A Cheat Sheet"
description: "The motion core is identical; six differences do the damage: default plane, diameter programming, feed modes, CSS, cycle families, and comp mechanics."
url: https://gcodepractice.com/journal/lathe-vs-mill-g-code-differences-cheat-sheet/
canonical: https://gcodepractice.com/journal/lathe-vs-mill-g-code-differences-cheat-sheet/
author: "Lawrence Arya"
authorUrl: https://www.linkedin.com/in/vibecoding/
published: 2026-06-04
updated: 2026-06-04
category: "Code reference"
tags: ["lathe", "mill", "cheat-sheet", "g-code", "comparison"]
lang: en
---

# Lathe vs Mill G-Code Differences: A Cheat Sheet

> **TL;DR** Lathe and mill G-code share their motion core: G00, G01, arcs, units, positioning, and work offsets behave identically. Six differences matter: lathes default to the G18 plane with I and K arcs, program X as diameter, commonly feed per revolution, add constant surface speed with G96/G97 and the G50 cap, use the G70-G76 turning cycles instead of G81-G89 drilling cycles, and apply the same G41/G42 comp codes to tool-nose radius instead of cutter diameter.

Machinists crossing between turning and milling fear a second language course. The real workload is smaller: the motion core is identical on both machines, and the differences fit on one short list. This page is that list, with the traps marked.

## What stays exactly the same?

The code that does most of the work. `G00` rapids, `G01` feeds, `G02` and `G03` arcs, `G20`/`G21` units, `G90`/`G91` positioning, the `G54` offset family, and the coolant and spindle M-codes all behave identically, the shared inheritance documented in any [standard reference](https://linuxcnc.org/docs/html/gcode/g-code.html). The M-code side of the crossing, including the tool-change split, has its own map in [how to remember lathe M-codes vs mill M-codes](/journal/how-to-remember-lathe-m-codes-vs-mill-m-codes/); this page covers the G side.

## The cheat sheet: six differences that matter

| Difference | Mill | Lathe |
| --- | --- | --- |
| Default plane | `G17` (XY), arcs use `I`, `J` | `G18` (XZ), arcs use `I`, `K` |
| X values mean | Distance | Diameter, usually |
| Common feed mode | Per minute (`G94`) | Per revolution |
| Speed control | Direct RPM (`S` + `M03`) | `G96` CSS + `G97` + `G50` cap |
| Canned cycles | `G81`-`G89` drilling family | `G70`-`G76` turning family |
| `G41`/`G42` compensate | Cutter diameter (`D`) | Tool-nose radius |

Row one quietly explains a whole class of arc errors: a [lathe](https://en.wikipedia.org/wiki/Lathe) arc wants `I` and `K` because the arc lives in the XZ plane, and `J` there is an out-of-plane word. Row two is the identity anchor from [stopping the X and Z mix-up](/journal/how-to-stop-mixing-up-x-and-z-axis-on-a-lathe/): lathe X is a size. Row four is its own safety topic, the [G50 spindle cap with constant surface speed](/journal/g50-max-spindle-speed-crash-lathe/). Row five's turning side, `G71` and `G72` roughing with `G70` finishing, is unpacked in [the lathe roughing cycles](/journal/lathe-g71-vs-g72-roughing-cycle-practice/).

And one family note: the differences above assume the Fanuc-shaped mainstream; controls with their own parallel traditions, like [Okuma's OSP](/journal/okuma-osp-p300-g-code-list/), keep the motion core and re-spell the conventions around it.

## Which trap catches the most people?

The codes that exist on both machines with different meanings. The famous pair on Fanuc-style controls: on a lathe, `G98` and `G99` select feed per minute versus feed per revolution; on a mill, the same two codes set canned-cycle return heights, initial level versus R plane. Nothing in the syntax warns you, so the [cheat sheets](https://www.cnccookbook.com/g-code-m-code-cnc-list-cheat-sheet/) that list both meanings side by side earn their keep. The safe habit is contextual reading: before trusting any G-code in the 90s, name the machine type first.

A concrete failure from this trap: a mill programmer covering a lathe shift read `G99` in a turning cycle as a return-height word and left it alone while doubling the spindle speed, not registering that `G99` made every feed per-revolution, so the doubled RPM doubled the actual feed too. The insert paid for the lesson.

## How should you actually learn the crossing?

As core plus deltas, never as two languages. The shared core is most of every program and is already a compact recall set; the six differences attach to it as a checklist you can rehearse in one sitting. Reading real programs from the other machine type, narrating each block, converts the list into instinct within a couple of weeks, and the coolant and spindle families that behave identically on both, the `M08`/`M09` pattern included, come along free from [the coolant-code family drill](/journal/i-keep-forgetting-which-m-code-turns-off-the-coolant/).

## Bottom line

Lathe and mill G-code share their motion core; six deltas carry all the difference: plane and arc words, diameter X, feed per revolution, CSS with its cap, the cycle families, and what `G41`/`G42` compensate. Learn the core once, drill the deltas as a list, and treat any 90s-numbered code as machine-type-dependent until proven otherwise. The recall layer for both machines runs free on the [G-code practice hub](/g-code-practice/).

## Sources

- [LinuxCNC G-code reference](https://linuxcnc.org/docs/html/gcode/g-code.html)
- [Wikipedia: Lathe](https://en.wikipedia.org/wiki/Lathe)
- [CNCCookbook: G-code and M-code cheat sheet](https://www.cnccookbook.com/g-code-m-code-cnc-list-cheat-sheet/)

## Frequently asked questions

### What are the G-code differences between a lathe and a mill?
Six matter: default plane (`G18` with `I`/`K` arcs vs `G17` with `I`/`J`), diameter programming for lathe X, feed per revolution on lathes, `G96`/`G97` constant surface speed with the `G50` cap, the `G70`-`G76` turning cycles vs `G81`-`G89` drilling cycles, and tool-nose radius behind the same `G41`/`G42` codes.

### Do G98 and G99 mean the same thing on a lathe and a mill?
No. On Fanuc-style lathes they select feed per minute versus per revolution; on mills they set canned-cycle return heights. Same numbers, unrelated meanings.

### Is the motion core really identical on both machines?
Yes: rapids, feeds, arcs, units, positioning, and work offsets behave the same, which is why core-plus-deltas beats learning two languages.

### What is the best way to learn lathe and mill G-code differences?
Learn the shared core to instant recall, then drill the six deltas as a list. A free app like G-Code Sprint quizzes the everyday codes for both machine types and repeats whichever ones you miss.

*G-Code Sprint is a study and practice tool only. Always follow your instructor, employer, machine manual, and shop safety procedures.*

---

Source: https://gcodepractice.com/journal/lathe-vs-mill-g-code-differences-cheat-sheet/
Author: Lawrence Arya — https://www.linkedin.com/in/vibecoding/
