Blog · Format primers
What is an STL file? A complete guide for 3D printing and beyond
An STL file describes the surface of a 3D model as a collection of triangles. That's it. No colour, no texture, no scale, no name. It is the most widely-used file format in 3D printing because it is the simplest thing that could possibly work — and because it was here first.
The short version
An STL file is a list of triangles. Each triangle has three corner points and an outward-pointing normal vector. Strung together, those triangles form the surface of a 3D object. There is no notion of curves, no parametric data, no materials, no units. Just triangles.
Because of that radical simplicity, almost every piece of software that touches 3D — slicers, CAD packages, modellers, web viewers, AR previewers — can read and write STL. That's why it's still the default export option in 2026, even though several technically better formats now exist.
A brief history
STL was created by 3D Systems in 1987 to feed their first stereolithography (SLA) machines. The acronym originally just stood for "stereolithography" — the laser-cured-resin printing technique their machines used. Over the decades it has been retroactively expanded to "Standard Triangle Language" and "Standard Tessellation Language", but those are post-hoc rationalisations. The name stuck.
3D Systems publicly documented the format, which was unusual for the era and turned out to be one of the most consequential decisions in the early 3D printing industry. By keeping it simple and open, STL became the de facto interchange format for an entire generation of 3D printers, slicers, and modellers — long after stereolithography stopped being the dominant printing technology.
What's actually inside an STL file
The format has two flavours: ASCII and binary. Both describe the same data — a list of triangles — but they encode it differently.
ASCII STL
The ASCII variant is human-readable text. A minimal file looks like this:
solid cube
facet normal 0 0 -1
outer loop
vertex 0 0 0
vertex 1 1 0
vertex 1 0 0
endloop
endfacet
facet normal 0 0 -1
outer loop
vertex 0 0 0
vertex 0 1 0
vertex 1 1 0
endloop
endfacet
... more facets ...
endsolid cube
Every triangle is a facet block. The normal line is the outward-pointing direction of the triangle's surface, and the three vertex lines give the corner coordinates. The format is verbose — typically six times the size of the binary equivalent — but you can read and edit it in a text editor, which is useful for debugging.
Binary STL
The binary variant is the one almost everyone actually uses. It starts with an 80-byte header (which most writers fill with junk or a comment), then a 4-byte unsigned integer giving the triangle count, then each triangle packed as twelve 32-bit floats (the normal and three vertices) plus two padding bytes called the "attribute byte count" — which the standard tells you to ignore.
A 1,000,000-triangle binary STL is about 50 MB. The same data as ASCII would be around 280 MB.
What's missing
The format deliberately leaves out a lot of things you might assume would be there:
- Units. A vertex coordinate is just a number. STL doesn't say whether
1.0means one millimetre, one inch, or one parsec. - Colour or texture. A few toolchains misuse the per-triangle "attribute byte count" field to smuggle in vertex colour, but support is patchy and you can't rely on it.
- Material information. No filament type, no finish, no PBR properties.
- Hierarchy. No notion of separate parts, no naming, no transforms. The whole model is one flat soup of triangles.
- Curves. Smooth surfaces have to be approximated by many small flat triangles. A high-quality sphere might need 30,000 triangles to look smooth, where a CAD format would express the same shape with a single equation.
Why STL became the 3D printing standard
In hindsight, STL won because it solved exactly the problem that mattered most for early 3D printing and nothing more.
An SLA printer doesn't care about the curves a CAD model was built from — it only needs to know where the laser should and shouldn't fire on each layer. To compute that, the printer has to slice the model into thin horizontal cross-sections. A pre-triangulated surface is the easiest possible input for that calculation. Any CAD format that wasn't already triangulated would have to be tessellated before slicing anyway.
So STL skipped a step. Send the printer the triangles directly. The format was small, easy to write from a CAD program, easy to read from a slicer, and patentable enough to be useful but open enough to be adopted. By the time alternatives like 3MF arrived, STL had a thirty-year head start in tooling, documentation, and community knowledge.
When STL is the right choice
For most hobbyist 3D printing in 2026, STL is still the practical default:
- You are printing a single-colour part on an FDM or SLA machine.
- You're downloading from Thingiverse, Printables, MakerWorld or a Patreon — the source is almost certainly going to ship STL by default.
- You're moving a model into a slicer that you'll then configure (supports, infill, walls, temperature) yourself.
- You need maximum compatibility with old or unusual software.
When STL falls short
If any of these apply, the newer 3MF format is usually a better choice:
- You're printing in multiple colours or multiple materials and want to encode which body uses which.
- You want to bundle the slicer settings (supports, brim, infill) into the file itself so the recipient can reproduce your exact print.
- You need lossless metric units so the part doesn't come out 25.4× the wrong size when someone in a different country opens it.
- You want to ship a multi-part assembly as a single file with named bodies.
And if you want a model for the web, AR, or game engines — not a 3D printer — GLB will give you far smaller files plus full materials.
How to view an STL file
Almost any 3D viewer can open STL. A few common options:
- In your browser: drag the file into open3d.app/viewer. The file is read locally — nothing is uploaded.
- In a slicer: Cura, Bambu Studio, PrusaSlicer, OrcaSlicer all accept STL directly.
- In Windows File Explorer: install
stl-thumbto get inline thumbnails of STL files. - On iPhone or Android: phone viewer apps like Open3D, or simply the browser route above.
- In Blender: File → Import → STL.
FAQ
What does STL stand for?
Originally just the file extension for stereolithography output, used by 3D Systems' SLA machines in 1987. Later expansions like "Standard Triangle Language" and "Standard Tessellation Language" are retroactive.
What is the difference between ASCII STL and binary STL?
ASCII STL is human-readable text. Binary STL is a tightly-packed binary layout that is roughly 1/6 the size and parses much faster. Most software writes binary by default and accepts either on input.
Does an STL file have units?
No. Coordinates are unitless floating-point numbers. The convention in 3D printing is millimetres, but you'll occasionally find files exported in inches that come out 25.4× too large. If that happens, scale your import by 25.4.
Does STL store colour or texture?
Not in the standard format. Some toolchains pack per-face colour into the unused attribute-byte-count field of each binary triangle, but support is inconsistent. For real colour or texture use 3MF, OBJ or GLB.
How big can an STL file be?
No formal limit. Hobbyist files are typically 1–50 MB. Detailed scans or studio-quality miniatures can be hundreds of megabytes. Past about 250 MB, you'll want to decimate the mesh before opening it on a phone or older laptop.