3D printing · No upload
STL file viewer
Drop an STL and see it: the triangle count, the bounding box and the surface area read straight out of the file, with a rotatable preview drawn by your browser's own WebGL. Binary and ASCII STL both open, and so does 3MF. Nothing is uploaded, nothing is downloaded — not even a library — and the network meter below proves the zero live.
How this viewer works
When you choose a file, the browser's File API hands this page its bytes in memory — no transfer happens, because the file is already on your machine — and everything after that is arithmetic in this tab. A binary STL may begin with the word “solid”, so the format is decided by the file's arithmetic — 84 bytes plus 50 per triangle — not by its first word; a file whose size fits that sum is read as binary, one that reads as text and carries facet records is read as ASCII, and anything else is refused rather than guessed at. The triangles come out as bare coordinates, and the readout is measured from them: how many there are, the axis-aligned bounding box, the surface area as the sum of half each cross product, how many triangles have zero area, and whether the exporter stored real normals or wrote zeros. A 3MF goes through the same measuring step after its archive is unpacked.
The picture is drawn by your browser, not by a library. The geometry is uploaded un-indexed, so every triangle carries three copies of its own computed face normal — that is what gives flat shading on plain WebGL with no extension requested — and the whole shader is about twenty lines of first-party GLSL lit by one key light, a fill and a small ambient, in the site's own colour tokens. The three lines from the origin are the file's own axes, with Z picked out because most slicers treat it as up; that is the fastest way to see that a model came out of its exporter lying on its side. The opening view is derived from the measured bounding box rather than from anything you did, so the same file always opens the same way, and Reset view puts it back. There is no animation loop when nothing is happening: the canvas is redrawn only when you drag, scroll or press a key.
The honest limits. STL files carry no units: the numbers in the file are bare coordinates, so this page reports the bounding box in the file's own units and never in millimetres. Most slicers read an STL as millimetres, which is a convention of the software, not a fact in the file. This page also does not check whether the mesh is watertight, whether it is manifold, or whether it is printable, and it prints no volume, because a volume figure means nothing on a mesh whose closure was never tested. Files above 256 MB are refused before anything is read, and meshes above 500,000 triangles are refused by name with both numbers, because the whole mesh has to fit in your device's memory as raw floats. A file that is neither encoding gets the refusal “this file is neither a binary STL nor an ASCII STL” rather than a half-parsed shape. And if your browser gives no WebGL context the note under the canvas says so in those words — the preview goes dark, every measurement below it still comes from your file, and the report still downloads.
Viewing a 3MF file
A 3MF is a ZIP archive with an XML model inside it, and this page opens one the same way a slicer does: the central directory is read, the model part is located through the archive's own relationships, the part is decompressed by your browser and checked against the checksum the archive recorded for it, and each build item's placement is applied before anything is measured. The interesting difference is the Units row. An STL reads “none declared (STL)”, because the format has nowhere to put a unit; the same row on a 3MF names what the file declares — inch, centimetre, micron, whatever the exporter wrote — because 3MF has a field for it. That contrast is the whole reason both formats open here. If you need the 3MF turned into an STL, the 3MF to STL converter writes one and prints the scale factor it used.