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.