Guide

Design for 3D printing: wall thickness, tolerances and overhangs

To design for 3D printing on an FDM printer, make walls a whole number of line widths, leave a measured gap wherever parts meet, and keep overhangs at 45° or less. The numbers below are starting points for a 0.4 mm nozzle, taken from Prusa and Bambu Lab documentation. A quick test print tells you the rest.

11 min read Updated October 2026 Beginner Design guides · 2 of 3
Quick answer
  1. Walls: 0.9 mm (2 perimeters) at the very least, 1.8 mm (4 perimeters) or more for functional parts.
  2. Fits: about 0.1–0.2 mm gap per side for snug, 0.2–0.3 mm for sliding, 0.3 mm or more for moving parts.
  3. Overhangs: 45° from vertical or less. Keep bridges short, about 10 mm or less as a design target.
  4. Holes: they print small. Set $fn, oversize slightly and test with your real screws.
  5. Bottom edges: a 0.5 mm chamfer hides elephant's foot.

Wall thickness for 3D printing

A slicer builds walls from lines of plastic called perimeters. On a 0.4 mm nozzle, PrusaSlicer's default line is about 0.45 mm wide, so good wall thicknesses are multiples of that. Walls thinner than one line simply don't print.

Perimeters (0.4 mm nozzle)Wall thicknessUse it for
1about 0.45 mmSpiral vase mode only. Fragile.
2about 0.9 mmLight covers and cosmetic shells.
3about 1.35 mmEveryday parts and small boxes.
4about 1.8 mmFunctional parts, a good default.
5 or more2.25 mm and upLoad-bearing walls, brackets, screw bosses.

Other slicers use similar widths. Check the line width in your print profile and multiply. Modern "Arachne" wall generators vary the line width to fill odd thicknesses, but whole multiples are still the most predictable.

Heights work the same way with layers. At 0.2 mm layers, a 1.1 mm tall feature prints as 1.0 or 1.2 mm. For more on line widths, see layer heights, walls and line widths.

3D printing tolerances and clearance for fits

Prusa notes its printers are accurate to at least 0.2 mm and suggests starting moving parts at 0.3 mm or more. Use the table below as modelled gaps per side, on a calibrated printer, then adjust after one test print.

FitGap per sideExample
Press fit0.05–0.1 mmDowel pins and magnets that must stay put
Snug fit0.1–0.2 mmFriction lids, alignment pegs
Sliding fit0.2–0.3 mmDrawers, sliding lids, slots
Moving fit0.3–0.5 mmHinges, print-in-place joints
Loose fit0.5 mm or moreCable pass-throughs

A hole for a pin is the pin diameter plus twice the gap. An 8 mm pin with a 0.2 mm sliding gap needs an 8.4 mm hole.

Fits printed lying flat (in XY) behave differently from fits stacked in Z, and materials shrink by different amounts. So test in the same orientation and filament you'll use. This fit test prints five holes with different gaps and a set of pins:

// Pin diameter (mm)
pin_diameter = 8;
// Gap per side to test (mm)
gaps = [0.1, 0.15, 0.2, 0.3, 0.4];
// Plate thickness (mm)
plate_thickness = 5;
// Pin height (mm)
pin_height = 12;
$fn = 64;

pitch = pin_diameter + 10;

// @feature: hole_plate
difference() {
  translate([-pitch / 2, -pitch / 2, 0])
    cube([pitch * len(gaps), pitch, plate_thickness]);
  for (i = [0 : len(gaps) - 1]) {
    translate([i * pitch, 0, -1])
      cylinder(h = plate_thickness + 2, d = pin_diameter + 2 * gaps[i]);
    // @feature: gap_labels
    translate([i * pitch, -pitch / 2 + 1.5, plate_thickness - 0.6])
      linear_extrude(1)
        text(str(gaps[i]), size = 2.5, halign = "center");
  }
}

// @feature: pins
for (i = [0 : len(gaps) - 1])
  translate([i * pitch, pitch + 4, 0])
    cylinder(h = pin_height, d = pin_diameter);

Print it, find the hole that gives the fit you want, and use that gap in your design. For materials that shrink a lot, like ABS and ASA, the shrinkage calculator helps you scale outer sizes.

Why 3D printed holes come out too small

Two effects add up. First, OpenSCAD draws circles as polygons with their corners on the circle, so the flat sides sit inside it. Second, the printed plastic squishes and shrinks inward.

The polygon effect is worse than most people expect. At OpenSCAD's default resolution, a 3.4 mm hole becomes a hexagon only 2.94 mm across the flats, and an M3 screw won't fit. Three fixes:

  1. Set $fn. With 32 or more sides the polygon error drops to under 0.5% of the diameter. The CAD Agent uses 64 by default.
  2. Enlarge the polygon. Multiply the radius by 1 / cos(180 / sides) so the flats, not the corners, land on your size. MCAD's polyhole() and BOSL2's cyl() with circum=true do this for you.
  3. Compensate in the slicer. Bambu Studio and OrcaSlicer have X-Y hole compensation, which grows holes without changing the outside. The hole diameter grows by twice the value you enter.
