Why Your 3D Printed Holes Always Come Out Too Small (And the Math to Fix It)
Every 3D-printed hole shrinks by 0.1–0.3mm. Here's the physics behind it, the per-material numbers, and the exact CAD compensation formula that makes M3 bolts fit on the first try.
You designed a part. The CAD file says the hole is 3mm. You sliced it, printed it, and now your M3 bolt won’t fit. You grab calipers, measure the hole, and it reads 2.74mm. The bolt is 3.0mm. The hole is too small by exactly the amount that makes you angry at your printer.
You’re not alone, and your printer isn’t broken. Every hole you 3D print comes out smaller than the CAD model. It’s not a calibration issue you can fix with one slicer setting. It’s three different physical effects compounding, and the only way to consistently get a hole that matches your target is to understand the math and oversize the CAD model on purpose.
This guide walks through the physics, the per-material numbers, and the exact compensation formula. By the end you’ll know — for any hole size, any nozzle, any material — what diameter to draw in your CAD tool so the printed part matches what you intended.
The Hole Tolerance Calculator runs every formula in this article live; bookmark it as you read.
The three reasons holes shrink
If you’ve heard “just add 0.2mm and pray,” that advice is half-right. The 0.2mm comes from a specific physical mechanism — it’s not arbitrary, and it varies a lot depending on what you’re printing.
1. Material shrinkage
When extruded plastic cools from ~210°C to room temperature, it contracts. The contraction is proportional to the dimension — a 10mm feature shrinks 10× more than a 1mm feature.
Per-material shrinkage rates:
| Material | Linear shrinkage (XY) |
|---|---|
| PLA | 0.30% |
| PETG | 0.40% |
| ABS / ASA | 0.65–0.70% |
| Nylon (PA6) | 1.50% |
| Polycarbonate | 0.70% |
| Carbon-fiber composites (PLA-CF, PA-CF) | 0.20–0.40% |
For a 5mm hole printed in PLA, that’s 5 × 0.003 = 0.015mm of shrinkage — basically invisible. For the same 5mm hole in Nylon, it’s 5 × 0.015 = 0.075mm — five times more, and starting to matter for fits.
Carbon fiber dramatically reduces shrinkage because the fibers physically restrain the polymer matrix as it cools. PLA-CF prints holes that are 30% closer to nominal than plain PLA. PA-CF is about a quarter of plain Nylon’s shrinkage. Worth knowing if you’re targeting tight engineering fits.
2. Slicer polygon approximation
Slicers don’t print circles. They print polygons. Every slicer (Cura, Bambu Studio, OrcaSlicer, PrusaSlicer) approximates a circular hole as an N-sided polygon, with N chosen by a “chord error” or “max segment length” parameter — typically 0.04mm.
Here’s the geometry: when you inscribe a regular polygon inside a circle, the polygon’s effective radius is R × cos(180°/N). For a 5mm hole approximated with 32 segments at 0.04mm chord error, the inscribed polygon has an effective diameter of about 4.97mm — 0.024mm smaller than the true circle.
This is small, but it gets worse as the hole shrinks. A 2mm hole might only get 16 segments, and the effective diameter drops by close to 0.05mm from this effect alone. Every slicer does this. There’s no setting you can flip to “actually print circles” because the hardware uses linear moves between coordinate points — circles are mathematically impossible at the g-code level.
3. Extrusion overshoot on inside curves
This is the dominant effect for small holes, and the one that most fundamentally limits accuracy.
When the extruder traces the inside of a circle, it has to slow down at each direction change, then accelerate again. It can’t do this infinitely fast — the firmware has a maximum acceleration, the extruder has back-pressure, the bowden tube has elasticity. The result: a tiny pile-up of extra material on the inside surface, narrowing the hole.
The amount depends on:
- Print speed — faster prints overshoot more
- Nozzle size — a 0.6mm nozzle drops more material per overshoot than a 0.4mm
- Linear advance / pressure advance tuning — well-tuned firmware reduces this dramatically
- Layer height — taller layers overshoot less per layer but the effect compounds
For a tuned, well-calibrated printer with 0.4mm nozzle running PLA at 100mm/s, the typical inside-curve overshoot is 0.10–0.20mm off the diameter — meaning a 5mm hole prints somewhere between 4.80 and 4.90mm.
This is why the hole tolerance formula caps at a floor (~0.08mm) for very large holes — by the time you’re printing a 30mm bearing seat, the polygon and shrinkage effects dominate, and the inside-curve overshoot becomes a fixed contribution rather than a percentage.
Putting it all together
The total compensation for a hole is the sum:
modelDiameter = targetDiameter
+ targetDiameter × shrinkage% (material-dependent)
+ slicerComp(targetD, nozzle) (empirical, ~0.08–0.30mm)
+ orientationComp (+0.10mm for vertical-axis holes)
+ toleranceAdjust (per-fit slip vs press)
The Hole Tolerance Calculator sums these for you, with per-printer calibration override saved to your browser.
How big the error gets — real numbers
Concrete examples for a printer running PLA at 0.4mm nozzle:
| Hole target | Without compensation | After compensation in CAD |
|---|---|---|
| 3mm | ~2.72mm | model 3.27mm → prints 3.00mm |
| 5mm | ~4.78mm | model 5.24mm → prints 5.00mm |
| 10mm | ~9.83mm | model 10.18mm → prints 10.00mm |
| 20mm | ~19.93mm | model 20.08mm → prints 20.00mm |
Two things to notice:
-
Small holes are proportionally worse. A 3mm hole printing as 2.72mm is a 9% error. The same printer prints a 20mm hole within 0.4% of nominal. If you’re designing M2 or M2.5 fasteners, you absolutely need to compensate. For 25mm bearing seats, you can sometimes get away with no compensation.
-
The error per hole is larger in absolute terms for smaller holes. This is counter-intuitive but a result of the inside-curve overshoot being roughly a fixed amount regardless of hole size.
Vertical vs. horizontal holes
Two ways to orient a hole on the build plate, and they print very differently.
Horizontal hole — axis is perpendicular to the bed. Each layer prints a discrete circle. Most accurate orientation. Use for any precision fit.
Vertical hole — axis is parallel to the bed. The hole is “carved out” of layered material as the printer goes up. The top of a vertical hole is bridged across unsupported space, and the molten plastic sags before solidifying. Result: the hole becomes oval, smaller at the top by typically 0.10mm of additional shrinkage on top of everything else.
If you must orient a hole vertically, two options:
- Add 0.10mm of extra compensation to the model diameter on top of the standard formula
- Use a teardrop hole shape instead of a circle — peak at the top so the bridge is self-supporting. Looks weird but functions perfectly. Dimensionally accurate at the top, slightly off-spec at the bottom (which is where bolts thread in anyway).
Most engineering software has a “teardrop hole” feature. If yours doesn’t, model a circle with a 45° peak above it — the printer prints a peak, not a bridge.
Calibration: making this calculator yours
The numbers above are based on a typical mid-tier printer (Bambu P1S, Prusa MK4, Creality K1) running PLA at standard settings. Your printer is unique. Maybe your flow rate is 1.02 instead of 1.00. Maybe you run a heated chamber. Maybe your linear advance is dialed in better than mine. Calibrate, and the calculator becomes precise to your machine.
One-time calibration procedure:
- In your CAD tool, model a
20mm × 20mm × 5mmblock with a single hole through the top face. Set the hole diameter to exactly5.00mm. - Slice in PLA at standard settings (0.4mm nozzle, 0.2mm layer height, 100% flow, default speed).
- Print, let cool to room temperature.
- Measure the actual hole with digital calipers. Take the average of three readings at different points around the hole.
- Open the Hole Tolerance Calculator, expand “Calibration override,” type the measured value (e.g.
4.82), click Save.
From this point on, every recommendation in the calculator scales to your specific printer’s inside-curve overshoot. The calibration saves to localStorage; clear it when you switch printers or run an unusual material.
A common mistake: people calibrate once with PLA and assume the same offset applies to ABS. It doesn’t — ABS has 2× the shrinkage. The calculator handles material differences automatically; calibration only adjusts the slicer/extrusion baseline.
Common fits decoded
What “compensation” means depends on what you’re fitting:
Heat-set threaded inserts
Brass cylinders with knurled outside, melted in with a soldering iron. Standard for any production-grade printed part. Spec the hole at the insert’s outer diameter — exactly. The compensation only adds back what the print otherwise loses. Common Ruthex / CNC Kitchen sizes:
- M3 short: 4.0mm OD × 4.0mm depth
- M3 long (Voron standard): 4.0mm OD × 5.7mm depth
- M4: 5.6mm OD × 8.1mm depth
- M5: 6.4mm OD × 9.5mm depth
- M6: 8.0mm OD × 12.7mm depth
Add a 1mm × 45° chamfer at the top of the pocket so the insert self-aligns. Pocket should be 0.5mm deeper than the insert is long, giving displaced plastic somewhere to flow.
Bolt clearance holes (ISO 273)
For a bolt that passes through and threads into something on the other side. Three grades:
- Fine clearance (M3 = 3.2mm) — almost exact, slow assembly, high precision
- Medium clearance (M3 = 3.4mm) — recommended default for most parts
- Loose clearance (M3 = 3.6mm) — for outdoor or dirty hardware where dust might bind
The calculator stocks all three across M2–M10 metric and 1/4” / 5/16” imperial.
Self-tap (cutting threads in plastic)
Drive a metal screw directly into a smaller plastic hole. The screw cuts threads as it goes. Hole sizes are roughly bolt OD minus 0.5mm:
- M3 self-tap: 2.5mm
- M4 self-tap: 3.3mm
- M5 self-tap: 4.2mm
Self-tap holds well in PLA and PETG for parts you’ll assemble once or twice. For repeated assembly cycles (>5), use heat-set inserts — plastic threads strip eventually.
Press-fit bearings
608 skateboard bearings (22mm OD), 625 (16mm), F623 flanged (10mm seat). Spec the pocket at exactly the bearing OD plus compensation. The press fit comes from material flexibility — a slightly oversized printed pocket that tightens around the bearing as it’s installed. Add a 0.5mm × 45° lead-in chamfer for easier insertion. Use an arbor press for steady force; whacking a bearing in with a mallet is how you damage the cage.
Five common mistakes
- Adding “0.2mm” to every hole regardless of size. Big holes need less, small holes need more. The compensation isn’t constant.
- Forgetting orientation matters. A 5mm hole oriented vertically prints differently from the same hole horizontal. Always default to horizontal for tight fits.
- Calibrating once with PLA, assuming it transfers to ABS. Different materials have wildly different shrinkage. Calibrate per-material if you do production work in multiple plastics.
- Modeling clearance holes too tight because “the bolt should fit snug.” Tight printed holes bind on tolerance stack-ups across multiple parts. Use medium ISO clearance unless you have a specific reason not to.
- Skipping the chamfer. A 1mm × 45° chamfer at the top of every pocket transforms install ease and prevents stress fractures around inserts.
Why this matters for production
If you’re selling 3D-printed parts that include any hardware fits — enclosures with M3 bolts, brackets with bearings, name plates with threaded inserts — getting holes right on the first print is the difference between profitable and unprofitable. A part that needs a second print because the M3 bolt didn’t fit costs you the first print’s filament + electricity + labor + the failed print’s failure buffer. On a $5 part, that’s typically $1.50–$2.00 of margin gone.
The Pricing Calculator bakes this in via the failure rate buffer (default 5%). But the better play is to print once and have it fit. That’s what calibrated hole compensation gets you.
Workflow summary
- Pick the Hole Tolerance Calculator on your second monitor while you CAD
- Calibrate it once with a 5mm test print — takes 15 minutes, gives you a per-printer accuracy boost forever
- For every hardware fit in your design, type the part (heat-set M3, 608 bearing, M3 clearance, etc.) and material — the calculator hands you the exact CAD diameter
- Use horizontal orientation when you can; teardrop the verticals
- Always chamfer pocket entries
Five steps. Holes fit. No reprints.
For the deeper picture on how getting fits right interacts with selling 3D prints profitably, see How to Price Your 3D Prints in 2026 — particularly the section on failure rate budgeting.