You downloaded a model, the file ends in .stl, and your slicer happily opens it, but nobody ever explained what is inside. Then one day the part prints 25 times too small, or a 3 MB file turns into a 90 MB one after an export, and it suddenly matters. An STL file is simple once you see what it stores and, more importantly, what it leaves out.
Short answer: An STL file describes the surface of a 3D object as a list of triangles. It stores no color, no material and no unit; millimeters are assumed by almost every slicer. It comes in binary (compact) and ASCII (readable text) versions, and it sits between your CAD software and your slicer.
What an STL file actually contains
An STL is a bag of triangles. For each triangle the file stores:
- a normal: a direction saying which side is "outside";
- three vertices: the X, Y and Z coordinates of the corners.
That's it. There is no notion of a "hole", a "fillet" or a "cylinder". A round hole is a ring of flat triangles, and a sphere is a faceted ball. More triangles make curves smoother, but also make the file bigger.
Because each triangle stores its own three corners, shared corners are repeated. A cube needs 12 triangles (two per face), so its 8 corners are written 36 times. That redundancy is one reason STL files are larger than formats that store each point once.
Binary vs ASCII STL
The same triangles can be written two ways:
| Binary STL | ASCII STL | |
|---|---|---|
| Looks like | Unreadable bytes | Text: facet normal, vertex 10 0 5... |
| Size per triangle | Exactly 50 bytes (plus an 84-byte header) | Usually 200-300 bytes, depending on number formatting |
| 100,000 triangles | About 5 MB | Roughly 20-30 MB |
| Used for | Almost every real-world export | Teaching, debugging, some older tools |
Both are perfectly valid. If you see an STL that opens in a text editor, it is ASCII. STL Viewer reads both and shows "STL (binary)" or "STL (ASCII)" in the info panel; one of its sample models, the calibration cube, is an ASCII STL so you can see the difference.
Why STL files get so big
The binary size is predictable: 84 + 50 x triangles bytes. So:
- A CAD bracket with 8,000 triangles: about 0.4 MB.
- A detailed figurine with 1,000,000 triangles: about 50 MB.
- A raw 3D scan with 5,000,000 triangles: about 250 MB.
The triangle count depends on the export resolution chosen in CAD. Exporting a part with fine tolerance can multiply the triangles by 10 with no visible difference in a 0.2 mm layer print. If an STL is unexpectedly heavy, re-export at a coarser setting; the STEP vs STL article explains how to choose the resolution.
No units, no color: the two big gotchas
Units
The coordinates are bare numbers. A vertex at 25.4 could mean 25.4 mm or 25.4 inches; the file doesn't say. Slicers assume millimeters. So a part designed in inches, 2 in long, arrives as a 2 mm speck. The fix is to scale by 25.4 (2,540%), which is covered step by step in fixing inches vs millimeters.
Color and material
Standard STL has no colors and no material information. Some programs hide color in the header or spare bytes, but you can't rely on that. If you need colors or several parts with their positions, 3MF or OBJ with MTL is the better choice; see 3MF vs STL.
Where STL fits: from CAD to slicer
- Design in CAD (exact surfaces) or sculpting software (dense meshes).
- Export as STL, which converts every surface into triangles at a chosen resolution.
- Check the STL: size, units, closed mesh, triangle count.
- Slice: the slicer cuts the triangles into layers and writes G-code for your printer.
Note the direction: you can't easily go back from STL to editable CAD features, and G-code is not a model at all. That is why a viewer that opens your STL won't open G-code; STL Viewer even shows a specific message explaining that G-code is printer instructions and pointing you back to the STL it was sliced from.
What makes a "good" STL for printing
- Closed (watertight): every edge is shared by exactly two triangles, so the slicer can tell inside from outside.
- Normals pointing outward: otherwise volume calculations go negative or wrong.
- Sensible size and units: a phone stand should read around 70-120 mm, not 3 mm or 3,000 mm.
- Reasonable triangle count for the detail you need.
You can check all of these on a phone. Open the STL in an offline viewer, and the info panel shows size, triangle count, volume and the watertight result. STL Viewer for Android does this without uploading the file. The model info guide explains each field.
A quick example you can verify
Take a 20 mm calibration cube exported as binary STL with 12 triangles. Expected file size: 84 + 12 x 50 = 684 bytes. Volume: 8 cm³. Surface area: 24 cm². If your viewer shows 20 x 20 x 20 mm and "Watertight: Yes", the export is clean. If it shows 0.79 x 0.79 x 0.79, someone exported it in inches.
Note: STL can't be "repaired" by renaming it or converting it to another extension. Fixing holes or flipped faces happens in a mesh editing tool; the viewer's job is to tell you something is wrong.
Next, read the 8-point checklist before printing to put these ideas into practice. More about the app is on the STL Viewer website.
Frequently asked questions
What is an STL file used for?
STL is the most common file format for 3D printing. It describes a model's surface as triangles, which a slicer turns into layers and printer instructions.
Does an STL file have units?
No. STL stores bare numbers, and slicers assume millimeters. A model drawn in inches will look about 25 times too small until you scale it by 25.4.
What is the difference between binary and ASCII STL?
Both store the same triangles. Binary uses exactly 50 bytes per triangle; ASCII is readable text and usually several times larger.
Can an STL file have colors?
Standard STL has no color. Use 3MF or OBJ with an MTL file if you need colors.