Skip to content

STL & OBJ Viewer with Print-Readiness Check

Open an STL or OBJ file to view it in 3D and check whether it will actually print — holes, non-manifold edges and flipped normals are detected and highlighted. Everything runs in your browser; the file is never uploaded.

or drag a file anywhere onto this panel

Read and checked inside this page. The file is never uploaded, and there is no share link on this tool for the same reason.

These are geometry checks, not a guarantee. A slicer can still reject a file for reasons no mesh check can see, and slicers differ in what they quietly repair. Build volumes are the manufacturers’ published figures — check your own machine before committing to a long print.

Runs in your browser. Nothing uploaded.

How to use it

  1. Open your file. Drag an STL or OBJ onto the panel, or use the file button. The format is worked out from the contents rather than the extension, so a file someone renamed still opens correctly.
  2. Read the verdict. Ready to print, Printable with warnings, or Likely to fail — with the reason next to it, not just a colour.
  3. Find the problem. Boundary edges are drawn in red on the model and non-manifold edges in orange. They show through the solid, so a hole on the far side is still visible without rotating to hunt for it.
  4. Fix it, then check again. The counts should go to zero.

Nothing is uploaded. The file is read and analysed by your browser inside this page, which you can confirm for yourself: open the network tab, load a model, and watch nothing leave. There’s no share link on this tool on purpose — a model file is often unreleased geometry, and that doesn’t belong in a URL.

What makes an STL printable

An STL is nothing but a list of triangles. It has no units, no notion of an object, and no rule that says the triangles have to add up to a solid. That last part is the whole problem.

A printable model is watertight: a closed surface with a definite inside and a definite outside. There’s a precise way to say that. In a closed surface, every edge is shared by exactly two triangles, and those two triangles walk that edge in opposite directions.

Everything a slicer needs follows from that one rule, and so does every way it goes wrong:

  • An edge used by one triangle is a hole. The surface stops there, so at that layer the slicer can’t say which side is material.
  • An edge used by three or more is non-manifold. There are several answers to what’s inside, and none of them is right.
  • An edge used by two triangles that both walk it the same way means those two faces disagree about which direction is out. That’s a flipped normal.

A viewer that only renders will show you all three of these as a perfectly nice picture. Shading doesn’t care whether a surface is closed. That’s why a model can look completely fine and still refuse to slice.

The seven checks, and what each one means

Every check below runs on every file, and each one reports a count rather than a verdict on its own.

Check What it looks for Why it matters How to fix it
Non-manifold edges Edges where more than two faces meet The slicer can’t determine which side is inside. Some refuse the file outright Blender: select non-manifold, then delete or separate the extra face
Holes (boundary edges) Edges belonging to only one face The model isn’t watertight, so there’s no inside to fill Merge vertices by distance first; rebuild the face only if that doesn’t close it
Flipped normals Adjacent faces that disagree about which way is out Surfaces render inside-out and infill can end up on the wrong side Blender: Mesh → Normals → Recalculate Outside
Degenerate triangles Triangles with effectively zero area Harmless to look at, and a known crash in some slicers Merge by distance, or run a decimate pass
Near-duplicate vertices Points close enough to be meant as one, but written separately The usual cause of a hole that looks closed Merge vertices by distance, with a tolerance a little larger than the gap
Separate shells Disconnected bodies in one file Sometimes deliberate, often a stray object nobody noticed Separate by loose parts and delete what shouldn’t be there
Self-intersections Faces passing through one another Slices cleanly and prints wrong — the failure that wastes a whole spool Boolean union the overlapping bodies, or remodel the joint

Two limits worth stating plainly. Self-intersection is the only check here that isn’t linear in the triangle count, so above 50,000 triangles it’s skipped and labelled as skipped rather than quietly passed. And it tests faces that cross each other, not faces lying exactly on top of each other — coplanar overlaps get past it.

Using it as an OBJ viewer

OBJ files open the same way and every check runs on them identically. The format is different enough that a few things are worth knowing about how it’s read.

An OBJ stores vertices once and refers to them by number, which is the opposite of STL. Face lines come in four shapes — f a, f a/b, f a/b/c and f a//c — and all four put the vertex index first, so all four work here. Indices are 1-based, and a negative index is relative to the end of the vertex list so far, so -1 means the most recent vertex. That relative form is where a lot of hand-written parsers quietly go wrong.

OBJ also allows faces with more than three sides. A quad or a pentagon is fan-triangulated on the way in, which is correct for convex faces and is what every viewer does. A concave n-gon can triangulate awkwardly, and that shows up as geometry that looks slightly wrong rather than as a check failure.

Materials, textures and vertex normals are ignored. None of them affect whether the geometry will print, and the vertex normals in particular are frequently stale — face normals are derived from the winding here instead, which is both simpler and more reliable.

