"Watertight" sounds like a subjective quality judgement, but it has an exact definition: every edge in the mesh is shared by exactly two triangles. That single rule is what separates a surface that encloses a solid from a collection of triangles floating in space.
The three states an edge can be in
Walk every triangle in a mesh and count how many triangles use each edge. Each edge lands in one of three categories:
| Triangles using the edge | Meaning |
|---|---|
| Exactly 2 | Correct — the surface continues cleanly across the edge |
| 1 | An open edge: a hole in the surface |
| 3 or more | Non-manifold: surfaces meet in a way no solid object can |
A mesh where every edge has a count of two is closed and manifold. It encloses a definite inside and outside, which is what makes volume calculation valid and what lets a slicer decide where to put plastic.
Non-manifold edges are the harder case to visualise. They appear when an internal wall is left inside a model, when two separate shells are merged without cleanup, or when a surface is duplicated in place. Nothing looks wrong from the outside, but there is no consistent answer to "is this point inside the object?"
Why STL makes this awkward
STL has no concept of a shared vertex. Each triangle stores its own three corner points as raw floats. A cube's corner, touched by six triangles, is written six separate times — and because the exporter produced those numbers through its own transforms and rounding, the six copies are frequently not bit-identical.
So a naive edge count on a perfectly valid STL reports that every edge is open. The check only works after welding: grouping vertices that sit at effectively the same position into one.
The tolerance for that welding cannot be a fixed number. A 5 mm dental part and a 2 m architectural model need wildly different thresholds. A practical approach scales the tolerance with the model itself — for example, quantising vertex positions onto a grid sized relative to the bounding-box diagonal, with a floor so that tiny models do not collapse to a point. Too tight a tolerance and real duplicates survive; too loose and genuinely distinct detail gets merged.
This is worth knowing because it explains disagreements between tools. If Blender says a mesh is clean and another program reports 40 open edges, they are almost certainly using different welding tolerances rather than reading different geometry.
How to repair a mesh that fails
Ordered from least to most invasive:
- Merge by distance. In Blender, select everything in Edit Mode and use Mesh → Merge → By Distance. This alone fixes meshes whose only problem was unwelded duplicate vertices.
- Find the actual holes. Blender's Select → All by Trait → Non Manifold highlights the problem edges so you can see whether it is one missing face or a shredded surface.
- Fill small holes. MeshLab's hole-filling filter, or Blender's F key on a selected boundary loop, closes simple gaps.
- Automatic repair. Microsoft 3D Builder, Autodesk Netfabb and the repair step built into PrusaSlicer will fix most defects without you looking at the geometry. Convenient, but they can also alter detail you cared about.
- Remesh. For a badly broken scan, a voxel remesh in Blender rebuilds the surface from scratch. You get a guaranteed-closed mesh at the cost of sharp edges and exact dimensions.
After any repair, re-run the check. Repair tools sometimes close one hole by creating a non-manifold edge somewhere else.
Does it actually stop you printing?
Usually not. Slicers have spent two decades defending themselves against broken STL files and will happily produce G-code from a mesh with a few open edges. What you lose is trustworthiness:
- Volume, surface area and weight estimates stop being meaningful.
- Boolean operations in CAD software fail or produce garbage.
- Large defects show up as missing walls, unexpectedly hollow sections, or cavities that get filled with infill.
If a model is going into production, or you are quoting a price based on material use, fix it first. Watertightness is one item on the broader pre-print checklist.
Checking without installing anything
Mes3D runs the weld-and-count check in a background worker and reports the open-edge count alongside volume, surface area and overhang ratio. Since parsing happens in your browser, confidential geometry never leaves your machine.