3D

STL for 3D Printing: What It Is and How to Prepare a Model

You found a great model on Printables or made your own in CAD — and the printer spits out mush, gaps, or refuses to print at all. Nine times out of ten it's not the printer's fault but the STL file's. Let's unpack what the format is, why the mesh must be watertight, and how to get a model to the slicer with no surprises.

A 3D printer hotend printing a part under blue workshop lighting
STL is the bridge between a 3D model on screen and a real part on the printer bed. Photo: Pexels

What STL is in plain English

STL is a format that describes the surface of a 3D model as a solid "scale" of triangles. The acronym is expanded in different ways: most often as STereoLithography (after the technology it was created for in 1987), sometimes as "Standard Tessellation Language." The essence is the same: STL represents any shape — from a gear to a dragon figurine — as a set of flat triangular faces joined edge to edge.

Each triangle is defined by three vertices and a normal vector that shows which side of the face points "outward." There is almost nothing else in the file — and that is the whole philosophy of STL: give the printer exactly what it needs and not a byte more.

In short

STL is "shape without substance": just the surface geometry as triangles. No color, no material, no units. In exchange, every slicer and every 3D printer on the planet understands it.

Why STL has no color or textures

Beginners are surprised: how come I see a model on screen but the color didn't save into the file? The answer is simple — an ordinary FDM printer doesn't need color. It builds the part by extruding molten plastic layer by layer, and the object's color is decided by the filament spool, not the file. Textures and materials are the language of rendering and games, not of physical manufacturing.

So STL deliberately threw everything extra away. If you need color printing (say, on a multi-material printer or for a full-color resin model), other formats are used — 3MF or OBJ, which can store color. But for 99% of home printing, STL remains the best choice.

Extension
.stl
Stores
A triangle mesh
Introduced
1987 (3D Systems)
Color / textures
No
Units
None (usually mm)
Two variants
ASCII and binary

Watertight mesh: the golden rule

Here is the most important thing to know about STL before printing: the mesh must be watertight (technically manifold). Picture the model as an inflatable balloon: if you poured water inside, none should leak out. No holes, no gaps, no dangling edges.

Formally that means every mesh edge belongs to exactly two triangles, all normals face outward, and there are no self-intersections or duplicate vertices. Only for such a closed surface can the slicer clearly answer the key question: "where is the plastic here, and where is empty space?"

What breaks prints most often

Typical STL defects: holes in the mesh (an edge on only one triangle), flipped normals (a face pointing inward), self-intersections, and non-manifold edges where three or more faces meet. At those spots the slicer produces gaps, extra walls or strange infill. Fix them in Blender, Meshmixer, Microsoft 3D Builder or an online repair tool.

Close-up of an Ender printer hotend with a fan and a heat warning icon
The nozzle has no idea what it's printing — it blindly follows the toolpath from the slicer. And that path depends on a correct STL. Photo: Pexels

ASCII or binary STL

STL comes in two variants, and the only difference is how the same triangles are written down. ASCII STL is human-readable text: open the file in Notepad and you'll see the words facet normal, vertex and coordinates. Binary STL stores the same numbers as raw 32-bit values — compact, but unreadable by eye.

The practical takeaway is simple: for printing, almost always use binary. It is about 8 times smaller for the same geometry and opens faster. The ASCII version is justified only when you want to peek inside a very simple model to debug it — on a real part with millions of triangles, a text file balloons to hundreds of megabytes for no reason.

Units, scale and tessellation

Remember that STL stores no units — inside are just bare numbers. By an unwritten convention, the whole 3D-printing world treats them as millimeters. Hence a classic trap: if a model was drawn in inches, on import it will be 25.4 times smaller than intended; if in centimeters, 10 times larger. So the first thing to do after loading into the slicer is to check the dimensions along each axis.

The second key parameter is tessellation — how finely a smooth surface is broken into triangles. A sphere made of a hundred faces comes out "faceted" like a cut diamond; made of tens of thousands, perfectly round, but the file gets heavy. The balance is set on CAD export via the tolerance (chord/angle): too coarse and you see facets, too fine and the printer can't reproduce the difference anyway while the file swells.

STL is a trade-off between the smoothness of the shape and the weight of the file. The art is having exactly as many triangles as your printer can actually reproduce.
An Ender printer hotend laying down a filament strand on the bed layer by layer
The slicer turns a watertight model into the toolpath along which the nozzle lays plastic layer by layer. Photo: Pexels

The path to the printer: slicer and G-code

A printer doesn't understand STL on its own — it needs concrete commands: where to move the nozzle, how fast, how much plastic to extrude. The program that turns a model into those commands is the slicer (Cura, PrusaSlicer, Bambu Studio, Orca). It mentally "slices" the watertight model into horizontal layers, say 0.2 mm thick, and for each layer computes the outline, the infill and the supports.

The slicer saves the result as G-code — a long list of instructions that goes to the printer. That's exactly why a correct STL is so critical: if the slicer meets a hole or a flipped normal during slicing, the error gets "baked" into the G-code, and the printer faithfully reproduces the flaw in plastic.

1

Check the mesh

Make sure the STL is watertight — repair holes and normals if needed.

2

Set the scale

Verify the size in mm: the model should be exactly as big as intended.

3

Slice it

Set layer height, infill and supports, and generate G-code.

4

Print

Send the G-code to the printer via USB, SD card or over the network.

Pre-print checklist

A short list that saves hours and spools of filament:

  • Mesh is closed — no holes, normals outward, no self-intersections.
  • Scale is correct — dimensions in millimeters match the intent.
  • Format is binary — the file isn't bloated by needless ASCII.
  • Tessellation is sensible — smooth surfaces without coarse facets, but not gigabytes.
  • Orientation is considered — the model is turned to minimize supports.

Need to prep not just the model but its images too?

FormatZ converts images and documents right in your browser — fast and with no install. Handy for instructions, previews and cover art for your models.

Open all formats

If you're still deciding which format to store a model in, see our comparison of OBJ, FBX, STL and glTF. And to simply view someone else's STL before printing, our overview of how to open 3D models will help.

STL appeared in 1987 alongside the first stereolithography printers and turned out to be extremely simple: it describes the model surface as triangles and stores nothing extra. A printer needs neither color nor edit history — only the shape. That simplicity, plus compatibility with every slicer, cemented STL as the default format.
It is a mesh with no holes and no logical errors: every edge belongs to exactly two triangles, normals face outward, and there are no self-intersections or dangling faces. Only for such a closed surface can the slicer clearly tell where the inside of the model is and where the air is. Otherwise the print fails or comes out defective.
For printing, almost always binary: it is about 8 times smaller for the same geometry and reads faster. The ASCII version (plain text with coordinates) is handy to open in Notepad to debug a simple model, but on real parts it bloats the file for no benefit.
The file itself has no units — only numbers. By an unwritten convention, 3D printing treats those numbers as millimeters. So if a model was drawn in inches or centimeters, it will import into the slicer at 25.4 or 10 times the wrong size. Always check the dimensions after loading.
When a CAD model's smooth surfaces are exported to STL, they are broken up (tessellated) into flat triangles. The more triangles, the smoother a sphere or cylinder looks, but the heavier the file. Too coarse a tessellation gives a faceted result; too fine a one gives a huge file with no visible gain. A sensible compromise is set by the export tolerance (chord/angle).