A short history
STL (StereoLithography) was introduced by 3D Systems in the late 1980s as an interchange format for their SLA printers. It became the de-facto standard for 3D printing because it is extremely simple — a flat list of triangles, nothing more.
That simplicity is also its main limitation. STL does not carry color, units, or assembly structure. It represents one closed (or not-so-closed) surface and that is it.
Binary vs. ASCII
STL comes in two flavors. ASCII STL is human-readable text: each triangle is written with keywords like facet normal, outer loop, vertex. It is easy to inspect but large on disk. Binary STL uses a fixed 50-byte record per triangle — a normal vector, three vertex positions, and two bytes of attributes — preceded by an 80-byte header and a 32-bit triangle count. Binary is about one-fifth the size for the same mesh and is what most tools emit by default.
Some binary STL writers abuse the per-triangle attribute bytes to encode color, but there is no official standard for this and most viewers ignore it.
How geometry is stored
Each triangle is independent. Vertex positions are not shared between neighboring triangles, so a typical mesh has every interior vertex duplicated three or more times. Robust viewers detect and merge shared vertices before rendering to reduce GPU memory use.
Triangle winding order is expected to be counter-clockwise when viewed from outside the solid. A unit normal is stored per triangle but is usually ignored by viewers, which recompute normals from the triangle positions.
When to use STL
STL is still the lowest common denominator for slicers and for exporting from CAD tools. If you want a mesh to work in almost any 3D printing pipeline without surprises, STL is the safe choice.
For anything more — colors, materials, multiple parts in one file, units, or metadata — prefer 3MF (see the companion article).
Viewing STL in the browser
STLViewer parses both ASCII and binary STL directly in the browser using Three.js. There is no upload required for quick preview — the file bytes stay on your device until you explicitly share them.
For sharing, we upload the file to Cloudflare R2 behind a short-lived presigned URL and return a unique share link. Share links are private: they are not indexed by search engines and are not listed anywhere public on the site.
