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.

Statusidle Files— File— Format— Triangles— Bounding box (file units)— Units— Network since file read—

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.

Frequently asked questions

Is my model uploaded anywhere?
No. The STL parser, the 3MF reader and the preview are this site’s own code running in your browser, and WebGL draws the geometry, so there is no library to download. The meter counts resource-timing entries from the first file read; it does not see the page’s earlier loading or every network channel. After the page has loaded, opening a model offline can check that reading and previewing it run locally.
What units are these numbers in?
For an STL, none: the format has no unit field, so the bounding box uses the file's bare coordinates and the Units row says “none declared (STL)”. Treating those coordinates as millimetres is a convention of the software, not a fact in the file. For a 3MF, the row shows the unit the file declares.
Why does it say my file is neither a binary nor an ASCII STL?
Because the file fits neither STL layout. Recognition is decided by the file's arithmetic, not only its first word: a binary STL is checked against 84 bytes plus 50 per triangle, even if its header begins with “solid”. When a binary header’s triangle count nearly fits, the message also gives the size that count needs and the file’s actual size. Invalid vertices, coordinates that are not numbers, a file with no triangles and the size caps each get a named refusal of their own.
Can it tell me whether my model will print?
No. This page does not check whether the mesh is watertight, manifold or printable, and it does not repair meshes. It prints no volume, because a volume is only meaningful for a closed mesh and closure is not tested here.
What else can it open?
STL in both encodings, and 3MF archives, which the page unpacks with your browser’s own decompression. OBJ, STEP, AMF and GLTF are refused by name.

Related tools