
3MF vs STL: What Each Format Stores, and When It Matters
An STL stores triangles and nothing else — not even a unit of measurement. A 3MF is a zip archive that records units, colour and separate objects. Here is every difference that changes what comes off the printer.
Both formats describe the same thing — a surface made of triangles — and every slicer worth using reads both. The difference is everything around the triangles, and that is where prints go wrong.
The short answer
| STL | 3MF | |
|---|---|---|
| Geometry | Triangles | Triangles |
| Unit of measurement | None | Declared in the file |
| Colour | No | Yes |
| Materials and textures | No | Yes |
| Multiple objects | No — everything is one mesh | Yes, each with its own position |
| File layout | One flat list of triangles | A zip archive of XML |
| Typical size | Larger | Smaller (the zip does real work) |
| Age | 1987 | 2015 |
If you only remember one row, make it the second one.
What an STL file contains
An STL is a list of triangles. Each entry holds a normal vector and three corner points, and that is the entire format. There is no header describing the model, no place to record colour, no way to say "these 40,000 triangles are the lid and those 60,000 are the box".
It dates from 1987, when 3D Systems needed a way to feed a stereolithography machine. For that job a bag of triangles was exactly enough, and the format has outlived every reason to replace it because every tool on earth can read it.
There are two encodings. ASCII STL spells every number out as text, so you can open it in an editor; binary STL packs each triangle into exactly 50 bytes. Binary files come out roughly five times smaller and every slicer prefers them, which is why our converter writes binary unless you ask otherwise.
The missing unit
This is the one that costs people prints.
An STL contains numbers with no statement of what they mean. A cube 20 units wide is 20 somethings. 3D printing settled on "assume millimetres", and that convention works until a file comes out of a CAD system that was set to inches — at which point the numbers mean inches, the slicer reads them as millimetres, and your part arrives 25.4 times too small.
Nothing in the file can tell you which happened. The only fix is to measure the model and compare against what you expected, which is what our STL dimensions tool is for.
A 3MF cannot have this problem. Its root element carries a unit attribute:
<model unit="millimeter" xml:lang="en-US" xmlns="...3dmanufacturing/core/2015/02">The slicer reads that and scales accordingly. Same geometry, no guessing.
Why STL files arrive broken
Here is a consequence of the format that explains most "non-manifold edges" complaints.
Because every triangle carries its own copy of its three corners, a point where six triangles meet is stored six separate times. Nothing in the file says those six points are the same point — they just happen to hold identical coordinates. A mesh checker that looks for shared edges finds none, and reports the model as full of holes even though it looks perfectly closed on screen.
The scale of this is easy to underestimate. We ran a 150 MB, 3-million-triangle STL through our own repair tool: welding removed 7,497,549 duplicate vertices. That is not a broken file, that is a normal one. Every STL is like this.
Welding those duplicates is what "repairing" an STL usually means, and it is why repair often succeeds instantly on a file that looked hopeless. It also explains when repair cannot help: if triangles are genuinely missing, no amount of welding invents them. The open-edge count before and after tells you which case you have.
What a 3MF file contains
A 3MF is a zip archive. Inside is XML describing the model, plus whatever
metadata the producing tool wanted to keep. It uses the same Open Packaging
Conventions as .docx, which is why it compresses well and why adding new
capabilities did not require a new format — colour, textures, supports and
beam lattices all arrived as extensions.
It was published in 2015 by an industry consortium — Microsoft, HP, Autodesk and others, with the printer makers joining later — explicitly to replace STL for manufacturing.
Look inside one yourself
This takes ten seconds and makes the format much less abstract:
cp model.3mf model.zip
unzip model.zipYou will get something like:
[Content_Types].xml what kind of part each file is
_rels/.rels which file is the entry point
3D/3dmodel.model the actual XML: units, vertices, triangles, objects
Metadata/ thumbnails, and often the slicer's own settingsOpen 3D/3dmodel.model in an editor and you can read the vertex list directly.
That Metadata/ folder is why PrusaSlicer and Bambu Studio use 3MF as their
project format: they save the model and their print settings into one file. It
is also why a 3MF someone shares from a slicer may carry plate layout and
profiles you did not expect — useful when you wanted exactly that, confusing
when you only wanted the shape.
Which one should you send?
Send 3MF when you can. It carries units, survives multi-part assemblies, and is what modern slicers want.
Send STL when the other end is old or unknown. A print service with a dated pipeline, a piece of firmware, an online tool from 2014 — STL is the format nothing refuses. That universality is the entire reason it is still here.
There is no quality difference in the geometry. Both store the same triangles at the same precision. Converting between them does not degrade the mesh.
Converting between them
Going 3MF to STL is lossy in one direction only: the triangles convert exactly, and the colour, materials, unit declaration and separate-object structure are dropped, because STL has nowhere to put them. If the 3MF held several objects, they arrive merged into one mesh in their original positions.
Going STL to 3MF loses nothing, because an STL had nothing extra to lose. What it gains is a declared unit, which is worth having.
One honest limitation of our own converter: the 3MF it writes contains geometry and a millimetre unit declaration, and no materials. So if you convert a coloured GLB to 3MF expecting the colour to survive, it will not — the format supports it, our writer does not do it yet. For geometry and correct scale it is exactly right.
If you want to check a file before converting it, both formats open in the browser: 3MF viewer, STL viewer. Nothing is uploaded in either case.