// Nominal hole diameter (mm)
hole_diameter = 5;
// Polygon sides used for the hole
hole_sides = 24;

// @feature: plate_with_true_hole
difference() {
  cube([20, 20, 5], center = true);
  cylinder(h = 6, r = hole_diameter / 2 / cos(180 / hole_sides), $fn = hole_sides, center = true);
}

Screw holes, nuts and heat-set inserts

HardwareModel it asNotes
M3 screw clearance3.2 mm close, 3.4 mm normalISO 273 fine and medium series
M4 screw clearance4.3 mm close, 4.5 mm normalISO 273
M5 screw clearance5.3 mm close, 5.5 mm normalISO 273
M3 hex nut pocket5.5 mm across flats plus your gap, 2.4 mm thick nutA $fn = 6 cylinder is sized across the corners, so divide the flats size by cos(30°)
M3 × 5.7 mm heat-set insert4.0 mm hole, at least 6.7 mm deep if blindMaker figure. Many people model 4.1–4.2 mm because printed holes shrink. Leave 1.6 mm of wall around it.
M4 heat-set insert5.6–5.7 mm holeCheck your insert's datasheet
M5 heat-set insert6.4–6.5 mm holeCheck your insert's datasheet

Insert sizes differ by brand, so the datasheet for the inserts in your drawer beats any table. Print one boss first.

Overhangs and bridges

Each layer needs something under it. Measure overhang angles from vertical: a wall is 0° and a flat ceiling is 90°.

Overhang from verticalWhat to expect
0–45°Prints cleanly on almost any FDM printer. Design to this.
45–60°Clean on many printers, depending on nozzle, cooling and settings.
Up to 75°Possible on printers with strong part cooling. Prusa quotes this for the MK4S and CORE One.
Steeper, or a flat ceilingNeeds supports, a chamfer, a bridge or a new orientation.

A bridge is a flat span between two supports. Short bridges print fine. Prusa says the best results come only over short distances, because the fan has to cool the plastic in mid-air. Treat about 10 mm as a design target, and print a bridge test before you rely on anything much longer.

Smaller nozzles, like 0.25 mm, may manage less than 45°. For support strategy, see the supports guide.

Horizontal holes and teardrop shapes

A round hole that runs sideways has a flat ceiling at its top, which is a 90° overhang. Small holes bridge over it with a little sag. For larger holes, or where the fit matters, use a teardrop: a circle with a 45° point on top, so nothing overhangs past 45°.

// Hole diameter, M3 normal fit (mm)
hole_diameter = 3.4;
// Wall thickness the hole passes through (mm)
wall_depth = 10;
$fn = 32;

include <BOSL2/std.scad>

// @feature: wall_with_teardrop_hole
difference() {
  cube([30, wall_depth, 20]);
  translate([15, wall_depth + 1, 10])
    rotate([90, 0, 0])
      linear_extrude(wall_depth + 2)
        teardrop2d(d = hole_diameter);
}

BOSL2 also has a 3D teardrop(), and MCAD has teardrop() in teardrop.scad. Both libraries load automatically in the PrintPal editor. See OpenSCAD libraries.

Chamfers vs fillets for 3D printing

On edges that face the bed, use a chamfer. A rounded fillet starts almost flat at the bottom, which is a steep overhang. On top and side edges, either works.

Use a 45° chamferUse a fillet (radius)
Bottom edges, against elephant's footInside corners that carry load
Overhangs you want to print without supportsEdges you touch and hold
Lead-ins on holes, slots and pinsVertical corners seen from above

OpenSCAD has no chamfer or fillet button, so you build them. A bottom chamfer with hull():

// Box size (mm)
box_size = [40, 20, 10];
// Bottom edge chamfer (mm)
bottom_chamfer = 0.6;

// @feature: chamfered_box
hull() {
  translate([bottom_chamfer, bottom_chamfer, 0])
    cube([box_size[0] - 2 * bottom_chamfer, box_size[1] - 2 * bottom_chamfer, box_size[2]]);
  translate([0, 0, bottom_chamfer])
    cube([box_size[0], box_size[1], box_size[2] - bottom_chamfer]);
}

Rounded vertical corners with offset(), shrinking and growing a 2D shape before extruding it:

// Plate size (mm)
plate_size = [40, 20];
// Corner radius (mm)
corner_radius = 2;

// @feature: rounded_plate
linear_extrude(height = 5)
  offset(r = corner_radius) offset(delta = -corner_radius)
    square(plate_size);

Elephant's foot and the first layer

The first layer gets squashed into the bed, so it spreads a little wider than the rest. That lip makes holes tight at the bottom and parts hard to fit. Fix it in two places:

  • In the slicer: turn on elephant foot compensation. Prusa says values around 0.2 mm usually work for a 0.4 mm nozzle, and its official profiles turn it on by default.
  • In the model: add a small 45° chamfer, about 0.5 mm, to bottom edges and the bottom of holes. Any leftover lip then fills the chamfer instead of sticking out.

For causes and fixes on the printer side, see elephant's foot.

Print orientation and part strength

