Blog · Format primers

What is an STL file? A complete guide for 3D printing and beyond

Last updated 11 June 2026

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:

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:

When STL falls short

If any of these apply, the newer 3MF format is usually a better choice:

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.

Want to open an STL right now? Drag any .stl file into the Open3D viewer in your browser. No upload, no signup, no install. Works on phone too.

How to view an STL file

Almost any 3D viewer can open STL. A few common options:

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.