G09, G61, and G64 control what your machine does at the corner where one move ends and the next begins: come to a genuine stop, or flow through with a little rounding. G09 is a one-shot exact stop that applies to a single block. G61 is exact stop mode, the same behavior made modal for every following move. G64 is path blending mode, the usual default, where the control is allowed to round corners slightly so it can keep the tool moving. Blending is why machines are fast, and it is also why the sharp corner you programmed comes out with a tiny radius, why engraving looks melted at high speed, and why a part can measure out of tolerance in the corners while every straight is perfect. Knowing this trio turns a mysterious quality problem into a one-line fix.
Why corners are a problem at all
A machine tool cannot change direction instantly. Arriving at a corner at feed and leaving in a different direction would demand infinite acceleration, so something has to give: either the machine decelerates to zero at the corner, holds position until the servos settle, and accelerates out, or it keeps some speed and swings through a small arc that connects the two moves. The first choice gives a geometrically sharp corner and costs time at every single vertex. The second keeps the feed rate up and shaves the corner by an amount that grows with speed.
Controls expose exactly that trade as a mode. In exact stop behavior, each block ends with the machine confirmed in position before the next begins, what Fanuc-family documentation calls the in-position check. In blending behavior, the control reads ahead through coming moves and plans a continuous path through them within some tolerance, never fully stopping. The read-ahead machinery doing that planning is the same look-ahead buffer described in what block look-ahead is and why machines pause; G61 and G64 are the knobs a program has over it.
What each code does
| Code | Scope | Behavior at the end of a move | Typical use |
|---|---|---|---|
| G09 | One block only | Decelerate to zero, verify in position, then continue | A single corner or seat that must be dead sharp |
| G61 | Modal until canceled | Every move ends with a full stop and position check | Inspection-critical features, spotting, some engraving |
| G64 | Modal, usual default | Corners blended within tolerance, motion continuous | Roughing and general machining, speed priority |
On LinuxCNC the pair is explicit and adjustable: the LinuxCNC G-code reference defines G61 as exact path mode and G64 with an optional P word, G64 P0.01 for example, that names the maximum deviation the blend may take from the programmed path. That P word is the honest version of the trade: you state in machine units how much corner rounding you will accept, and the control goes as fast as that tolerance allows. Fanuc-family controls express the same ideas as G09 per block and G61 through G64 as modes, as the Fanuc G-code list shows, with the blending aggressiveness governed by parameters and by high-speed, high-precision options rather than a P word in the program.
Two details are worth pinning. G09 lives in the block it is written in and affects nothing after it, which makes it the surgical tool: one G09 G01 X… line gives one perfect corner without slowing the rest of the program. And G61 stays active until G64 restores blending, which is the classic way a program mysteriously slows to a crawl: someone set exact stop for a feature and never turned it back off, so every one of ten thousand tiny moves afterwards ended with a full stop and settle.
The symptoms each mode explains
Corner rounding under G64 is the big one. Program a sharp outside corner, run fast, and the corner comes back with a small radius; the faster the feed and the looser the blend tolerance, the bigger the radius. On many parts nobody cares. On a gauge seat, a seal groove corner, or an inspection feature with a corner callout, it is a rejection. The instinct is often to blame the machine or cutter compensation, but if straights measure perfect and only corners are off, blending is the suspect, and a G09 on the relevant blocks or a G61 window around the feature is the fix.
Small-move stutter is the mirror symptom. Toolpaths made of thousands of tiny segments, 3D surfacing, engraved lettering, digitized curves, run horribly in exact stop mode: the machine stops at every segment boundary, so motion turns into a buzz of accelerations that never reach the programmed feed. The same program under G64 with a sensible tolerance flows smoothly. When a surfacing program runs at a fraction of its commanded feed and the finish shows facet lines, checking the active mode comes before blaming the machine; the general diagnostic path for that family of symptoms is laid out in how to read G-code to find errors.
Engraving sits in between and shows the trade at its sharpest. Letters are exactly the small-segment paths that need blending to run at speed, and exactly the geometry that turns illegible when the blend tolerance eats the detail. The working recipe on an adjustable control is G64 with a small P value sized to the lettering, a 0.3 mm tall serif cannot survive a 0.05 mm blend tolerance, and on Fanuc-style controls the equivalent is the high-precision mode the builder provides. The specifics of engraving programs, single-line fonts and depth control, are in engraving text G-code basics.
A fragment that mixes the modes deliberately
(roughing: blended, fast)
G64 (or G64 P0.05 on LinuxCNC)
(...roughing passes at full feed...)
(finish the gauge seat corner exactly)
G61
G01 X2.000 Y0.500 F6.0
G01 X2.000 Y1.250
G01 X1.400 Y1.250
G64 (back to blending for the rest)
(one-off sharp corner elsewhere, single block)
G09 G01 X4.500 Y0.750 F6.0
The pattern to copy is the windowing: exact stop is turned on for the three moves that form the critical feature and turned off on the next line. Leaving G61 active from the seat to the end of the program would multiply the cycle time for no benefit. The G09 line shows the lighter tool, one corner made sharp without any modal state to remember to undo. Both idioms keep the mode decision visible in the program, next to the geometry that needs it, instead of buried in a setup sheet.
The same windowing thinking applies when inheriting programs. Search an unfamiliar program for G61, G09, and G64 before running it: a stray G61 explains slow running, a missing one explains a corner complaint from inspection, and either way the modes tell you what the last programmer was worried about. Modal states like these, active until explicitly changed, are precisely the states worth listing in a mental checklist, alongside the units and distance modes covered in modal versus non-modal G-codes.
How large is the rounding in practice? A rough feel helps calibrate worry. The deviation scales with the square of feed rate divided by the machine’s corner acceleration, so doubling the feed roughly quadruples the corner error a blend must absorb. At finishing feeds on a rigid VMC the default blend error is typically well under a thousandth of an inch, which is why most parts never show the effect; at high-speed-machining feeds through a small corner, the same default can shave visible material. That scaling explains the common observation that a proven program starts failing corner checks only after someone raised the feed override: nothing changed in the code, but the blend arcs grew with the speed. When inspection flags corners on a previously good job, asking what the override was set to is a faster first check than re-measuring the machine.
Control differences worth knowing
The behavior boundary between control families is wide enough to matter. GRBL and most hobby controls implement continuous blending with a junction-speed algorithm and no G61 at all in older versions; newer GRBL accepts G61 but support varies by build, so a program that depends on exact stop may simply not get it on a router. LinuxCNC gives the most explicit control, G61, G61.1, and G64 P with a documented tolerance. Fanuc and its relatives honor G09 and G61 through G64 but put the tuning in parameters and options, so two machines with identical programs can corner differently because their parameter sets differ; the machine builder’s settings decide how aggressive default blending is.
The consequence for portable knowledge: treat exact stop as a request whose strength varies by machine, verify on the machine in front of you, and when a drawing genuinely requires a sharp internal corner, remember that no motion mode conjures one smaller than the tool radius; that is a tool choice, not a mode choice. The modes govern the path of the tool center, and the geometry the part receives still follows from tool shape plus that path.
Bottom line: blend by default, stop by exception
G64 blending is the right default: it is what keeps feed rates real on every program with more than a handful of moves. Reach for G09 when one corner must be exact, and for a G61 window when a feature’s worth of moves must be; always close the window with G64. When corners measure round, suspect blending before the machine; when small-segment paths stutter, suspect exact stop. And on adjustable controls, prefer stating the tolerance, G64 P, over silently accepting whatever the default allows, because a number in the program is a decision, and a default is a guess.
Frequently asked questions
What is the difference between G09, G61, and G64?
G09 forces an exact stop at the end of the single block it appears in. G61 makes exact stops modal: every following move decelerates to zero and verifies position before the next begins. G64 is path blending, the usual default, where the control rounds corners slightly within a tolerance to keep motion continuous. Use G64 for general machining, G09 for one critical corner, and a G61 window closed by G64 for a critical feature.
Why does my CNC round off sharp corners?
Because blending mode is doing its job: under G64 the control connects consecutive moves with a small arc so it does not have to stop, and the arc grows with feed rate and blend tolerance. If straights measure perfectly and corners are consistently shy, add G09 to the corner blocks or wrap the feature in G61 … G64. On LinuxCNC you can also tighten the tolerance explicitly with G64 P followed by the allowed deviation.
Why does my program run slowly and stutter on small moves?
Almost always exact stop mode active on a path made of thousands of tiny segments: the machine stops and settles at every segment boundary and never reaches the programmed feed. Search the program for a G61 or G09 that nobody canceled and restore G64. Surfacing, engraving, and digitized toolpaths all need blending to run at speed; exact stop on those paths turns feed moves into a slow buzz.
What is the best way to remember mode codes like G61 and G64?
Drill them with active recall until the trio is a reflex: G09 one block, G61 modal stop, G64 blend. A free app like G-Code Sprint quizzes these codes in short timed rounds and resurfaces the ones you miss, which is a better use of ten minutes than rereading a manual page, and it covers the neighboring modal states, units, distance modes, planes, that live in the same mental checklist.
Does exact stop mode give me perfectly sharp inside corners?
No. Exact stop makes the tool center path hit its programmed corner exactly, but an inside corner can never be smaller than the radius of the tool cutting it; the mode removes blending error, not tool geometry. For a genuinely sharp internal corner the options are a smaller tool, a different process such as EDM or broaching, or a drawing change. Exact stop is for corner accuracy within what the tool can produce.