STL, OBJ and 3MF compared

STL OBJ 3MF
Stores units No No Yes, millimetres
Vertex sharing None — every corner repeated Indexed Indexed
Colour and materials No Via a separate .mtl file Yes, in the file
Multiple objects No, just triangles Yes Yes, with placement
Print settings No No Yes
File size Largest Large, text Smallest, compressed
Can store broken geometry Yes, easily Yes Much harder
Universal support Yes Yes Modern slicers

3MF is the better format and it isn’t close. STL has no units at all, which is why a model sometimes arrives 25.4 times too small — someone’s CAD wrote inches and someone’s slicer read millimetres. STL also can’t say “this is one object”, so anything you know about the model’s structure has to be inferred from the geometry.

None of that has displaced it. Model-sharing sites still run on STL, and it’s still what most slicers export by default. If you’re exporting from your own CAD and both are offered, take 3MF.

A worked example

The sample model is a 20 mm cube with a 10 mm pyramid on top — 20 × 20 × 30 mm overall. It was chosen because every figure it produces can be checked by hand, which is the only way to know a tool like this is telling the truth.

Figure Reported Checked by hand
Triangles 14 2 base + 8 walls + 4 roof
Vertices 9 8 cube corners + 1 apex
Edges 21 V − E + F = 9 − 21 + 14 = 2, as Euler requires for a closed shape
Volume 9,333.33 mm³ 20³ + (20 × 20 × 10) ÷ 3 = 8,000 + 1,333.33
Surface area 2,565.69 mm² 400 base + 1,600 walls + 4 × 141.42 roof
Weight in PLA 11.57 g 9.333 cm³ × 1.24 g/cm³
Verdict Ready to print Closed, one shell, consistent winding

The second button loads the same model with two deliberate faults: one base triangle deleted, and one wall face reversed. The report changes to 3 boundary edges, 3 flipped normals and a verdict of Likely to fail — and the three open edges are drawn in red across the bottom of the model, visible straight through the solid, which is the part no other viewer does.

Both counts are exactly what the arithmetic predicts. Removing one triangle from a closed surface leaves its three edges with a single face each. Reversing one face makes it disagree with each of its three neighbours.

How much filament will it use?

Volume for a closed mesh is exact, not estimated. It’s the signed sum of the tetrahedra formed by each triangle and the origin, which is a standard result and adds up to the enclosed volume for any closed, consistently wound surface. Multiply by the material density and you have the weight of a completely solid part.

Material Density Sample model, solid At 15% infill, roughly
PLA 1.24 g/cm³ 11.57 g 3–4 g
ABS 1.04 g/cm³ 9.71 g 2–3 g
PETG 1.27 g/cm³ 11.85 g 3–4 g
TPU 1.21 g/cm³ 11.29 g 3–4 g
Standard resin 1.10 g/cm³ 10.27 g Resin prints are usually hollowed instead

The infill column is a rule of thumb and nothing more. Real usage depends on perimeter count, top and bottom layers, and supports — a tall thin part is nearly all perimeter and lands much closer to the solid figure than a chunky one does. Densities also vary by brand and by pigment; these are the commonly published nominal values.

If the mesh isn’t closed, no volume is given. There’s no inside to measure, and a number computed anyway would be arithmetic without meaning.

Will it fit your printer?

The bounding box is checked against about twenty common build volumes, and against a 90° rotation on the bed as well, because that’s the first thing anyone tries and it genuinely changes the answer on a rectangular bed like the Prusa MK4S at 250 × 210 mm.

Twenty, deliberately. One competitor advertises 168 printers, which sounds better and is worse: a build volume that’s wrong is more damaging than one that’s absent, because it gets believed. A short list can be kept correct. Check the figure against your own machine before committing to a fourteen-hour print either way — the numbers here are the manufacturers’ published specifications, and usable area is often slightly less once a clip or a purge line is in the way.

Common problems, and where to fix them

Symptom What’s actually wrong Where to fix it
Slicer says “not manifold” or “needs repair” Boundary or non-manifold edges PrusaSlicer and Orca both offer to repair on import. Accept it, then re-check the result here — the repair is a guess
Model looks closed but reports holes Near-duplicate vertices Blender: select all in edit mode, M → Merge by Distance. Raise the tolerance until the count drops
Parts of the surface look inside-out Flipped normals Blender: Shift+N to recalculate outside. Meshmixer: Analysis → Inspector
Print has infill on the outside Flipped normals, or a whole model wound inward Same fix. This tool reports the whole-model case separately, because it’s a different fault
Model is 25.4 times too big or too small Inches exported, millimetres assumed — STL stores no units Scale by 25.4 or 0.03937 in the slicer, and fix the CAD export
Model floats above the plate Lowest point isn’t at Z = 0 Most slicers drop it automatically. The tool tells you the actual Z so you can tell deliberate from accidental
File won’t open at all Truncated download, or the wrong format renamed Re-download. The tool distinguishes a truncated binary STL from a file that was never one

