STL checker

Check an STL before you slice it

Drop a file and get what it weighs in filament, roughly how long it prints, and what to quote for it — plus triangle count, real dimensions, volume and whether it is watertight. Measured in your browser, not on a server.

Your file is never uploaded. The STL is read by the browser, handed to a Web Worker on the same page and parsed in memory. There is no upload endpoint, no analytics, no logging of file names, and nothing leaves your device. Turn off your network after the page loads and it still works.

Drop an STL here

or choose a file. Binary and ASCII STL are both supported. Up to 30 MB.

This checker needs JavaScript. Everything it does could in principle be done by hand: an STL is a list of triangles, and the checks below describe how to read one. But there is no server-side fallback, because that would mean uploading your file — the thing this tool exists to avoid.

What each number means

MetricWhat it isWhat to do with it
TrianglesEvery triangle in the file, degenerate ones included.Under ~50k slices quickly. Millions will slow any slicer down.
Unique verticesDistinct corner points after welding coincident vertices to 0.001 mm.Rough sanity check on how the mesh was built.
Bounding boxThe X, Y, Z extents in millimetres.Check it fits the bed before slicing. STL carries no units — millimetres are assumed.
VolumeSum of the signed tetrahedron volumes from the origin.Weight = volume × density. Only trustworthy on a closed mesh.
Surface areaSum of triangle areas.Estimate paint, coating, or the cost of a smoothing pass.
WatertightEvery edge is shared by exactly two triangles.The single most useful check: slicers need this to decide what is inside.
Boundary edgesEdges belonging to only one triangle — holes.A non-zero count is why a slicer fills the part solid or refuses it.
Non-manifold edgesEdges shared by three or more triangles.A “T” junction or duplicated face; confuses inside/outside tests.
Degenerate trianglesZero-area triangles.Junk from a bad boolean or export. Usually harmless, occasionally fatal.

What this checker does not do

  • It does not repair anything. V1 detects problems and stops there. No hole filling, no normal flipping, no re-meshing. If a mesh is broken, this tells you; fixing it is a job for your CAD tool or a dedicated repair tool.
  • It does not read OBJ, 3MF, STEP or STP. STL only.
  • It does not tell you if the model is printable. Watertight is necessary, not sufficient — overhangs, wall thickness and tolerances are not checked.
  • It does not check normals as such. Volume is reported as an absolute value, so an inside-out mesh still gives a plausible number. Mixed winding on an open mesh can distort it.

Limits

Files over 30 MB are rejected before parsing, so a runaway file cannot exhaust memory. Above roughly 250 000 triangles the edge analysis is skipped — the map of every edge is what costs memory — and the result says so rather than guessing. Everything else is still measured. Parsing happens in chunks with a progress bar, so the tab stays responsive.

How the volume is calculated

For every triangle, take the tetrahedron formed by its three corners and the origin, and add its signed volume: V = (a · (b × c)) / 6. On a closed, consistently-wound mesh the outside contributions cancel and the sum is the enclosed volume, to the last digit. On an open mesh the surface does not close, so the number is an approximation — which is exactly why the watertight verdict is printed above it. On our 10 mm test cube with one triangle removed, the true volume is 1000 mm³ and this method reports 833.3 mm³.