3MF against STL
STL carries triangles. 3MF carries the same triangles plus units, colour, per-object settings, plate placement and object names. On the file below it is smaller too.
How much bigger is the STL, really?
Take the sample file preslice ships, preslice-logo-a1-0.5.3mf. It holds eight
objects totalling 1,784 triangles, and it is 58,448 bytes on disk.
Binary STL is a fixed size: an 84-byte header, then exactly 50 bytes per
triangle. So the same geometry as STL is 84 + 50 x 1784 = 89,284 bytes.
And STL has no concept of a second object, so eight objects means eight files:
8 x 84 + 50 x 1784 = 89,872 bytes across eight of them.
The 3MF is 35% smaller and carries more:
| This .3mf | The same geometry as STL | |
|---|---|---|
| Bytes | 58,448 in one file | 89,872 across eight |
| Triangles | 1,784 | 1,784 |
| Objects | 8, each named and placed | 8 files, no placement |
| Units | unit="millimeter" on the model |
none |
| Print settings | 51,689 bytes of them | none |
| Plate preview | four PNGs | none |
The reason is compression. The model XML is verbose text, and it deflates roughly five to one; STL's binary floats do not compress much because there is no redundancy in them.
What does STL throw away?
Everything that is not a triangle. Each one is something you notice missing later.
An STL is bare numbers, so whether a 25 means millimetres or inches is a
convention between two programs, not a fact in the file. A 3MF states it on the
model element: unit="millimeter".
One STL is one soup of triangles, so two parts in one file cannot be told from one part in two pieces. A 3MF gives each object an id, a mesh and a name, which is how the eight objects above stay eight.
Placement goes too. A 3MF build item carries a transform, so a plate laid out in the slicer reopens laid out. An STL has an implicit origin and nothing else, which is why a multi-part print comes back stacked at the centre.
Colour and material have nowhere to go in an STL. A 3MF binds them to an object, or to individual triangles, through its materials extension.
And the print settings, which are the whole reason a project .3mf exists.
Reopening one restores the profile it was sliced with. Reopening an STL restores
a shape.
Where does STL still win?
Universal support, and it is not close. Every slicer, every mesh tool, and every piece of thirty-year-old CAD reads STL. If a file has to open in something you cannot name in advance, STL opens.
It is also easy to read from code. A binary STL reader is about fifteen lines: read the count, then loop over fifty-byte records. Reading a 3MF properly means unzipping it, parsing XML, following the OPC relationships and multiplying the transforms, which is why lib3mf exists.
And for a single unpainted part at a known scale, STL loses nothing you had.
Is 3MF an actual standard?
Yes. It is published by the 3MF Consortium as the 3MF Core Specification and standardised as ISO/IEC 25422:2025. STL has no standard. It dates from 1987, it has two incompatible encodings (ASCII and binary), and readers disagree about the edges.
Can I see the difference in my own file?
Open a .3mf in preslice and the Content tab shows what an STL of the same model would not have carried: the object names, the transforms, the filament in each slot, and the settings it was sliced with.