FDM parts are strongest along their layers and weakest between them, a bit like wood grain. Orientation decides where that weakness lands.

  • Put the largest flat face on the bed. It's the most stable base and the smoothest surface.
  • Keep loads along the layers. A hook printed standing up snaps at a layer line. Printed on its side, the layers run along the hook.
  • Hide the ugly faces. Surfaces printed on top of supports come out rough, so put cosmetic faces on the top or sides.
  • Split big or awkward parts. Two parts that each print flat often beat one part covered in supports. Add pegs or a chamfered joint for alignment.
Free PrintPal tool3D Model SplitterCut a large or awkward model into pieces that each print flat and fit your bed.Open tool

Small features and text

FeatureRule of thumbWhy
Any thin rib or text strokeAt least one line width, about 0.45 mmThinner lines don't print at all
Raised or engraved text depthAt least 2 layers, 0.4 mm at 0.2 mm layersOne layer barely shows
Gap between parts that must stay separate0.3 mm or more sideways, at least one layer verticallySmaller gaps fuse
Small round features$fn of 32 or moreLow counts print as visible polygons

Bold, sans-serif fonts survive best. Check the slicer preview: if a letter is missing there, it's missing in the print.

How material choice changes the design

  • PLA is stiff and accurate but softens in a hot car. Fine for most fits and fixtures.
  • PETG bends before it breaks, which suits clips and snap fits. It can string, so leave a little more room in tight fits.
  • ABS and ASA shrink more and warp. Round the outside corners, avoid large flat bases and scale for shrinkage.
  • TPU is flexible, so press fits grip harder and thin walls flop. Thicker walls and bigger clearances help.

What the CAD Agent assumes when you don't say

The CAD Agent starts from printing-friendly defaults and lists the ones it used in its design brief. Among them: millimetres, a 2.4 mm enclosure wall, a 45° overhang limit, M3 clearance holes of 3.2 or 3.4 mm, and a 220 × 220 × 250 mm bed.

It does not run a printability analysis on the mesh. It checks that the code compiles and that the rendered size matches the brief. Overhangs, thin walls and supports are for you to check in the slicer preview. Tell it your printer, material and the fit you want, and it will design to those numbers.

Pre-export checklist

Tick these off before you export the STL or 3MF. Your ticks are saved in this browser.

  • Every wall is at least 2 line widths (about 0.9 mm), and load-bearing walls are 1.8 mm or more.
  • Overhangs are 45° or less, chamfered, or have supports planned.
  • Bridges are about 10 mm or shorter, or supported.
  • Every fit has a gap from the clearance table, ideally checked with a fit test.
  • Screw holes use clearance sizes, and round holes have $fn of 32 or more.
  • Sideways holes larger than a few millimetres are teardrops.
  • Bottom edges have a small chamfer, or elephant foot compensation is on.
  • The largest flat face sits on the bed, and loads run along the layers.
  • The part fits your printer's build volume.
  • The size in the slicer matches the size you designed, in millimetres.

Check yourself

A hinge pin is 5 mm across. You want a moving fit with a 0.3 mm gap per side. What hole diameter do you model?

  1. 5.15 mm
  2. 5.3 mm
  3. 5.6 mm
  4. 6.0 mm

The gap is on both sides of the pin, so the hole is 5 + 2 × 0.3 = 5.6 mm. Modelling 5.3 mm gives only 0.15 mm per side, which is closer to a snug fit.

Which bottom edge prints cleanly without supports?

  1. A 2 mm fillet
  2. A 45° chamfer
  3. Either, they print the same

A 45° chamfer never overhangs more than 45°. A fillet on a bottom edge starts almost flat, which is close to a 90° overhang, so its first layers droop.

Frequently asked questions

What is the minimum wall thickness for 3D printing?

On an FDM printer with a 0.4 mm nozzle, the thinnest printable wall is one line width, about 0.45 mm in PrusaSlicer. Use at least 2 perimeters (about 0.9 mm) for anything that has to hold its shape, and 4 perimeters (about 1.8 mm) or more for functional parts.

What clearance do 3D printed parts need to fit together?

Start with a gap of about 0.1 to 0.2 mm per side for a snug fit, 0.2 to 0.3 mm for sliding parts and at least 0.3 mm for parts that move, such as hinges. A hole for a pin is the pin diameter plus twice the gap. Print a fit test, because every printer and filament differs.

Why do 3D printed holes come out too small?

Two reasons add up. CAD tools like OpenSCAD draw a circle as a polygon with its corners on the circle, so the flats sit inside it. Then the printed plastic squishes and shrinks inward. Set a higher $fn, enlarge the polygon by 1 / cos(180 / sides), and use your slicer's XY hole compensation or a fit test.

What overhang angle can a 3D printer print without supports?

Design for 45 degrees from vertical and you are safe on almost any FDM printer. Prusa says 45 to 60 degrees prints cleanly depending on nozzle and settings, and up to 75 degrees on its printers with Nextruder and 360-degree cooling. Beyond that, add supports, a chamfer or change the orientation.

Sources

Design to these numbers with the CAD Agent

Tell it your nozzle, material and the fit you need, then check the result in your slicer.

Open the CAD Agent