Meshmixer’s Inspector is still the fastest way to fix a genuinely broken mesh, despite Autodesk having retired it — it marks each defect with a coloured sphere and repairs one at a time or all at once. Blender’s 3D Print Toolbox add-on covers the same ground inside a tool that’s still maintained.

What this tool doesn’t do

It doesn’t repair anything. That’s a choice, not a gap. Automatic repair guesses at what you meant, and a guess that closes a hole in the wrong place gives you a model that slices cleanly and prints wrong — which costs a lot more than the file did. Knowing there are three boundary edges and seeing exactly where they are is what lets you fix it properly.

It also doesn’t predict what your slicer will do. Slicers differ in what they repair silently, and a file that fails here may still print if yours is forgiving. These are geometry checks, stated as counts, with the reasoning shown. Treat a clean result as one class of problem eliminated, not a promise.

And it doesn’t need WebGL. If your browser can’t render 3D, every measurement and all seven checks still run and report — the page just says so where the model would be. The diagnostic is the point. The picture is how it’s shown.

Frequently asked questions

What makes an STL file printable?

It has to be watertight — a closed surface with a definite inside and outside. In a closed mesh every edge is shared by exactly two triangles. If an edge belongs to only one triangle there is a hole, and the slicer has no way to tell solid from empty at that point. If an edge belongs to three or more, the geometry is non-manifold and there is no single answer to which side is inside. Those two conditions are what this tool checks first, because they are what makes a slice fail.

What are non-manifold edges, and why do they break slicing?

A non-manifold edge is one where more than two faces meet. Picture two boxes joined along a single shared edge, like a bow tie. A slicer works by asking, for each layer, which side of the surface is material — and at that edge there are three or more answers. Some slicers refuse the file, some pick one arbitrarily and produce geometry you did not model. It is the single most common cause of a model that opens fine in a viewer and then will not slice.

Why does my model have holes when it looks closed?

Almost always because two vertices that should be the same point were written a fraction apart. Visually the gap is invisible; topologically the two triangles do not share an edge, so both edges count as boundaries. This tool reports those separately as near-duplicate vertices, because the fix is different: merging vertices by distance closes them, whereas an actual missing face has to be rebuilt.

Does this work as an OBJ viewer too?

Yes, and every check runs identically on OBJ. The parser handles all four face reference forms — a, a/b, a/b/c and a//c — along with negative indices, which are relative to the end of the vertex list rather than the start, and n-gons, which are fan-triangulated. Material and texture data is ignored, since none of it affects whether the geometry will print.

Is my file uploaded anywhere?

No. The file is read and analysed inside the page by your browser and no part of it is sent anywhere. There is deliberately no share link on this tool either — a model file is often unreleased product geometry, and that is not something to put in a URL. You can confirm it yourself: open the network tab, load a file, and watch nothing leave.

Will it open a large STL model?

Up to 50MB, which is roughly a million triangles in binary STL. Past that the tool tells you rather than freezing the tab. Two things scale back on very large models and both say so on screen: wireframe is switched off above 300,000 triangles because it obscures more than it shows, and the self-intersection check is skipped above 50,000 triangles because it is the one test that is not linear.

How accurate is the estimated weight?

The volume is exact for a closed mesh — it is the signed sum of the tetrahedra formed by each triangle and the origin, not an approximation. The weight is that volume multiplied by the nominal density of the material, so it is the weight of a completely solid part. A real print at 15% infill with a couple of perimeters usually comes out around a quarter to a third of it. If the mesh is not closed there is no inside to measure, and the tool says so rather than printing a confident wrong number.

Can it repair the model as well?

No, and that is deliberate. This diagnoses; it does not modify your file. Automatic repair guesses at what you meant, and a guess that closes a hole in the wrong place produces a model that slices cleanly and prints wrong. Knowing there are three boundary edges and seeing exactly where they are is what lets you fix it properly in Blender, Meshmixer or your slicer.

Does the tool need WebGL?

Only for the 3D preview. Every measurement and all seven checks run without it, and the page says so where the canvas would be. The diagnostic is the point; the picture is how it is presented. That also means the whole result is real text on the page, which is what makes it work with a screen reader.

Should I use STL or 3MF?

3MF is the better format — it carries units, colour, materials and print settings, and it cannot represent the malformed geometry STL happily stores. STL carries nothing but triangles, and not even the units. In practice STL is still what most models are shared as, which is why this tool reads it. If you are exporting from your own CAD and both are offered, choose 3MF.

Last updated: August 29, 2026