3D printing · No upload
View and measure an STL file on your device
Drop an STL or 3MF to rotate a preview and read its triangle count, bounding box and surface area.
In the file's own units (an STL has none). Bytes after the last triangle are ignored; the row says how many. Refused by name: OBJ, STEP, AMF and GLTF; “this file is neither a binary STL nor an ASCII STL”; a 3MF that is ZIP64, encrypted, damaged, sliced, a beam lattice, or a component or build item pointing at another model part (p:path); over 256 MB or 500,000 triangles. One model at a time. Takes .stl and .3mf.
How this viewer works
The browser’s File API gives this page the file’s bytes, and everything after that is arithmetic in this tab. A binary STL can begin with the word “solid”, so the parser checks whether the file length matches the binary layout and otherwise looks for ASCII facet records; anything else is refused. From the parsed coordinates it measures the triangle count, the axis-aligned bounding box and the surface area (half the cross-product magnitude of each triangle, summed), and it counts zero-area triangles. For an STL, the report says whether the parser found all stored normals set to zero; it does not count or check stored normals. Face normals are recomputed from the triangle geometry for both formats. A 3MF is unpacked and measured through the same path, and its stored normals are not read.
The geometry goes to WebGL unindexed, so each triangle’s three vertices carry the same computed face normal, which gives flat shading without a WebGL extension. About twenty lines of first-party GLSL light it with a key light, a fill and a small ambient, in the site’s colour tokens. The three lines drawn from the centre of the bounding box point along the file’s X, Y and Z axes, with Z picked out because most slicers treat it as up, so a model exported lying on its side is easy to spot. The opening view comes from the measured bounding box, and Reset view returns to it. The canvas is redrawn only when the view changes; there is no animation loop.
STL files carry no units: the coordinates are bare numbers, so this page reports them in the file’s own units and does not assume millimetres. Files above 256 MB are refused before reading, and meshes above 500,000 triangles are refused by name with the observed count and limit. Trailing bytes after the final triangle are ignored and counted in the row. A 3MF keeps the unit it declares, unconverted; its colours, materials and metadata are not read, and its objects are drawn merged in one colour. The reader refuses a component or build item that points at another model part inside the archive (p:path), along with ZIP64, encrypted or damaged archives, sliced models and beam lattices. If the browser gives no WebGL context, the note under the canvas says so; the preview is off, and the measurements and the report download still work.
Viewing a 3MF file
For a 3MF, the viewer reads the ZIP central directory, finds the XML model through the package relationships, has your browser decompress it and checks it against the checksum the archive recorded. Each build placement is applied before anything is measured. The Units row shows the difference between the formats: an STL reads “none declared (STL)”, while a 3MF names the unit the file declares, such as inch, centimetre or micron. To turn a 3MF into an STL, the 3MF to STL converter writes one and prints the scale factor it used.