STL and 3D Model Viewer
Open a 3D model, turn it around, and read its real dimensions.
Runs entirely in your browser
Loading the tool…
Drag to orbit · scroll to zoom · shift-drag to pan · drag a ring to turn the model
- —Triangles
- —Size, X × Y × Z
- —Volume
- —Surface area
STL and OBJ carry no units. The numbers above are in whatever the file was authored in, which for a printable part is almost always millimetres.
A 3D model viewer that runs in the tab. Drop a file on the view, or pick one, then drag to turn it, scroll to zoom, hold shift to pan, or press the arrow keys. Named views put you square on the front, the top or the side without hunting for them by dragging. It reads STL in both its encodings, OBJ, and GLB, and reports the numbers that decide whether a model is usable: triangle count, bounding box, volume and surface area.
The gizmo in the corner is there because orbiting a model is the quickest way to lose track of which way is up. Three spokes run out to lettered balls showing where X, Y and Z currently point, and clicking one snaps the view to look straight down it, so getting back to a known orientation is one press rather than a hunt. The small hollow balls are the negative directions, the same axes seen from behind; they take their letter when the pointer is on them, because six labels at that size is a thicket.
Turn the model itself with the arcs. Switch them on and three quarter arcs appear around it, one per axis, each ending in a grabber; drag one and the model turns about that axis rather than the camera moving around it. While you drag, a protractor appears in that plane: ticks every five degrees, longer every fifteen, longest at the quarters, with the swept angle filled in behind the grabber. It is drawn in the orientation the drag started from and does not turn with the model, because that is what a protractor is: the scale stays put and the work moves against it. The angle is shown in degrees as you go, and holding shift snaps to fifteen degree steps, because the angles that matter when laying a part down are 45 and 90 rather than 44.3. The difference matters when you are deciding how to lay a part on a build plate, which is why the size figure below changes as you turn it and relabels itself Footprint, as turned. That is the number that decides whether it fits, and it is not the one printed on the model: a part 10 long and 4 wide turned forty-five degrees is 9.9 across, not 10.8, and a square one turned the same way is 14.1.
The axes themselves are the usual three, X red, Y green, Z blue, drawn over the model rather than through it so one inside a solid still reads. Switch the grid on and the ground runs to the horizon rather than stopping at a square, because a grid with an edge reads as a rug the model is standing on. It is off to begin with, since the first thing anyone wants is a clear look at the part. When it is on it says how big the thing is without anybody measuring: ten squares across the model's longest side, labelled in the file's own units. STL and OBJ carry no units at all, which is worth knowing before trusting a number: the file says 40, and whether that is millimetres or inches is a convention between whoever exported it and whoever prints it.
Nothing is uploaded, and on this page that is unusually worth saying. Every other online STL viewer and 3D model viewer takes your file to a server. A part you are about to manufacture is exactly the kind of file not to hand to one, and this page is served with a header forbidding it from opening a connection anywhere at all. Open the network tab and watch nothing happen while a fifty megabyte model loads.
The volume figure is the one to treat carefully. It is the signed sum of tetrahedra from the origin, which is exact for a closed mesh and meaningless for one with holes in it, and STL files from scanners and careless exporters are frequently not closed. Triangles with no area are counted and reported for the same reason: they are the usual sign a file has been through something that damaged it.
A .gltf file will not open, and that is not a gap.
That format keeps its geometry in a separate .bin beside it, and a page
given one file has no way to fetch the other and no permission to try. Export as
.glb, which packs the JSON and the buffers into a single file.
How to use it
- Drop a model onto the view, or choose a file.
- Drag to rotate, scroll to zoom, shift-drag to pan.
- Click a knob on the corner gizmo to look straight down that axis.
- Switch to Wireframe to see through the model, or Solid + edges to see its mesh.
- Read the size, volume and triangle count underneath.
Questions
What 3D file formats does it open?
STL in both encodings, OBJ, and GLB. STL is what almost every 3D printing pipeline produces, OBJ is the universal interchange format, and GLB is the self-contained form of glTF. Materials, textures, animation and skinning are read past rather than drawn: this shows you geometry.
Why will it not open my .gltf file?
Because a .gltf points at its geometry in a separate .bin file beside it, and this page is handed one file. It cannot fetch the second, and would not be permitted to: the Content-Security-Policy on every page here forbids opening a connection anywhere. Exporting as .glb packs everything into one file and works.
Is my model uploaded?
No, and it is worth checking rather than believing. The file is read by WebAssembly compiled from Rust and drawn with WebGL, both in this tab, and the page is served with connect-src set to none, so the browser refuses to let it open a connection at all. That is visible in the response headers and in the network tab.
Is the volume figure reliable?
Only for a closed mesh. It is computed as the signed sum of tetrahedra from the origin, which is exact when the surface has no holes and gives a plausible-looking wrong answer when it does. Scanned models and files that have been repaired are often open. Treat it as an estimate unless you know the mesh is watertight.
What model is on the page when it opens?
A torus knot, generated by the same WebAssembly that reads your files rather than downloaded from anywhere. It is there because a shape with real curvature is the honest test of a viewer: flat facets hide a wrong normal and a smooth tube does not. It is also a closed surface, so the volume shown beside it is exact.
What are degenerate triangles?
Triangles with no area, where two corners are the same point or all three lie on a line. They are invisible, they slow down slicing, and some printers refuse a file containing them. The count is reported because it is the usual sign a file has been through a conversion that damaged it.
What do the arcs do, and how are they different from dragging?
Dragging the background moves the camera around a model that stays where it is. Dragging an arc turns the model itself, about its own axis, and leaves the camera alone. Only the second changes how the part would sit on a plate, which is why the size readout switches to Footprint while a rotation is applied and Reset view clears it. The turn is measured from where the drag began rather than added up frame by frame, so a snapped 90 degrees is exactly 90.
Does turning it change the volume or the triangle count?
No, and it should not: rotating a solid does not change how much material it is or how it is built. What changes is the box it occupies, which is the axis-aligned extent and depends entirely on the angle. Volume, area and triangle count are properties of the model, so they stay put.
What is the difference between Wireframe and Solid plus edges?
Wireframe draws only the edges, so you see through the model, which is how you find geometry hidden inside another part or check that a shell is actually hollow. Solid plus edges draws both, which shows where the mesh is dense on a surface you can still read. Solid is neither and is what you want most of the time.
How large a file can it handle?
Four million triangles is the ceiling, which is well past where a browser draws smoothly. Neither edge view is offered above a quarter of a million, because building the edge buffer for one costs more than the view is worth, and the page says so rather than going blank.
Your data stays on your device
Everything above runs inside your browser as WebAssembly compiled from Rust. Nothing you type is uploaded, logged or stored on a server. You can load this page once, go offline, and it still works.
This page makes no requests at all, to anywhere. That is not a promise in the copy: it is a Content-Security-Policy header your browser enforces, and connect-src on it is none. Open the network tab and watch nothing happen.