STL Checker
Analyze an STL file for watertightness, holes, non-manifold edges, inconsistent winding, self-intersections and more — locally in your browser, before you send it to a slicer.
Your STL stays on this device. MeshWrench analyzes it locally in your browser.
Binary or ASCII STL, up to 150 MB. This limit protects your browser from freezing — it isn't a Pro restriction.
- Boundary edges
- Non-manifold edges
- Winding conflicts
- Degenerate triangles
- Duplicate faces
- Self-intersections
Analyzed locally — nothing was uploaded.
- Not checked Degenerate triangles
Triangles with a repeated vertex, or zero/near-zero area.
Excluded from every topology check below; can cause rendering or slicing artifacts.
Repair: coming in STL Repair - Not checked Duplicate faces
Two or more triangles sharing the exact same 3 vertices, same or reversed winding.
Can cause flickering (z-fighting) in some renderers and slicers.
Repair: coming in STL Repair - Not checked Boundary / open edges
Edges used by only one triangle — an opening in the surface.
The model isn't a closed solid; most slicers will warn or auto-repair.
Repair: coming in STL Repair - Not checked Non-manifold edges
Edges shared by more than two triangles.
Ambiguous "inside vs. outside" at that edge — unpredictable slicing behavior.
Repair: coming in STL Repair - Not checked Inconsistent winding
Adjacent triangles that disagree on winding direction across a shared edge.
Can cause inside-out shading and confuse a slicer's surface-direction test.
Repair: coming in STL Repair - Not checked Inward-oriented shells
A closed, consistently-wound shell whose normals point inward.
Still topologically watertight, but may render or slice as if inverted.
Repair: coming in STL Repair - Not checked Disconnected shells
The model is made of more than one separate, unconnected piece.
Often intentional (multi-part models) — verify it matches your expectation.
Repair: coming in STL Repair - Not checked Self-intersections
Triangles that geometrically cross through each other.
Can cause unpredictable slicing behavior at the overlapping region.
Repair: coming in STL Repair
- File size
- Triangles
- Valid triangles
- Degenerate triangles
- Source vertex slots
- Unique vertex positions
- Duplicate coordinate references
- Surface area
- Enclosed volume
Boundary breakdown
- Total boundary edges
- Closed loops
- Open chains
- Branched components
- Non-simple components
Shells
Analysis timing
How to check an STL file
- Select an STL file using the picker above (or drag one in once you're on the page).
- MeshWrench reads and analyzes the file locally in a background worker — nothing leaves your device.
- Review the watertightness verdict, the individual check results, and the 3D preview with issue overlays.
- Download a JSON report, or continue to STL Repair once it's available.
What each check means
- Degenerate triangles
- A triangle with a repeated vertex, or with zero/near-zero area. These are excluded from every other check below, and reported separately.
- Duplicate faces
- Two or more triangles that share the exact same three vertices, either with the same winding (an exact stacked copy) or reversed winding.
- Boundary / open edges & holes
- An edge used by only one triangle is a boundary edge. Boundary edges are grouped into connected components and classified as a closed loop (a likely hole), an open chain, a branched junction, or a non-simple shape.
- Non-manifold edges
- An edge shared by more than two triangles — ambiguous "inside vs. outside" geometry at that edge.
- Inconsistent winding
- Two triangles sharing an edge that traverse it in the same direction, rather than opposite directions — a sign the surface isn't consistently oriented there.
- Inward-oriented shells
- A closed, consistently-wound shell whose normals point inward rather than outward, determined from its own signed volume. Still watertight, but likely inverted.
- Disconnected shells
- The model is made of more than one separate, unconnected piece of geometry — sometimes intentional (multi-part models), sometimes a sign of a fragmented file.
- Self-intersections
- Triangles that geometrically cross through each other. Checked with a broad-phase spatial index plus a robust triangle-triangle test — ordinary shared-edge adjacency is never flagged.
What "watertight" means here
This checker's watertight verdict is a strict, disclosed policy: zero boundary edges, zero non-manifold edges, zero winding conflicts, zero duplicate faces, and a completed self-intersection check with none found. A model that fails one of these criteria is reported "not watertight," with the specific reason. A model whose self-intersection check couldn't complete within this checker's safety limits is reported "some checks incomplete" — never silently reported as passing.
Common slicer symptoms this checker can explain
- "STL not watertight" / slicer refuses to slice: check the boundary-edge and non-manifold results.
- "STL has holes": look at the closed-loop boundary component count.
- Non-manifold geometry errors: the non-manifold-edge check reports the exact count.
- Inverted normals / model renders inside-out: the inward-shell and winding-conflict checks.
- Self-intersections / slicer produces strange internal geometry: the self-intersection check.
- Disconnected pieces flying apart: the disconnected-shells check and per-shell bounds.
- Degenerate triangle warnings: the degenerate-triangle count and its two sub-categories.
- "STL will not slice" with no clear reason: download the full JSON report for every count at once.
How the analysis works
Every check starts from an exact-identity topology layer: source STL vertices (which commonly repeat for every triangle) are collapsed to unique positions using the same bit-exact float32 matching every MeshWrench converter already uses — never a distance tolerance, since welding nearby-but-different vertices would change the model's real topology. From there, an edge-incidence map classifies every edge as boundary, manifold or non-manifold and detects winding conflicts; boundary edges are grouped into components; triangles are grouped into connected shells; each shell's orientation is propagated and, for closed shells, its signed volume decides inward vs. outward; duplicate faces are grouped by canonical identity; and self-intersections are found via a spatial-grid broad phase followed by a robust triangle-triangle test, always excluding ordinary shared-edge adjacency.
Limitations
- This is a diagnostic tool only — it never modifies, repairs, welds, reorients or exports a changed mesh.
- Vertex identity is exact-position matching, never tolerance-welded.
- Passing every check does not guarantee successful printing; failing one does not mean a file can't be sliced.
- Wall thickness, physical scale, your printer's limits, support needs and manufacturing tolerances are outside this checker's scope.
- Every check has an explicit safety limit; a check that can't complete safely is reported "not checked," never as passing.
What's next: STL Repair
Problems found? STL Repair — a separate MeshWrench tool — will fix holes, flip inverted normals, weld gaps and resolve non-manifold geometry, locally in your browser. It isn't built yet; this checker never claims to repair anything, and never links to a route that doesn't exist.
Frequently asked questions
Is my STL file uploaded when I use this checker?
No. Your file is read and analyzed entirely in your browser, inside a background Web Worker. It is never sent to a server — you can confirm this yourself by watching your browser's network tab while a file loads.
Does a "watertight" result guarantee my model will print successfully?
No. Watertight means the surface is closed, manifold, consistently wound and free of duplicate/self-intersecting triangles — a strict topology check. It says nothing about wall thickness, physical scale, your printer's limits, support requirements or manufacturing tolerances.
My model failed a check — can it still be sliced?
Often, yes. Many slicers auto-repair minor issues like small gaps or duplicate faces. A failing result here is a precise, honest report of what this checker found, not a claim that your file is unusable.
Does this tool fix the problems it finds?
Not yet. This is a diagnostic tool only — it never modifies, repairs, welds, reorients or exports a changed mesh. STL Repair, a separate tool, will handle fixing what this checker finds.
Why does vertex matching use exact positions instead of a tolerance?
Welding "close enough" vertices would change the model's topology and could hide a real gap between two surfaces. This checker reports vertices as identical only when their coordinates match exactly, consistent with how every MeshWrench converter already treats vertex identity.
What happens with a very large or complex model?
Every check has an explicit safety limit. If a check can't be completed safely within those limits — most commonly self-intersection testing on a very complex mesh — it's honestly reported as "not checked," never silently reported as passing.
Explore free tools