STL

What is an STL file?

The 3D printing standard. Triangles only — no colour, no material, no texture.

What STL is

STL is a binary format, meaningful only to a program that knows it. It stores shapes and coordinates rather than pixels, so it stays sharp at any size — a logo scaled to a billboard loses nothing. It is used for 3D printing.

The extension is .stl, and the full name is Stereolithography. Both matter less than what the file can hold, which is what the rest of this page is about.

Where STL came from

3D Systems published it in 1987.

A format that has been readable for that long is a format worth trusting with something you want back in ten years.

The specification is public

It is published in full, so anyone can implement it from the document rather than by inspection, which is why it turns up in so many programs and why files written twenty years ago still open. A published specification is not the same thing as a royalty-free one: where a format wraps a codec, the patent licensing is a separate question the standard does not settle.

Nothing is thrown away

STL stores its content exactly. Saving it again changes nothing, so it can be opened, edited and re-saved as often as you like without accumulating damage — which is what makes it a working format rather than a delivery one.

What opens STL

Blender, PrusaSlicer and Cura read it, and so do most programs of the same kind.

If a file will not open, the format is rarely the problem — it is more often that the program predates it. Converting to something older is the reliable way past that, and it is what the rest of this site is for.

Opening it in a browser

No browser reads it.

That is the single most common reason to convert it: not that the format is bad, but that the place you want to show the file cannot read it.

It is a working format

STL is meant to be opened and changed. Keep the file in this format for as long as the work is going on, and export from it whenever a finished copy is needed.

Triangles, and deliberately nothing else

An STL file is a list of triangles. Each one has three corners and a direction telling which side is outside. There is no colour, no material, no texture, no unit of measurement and no structure — a model of an engine block is one undifferentiated bag of triangles, exactly like a model of a cube.

The format was written in 1987 for stereolithography, and everything about it reflects a machine that only needed to know where the solid was. Nearly forty years later it is still what every desktop 3D printer expects, because that is still the only question a slicer asks.

Curves do not exist, so resolution is decided at export

A sphere in a modelling program is a mathematical sphere. An STL of it is a few thousand flat triangles pretending to be one, and how many is chosen by whoever exported the file. Too few and the print has visible facets; too many and the file is enormous and the slicer is slow.

This is the one decision that cannot be undone later. A coarse STL cannot be smoothed back into a curve, because the curve is gone — all that remains is the approximation. Export from the original model at the tolerance the print needs, and keep the original: the STL is a delivery format, not a master.

Watertight, and why a slicer refuses a file

A printable model has to describe a solid without ambiguity. That means every edge is shared by exactly two triangles, no holes, and every normal pointing outwards. Such a mesh is watertight or manifold, and it is the property that lets a slicer decide what is inside.

Models fail it constantly, usually because they were built for rendering. A surface with no thickness looks perfect on screen and is unprintable. Two overlapping shapes that were never merged leave internal faces. A hole in the mesh leaves the slicer guessing, and it will either refuse the file or fill something you did not intend. Repair tools fix most of it automatically, and it is worth running one before the printer rather than after.

The units problem, in a format where it matters most

STL numbers have no dimension. The file says 25.4 and does not say whether that is millimetres or inches, so a model designed in inches and opened in a millimetre-based slicer prints at 1/25th of its intended size — or 25 times too large in the other direction.

Most of the 3D printing world assumes millimetres, and most slicers default to it. Check the bounding-box dimensions the slicer reports against what the object should actually be before printing. It takes five seconds and it is the difference between a part that fits and a very slow, very expensive lesson.

ASCII and binary are the same format

The specification allows two encodings. ASCII writes every coordinate as readable text, which makes a file five or six times larger and lets you open it in an editor. Binary writes fifty bytes per triangle and is what almost everything produces and expects.

Use binary unless something specifically demands otherwise. The only real advantage of ASCII is that a human can inspect it, which is occasionally useful when diagnosing a broken export and never useful for printing. Converting between them changes nothing about the geometry.

Colour, and the formats that carry it

STL has none. There are unofficial extensions that stuff colour into unused bytes, and support for them is inconsistent enough that they are not worth relying on.

This matters as multi-material and full-colour printing become ordinary. If a print needs more than one colour, the file has to be 3MF or OBJ, both of which carry material assignments properly. 3MF is the modern answer generally — it is a real specification with units, materials and print settings, and the reason it has not replaced STL is inertia rather than merit.

From STL to a printed object

The STL is not sent to the printer. It goes into a slicer, which orients it, adds supports where an overhang would otherwise print into air, and cuts it into layers to produce G-code — the actual instructions for the machine. Every decision that determines whether the print succeeds is made in the slicer, not in the file.

Which is why the useful thing to get right in the STL is narrow: correct scale, watertight mesh, enough triangles to describe the curves at the size it will be printed. Everything else — infill, walls, temperature, supports — is downstream, and none of it can rescue a mesh with holes in it.

The facts, in one place

Identifiers and provenance for the STL format.
Extension.stl
Media typemodel/stl
Published by3D Systems
First published1987

STL files: common questions

How do I open an STL file?

Windows 3D Viewer opens one directly, as do Blender, MeshLab and every slicer — Cura, PrusaSlicer, Bambu Studio. Most online viewers handle them too. To print, the file goes into a slicer rather than to the printer.

Why does my slicer say the model is not watertight?

The mesh does not describe an unambiguous solid — there is a hole, an edge shared by more than two triangles, a surface with no thickness, or a normal pointing the wrong way. Repair tools fix most cases automatically, and it is worth doing before starting a long print.

Why did my model print at the wrong size?

STL has no units. A model designed in inches opened in a millimetre-based slicer comes out 25 times too small. Check the bounding-box dimensions the slicer reports against the size the object should be, every time.

Can an STL file have colour?

Not really. There are unofficial extensions and support is too inconsistent to rely on. For multi-colour or multi-material printing, use 3MF or OBJ, both of which carry material assignments properly.

What is the difference between binary and ASCII STL?

Only the encoding. ASCII is readable text and five or six times larger; binary is fifty bytes per triangle and is what almost everything produces. The geometry is identical, and converting between them changes nothing.

Can I make an STL smoother after exporting?

No. The curve was replaced by flat triangles at export and there is nothing left to recover. Re-export from the original model at a finer tolerance — which is why the modelling file, not the STL, is the one to keep.