Two parts that are each dimensionally "correct" can still refuse to go together. A shaft modeled at 8 mm and a hole modeled at 8 mm sound like a perfect match on screen, and on the printer they come out as a shaft that will not enter the hole at all. This is not a modeling mistake. It is what FDM printing does to every hole, every time, and once you know the pattern you can design for it instead of fighting it print after print.
This post covers why holes shrink, what clearance numbers actually work, the difference between horizontal and vertical accuracy, a short test-fit routine, and why a slider on a parametric part beats editing a mesh when the fit is off.
Why printed holes come out undersized
A hole is the one feature FDM is worst at reproducing accurately, for a mechanical reason baked into how the printer draws it. When a nozzle traces a circle, it has to decelerate into the curve, and the extruder keeps pushing plastic through that deceleration. The result is a small amount of over-extrusion right at the curve, most noticeable on the tightest curves a print has: circular holes. The perimeter bulges inward by a fraction of a millimeter, and the hole ends up smaller than the model that generated it.
Outer features go the opposite direction for a related reason. A boss or a peg (plastic you want to keep, bounded by an outward-facing wall) tends to print slightly oversized, because the same corner-rounding and extrusion behavior adds material to a convex boundary instead of removing it from a concave one. Put the two together and you get the rule every functional printer eventually learns the hard way: holes print small, pegs print big, and a part designed with zero clearance between them will not assemble.
The size of the error depends on your printer, nozzle, and slicer settings, but for a well-tuned FDM machine at 0.2 mm layer height, expect circular holes to come out 0.1 to 0.3 mm undersized versus the CAD model. That is a small number, but it is bigger than the clearance most people leave, which is why "it worked in the CAD program" and "it worked on the bed" are two different claims.
Real clearance numbers for running and press fits
Rather than guessing, size the gap between mating parts to the kind of joint you want.
Running fit (parts that rotate or slide against each other, like a shaft in a bearing bore or a hinge pin): leave 0.2 to 0.4 mm of total diametral clearance. A 10 mm shaft wants a 10.2 to 10.4 mm hole. Go toward the low end for a snug, low-wobble joint you will lubricate; go toward the high end if the parts need to move freely right out of the printer with no post-processing.
Press fit (parts meant to snap together and stay together with friction, like a peg that should not need glue): leave 0.1 to 0.2 mm of clearance, sometimes an interference fit of a few hundredths of a millimeter if your printer is well calibrated and the joint is small. Too tight and the peg splits the hole's walls on insertion; too loose and it falls out. This is the fit worth test-printing before you commit to a full assembly, because the acceptable window is narrow.
Sliding fit for larger, less critical parts (drawer in a housing, lid on a box): 0.3 to 0.5 mm per side is a comfortable, forgiving default that tolerates some warping and printer-to-printer variation without binding.
These numbers assume PLA or PETG on a reasonably well-calibrated hobby or prosumer FDM printer. They are a starting point, not a guarantee, because tolerance is a function of your specific machine, not just the material. A printer with a worn nozzle, an under-tensioned belt, or an uncalibrated extruder can easily be off by another 0.1 to 0.2 mm in either direction, which is exactly why the test-fit step below matters more than any table of numbers.
Horizontal accuracy versus vertical accuracy
Tolerances are not the same in every direction, and treating a print as uniformly accurate is a common source of "it fit in one orientation but not the other."
Horizontal accuracy (X/Y, the plane the printer draws each layer in) is governed by the belt-and-pulley motion system, the nozzle diameter, and the extrusion behavior described above. This is where the hole-shrink and peg-grow effect lives, and it is generally the more consistent axis: a well-tuned printer holds X/Y dimensions within 0.1 to 0.2 mm across most of the bed.
Vertical accuracy (Z, the stacking direction) is governed by layer height and how consistently the Z axis moves, and it behaves differently. Z dimensions are usually more accurate in the sense of "matches the model," because a wall built from twenty 0.2 mm layers really is close to 4 mm tall, with error measured in fractions of a layer rather than fractions of a millimeter. But Z is where you pay for a different problem: elephant's foot (the first layer squashing slightly wider than the rest) and layer adhesion variance, both of which matter more for a tight vertical stack, like a lid that needs to seat flush, than for a hole diameter.
The practical takeaway: orient the feature that needs the tightest tolerance so it prints in X/Y where you have the most control, not stacked in Z where you are relying on uniform layer height across the whole print. A hole that must be round and precisely sized should almost always be drilled through the top or bottom face in the print orientation, not built up as a stack of arcs along the Z axis.
A simple test-fit workflow
You do not need a full assembly to find out if a clearance is right. A five-minute test coupon saves a much longer wasted print.
- Isolate the mating feature. Print just the hole or just the peg, in a small block, at the same layer height and orientation you plan to use for the real part. A 20 mm cube with a hole in it tells you as much about that hole as the full assembly does.
- Print a small range of clearances, not one guess. If you are unsure, print the mating feature at three clearance values (for example 0.15 mm, 0.25 mm, and 0.35 mm per side) in one plate. Fifteen minutes of print time answers the question that would otherwise take three separate full-length prints to answer by trial and error.
- Test with the actual mating part, not a caliper reading. A caliper tells you the hole measured 10.2 mm; it does not tell you whether the real shaft, with its own printed tolerance, slides in the way you want. Fit the two printed pieces together and judge the joint by feel: does it rotate freely, does it need a light press, does it rattle.
- Record which clearance worked. Once you know 0.25 mm per side gives you the running fit you wanted on this printer, that number is reusable across every future part on the same machine and material, not just this one.
Fixing a bad fit: a slider, not a mesh edit
This is where the difference between a parametric part and a downloaded mesh actually shows up. If you generated your part as an STL from somewhere else and the hole prints 0.2 mm too tight, your options are to re-model it from scratch, hand-edit the mesh in a tool that was not built for precise dimensional changes, or just live with the bad fit. None of those are good.
A part built in Meshra keeps every meaningful dimension, including a clearance or hole diameter, as a named parameter in the manifest generated alongside the CadQuery code. If your test coupon shows the hole needs another 0.15 mm of clearance, you open the parameter drawer, drag that one value, and the same code re-executes with the new number: the hole grows, everything else in the part (wall thickness, hole spacing, the rest of the geometry) stays exactly where it was, and there is no LLM call involved. It is a deterministic re-run of the same program with one number changed, so it is instant and free on every plan. Our post on how Meshra turns a sentence into a printable part covers how that parameter manifest and slider-driven re-execution work under the hood.
That is the practical argument for designing fits parametrically instead of guessing once and hoping: the correction after a bad test fit is a five-second slider drag, not a redesign.
Where to start
If you have a part with a shaft, peg, or snap-fit joint in mind, browse the template gallery for a close starting point with a clearance parameter already exposed, or describe the part in the builder and call out the fit you want directly, for example "a 10 mm shaft bore with a 0.3 mm running-fit clearance." Free and Maker plans include AI generations for this kind of iteration; see pricing for the current allowances, or create an account to save your part and dial in the clearance after your first test print.
Tolerance on a printed part is not a fixed property of your printer, it is a number you choose, test, and correct. Pick a clearance from the ranges above, print a small test coupon before you commit to the full part, and when the fit is off, fix the one number that is wrong instead of starting over.
