# Watertight and Manifold STL Files: What They Mean and How to Check

> A watertight mesh has every edge shared by exactly two triangles. Here is why STL makes that hard to verify, how the check actually works, and how to repair a mesh that fails it.

Source: https://freestlviewer.com/blog/watertight-and-manifold-stl-files/  
Published: August 5, 2026 · Updated: August 5, 2026

"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](https://freestlviewer.com/blog/stl-volume-and-print-weight/) 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:

1. **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.
2. **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.
3. **Fill small holes.** MeshLab's hole-filling filter, or Blender's F key on a
   selected boundary loop, closes simple gaps.
4. **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.
5. **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](https://freestlviewer.com/blog/pre-print-checklist/).

## Checking without installing anything

[Mes3D](https://freestlviewer.com/) 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.

## Frequently asked questions

### What does watertight mean for a 3D model?

A watertight mesh encloses a volume with no gaps. Formally, every edge is shared by exactly two triangles. An edge used by only one triangle is a hole, and an edge used by three or more is non-manifold geometry.

### How do I check whether an STL file is watertight?

Weld vertices that sit at the same position within a small tolerance, then count how many triangles use each edge. If every edge count is exactly two, the mesh is closed and manifold. Browser viewers, Blender, MeshLab and Netfabb all perform some form of this check.

### Why does a mesh that looks fine report open edges?

STL stores each triangle independently, so corners that should be one vertex are written three or more times as separate floating-point values that may differ in the last decimal places. Without welding those duplicates first, every edge looks unshared. The tolerance used for welding has to scale with the model size.

### Can I still print a model that is not watertight?

Often yes. Modern slicers repair small holes automatically and will produce usable G-code. But the volume and weight figures become unreliable, and larger defects cause missing walls or wrongly filled cavities, so it is worth fixing the mesh.
