The most common and universal file format for 3D printing is STL. It was released in 1987 and it’s dead simple. An STL file describes a raw, unstructured, triangulated surface. It doesn’t contain any scale, color or material information. There is no validation, it’s just a bunch of triangles, so it doesn’t prevent you from accidentally creating holes, non-manifold edges, flipped normals, or self-intersecting models. It’s good enough most of the time, but isn’t there a newer, better file format that we could use for 3D printing?
Meet 3MF – a new open-source file format designed specifically for additive manufacturing.
What is 3MF and who created it?
3MF, also called 3D Manufacturing Format is an open-source project developed by the 3MF consortium founded by Microsoft. Nowadays, it includes well-known names such as Autodesk, Dassault Systèmes, Ultimaker and more (see 3mf.io to find out more). The 3MF consortium’s main goal is to create an XML-based platform capable of containing a 3D model with a comprehensive package of information that cannot be saved within a simple STL file.
What can be stored in a .3mf file?
The 3MF file format uses the same compression as a ZIP archive – you can actually rename the extension to .zip, simply unpack it and work with the contents. Aside from the 3D model itself, 3MF files can hold:
- More than one object in the scene
- Complete PrusaSlicer setup including:
- Printer profile
- Manually created supports
- Variable layer height settings
- Modificators
- Scene units (STL objects are proportionless)
- Color and texture information
- Thumbnail (Can be changed to a photorealistic render, for example)
Furthermore, 3MF provides a clear definition of manifoldness — it’s impossible to create a 3MF file with non-manifold edges, and there is no ambiguity for models with self-intersections. This helps to prevent errors in printed models.
Single objects can be referenced or moved without changing the mesh, and multiple identical objects can be placed referencing the same mesh. Where STL would make a copy of every triangle for every copy of a mesh, 3MF simply notes that this object has a new instance and saves its location.
In short, this file can hold pretty much all information about the model (scene) including the individual configuration made in your slicer. This means that your model (the whole scene with a configuration) can be easily saved and shared with others, saving a huge chunk of time, because you don’t have to go through the pre-slicing setup every time you import the model.
When we introduced our new PrusaSlicer 2.0 and launched the new PrusaPrinters community hub, some people asked us why we prefer sharing the models in 3MF format over AMF. It’s simple: the 3MF specification is newer and unambiguous, and it’s available for free. Also, 3MF files are supported by Cura and Microsoft 3D builder (among other apps). On the other hand, AMF is ambiguous and the specification is only available for a fee. AMF files were never properly supported by any software of which we are aware. At best, AMF files were used to the same extent as STLs, meaning that the AMF only carried a single mesh without any additional attributes. With that said, PrusaSlicer can still load AMF if you want to use it for whatever reason.
3MF and PrusaSlicer
PrusaSlicer and several other slicer programs support using 3MF files. Plus, our PrusaSlicer uses 3MF as a default format for saving projects (File – Save Project). These files can contain custom-made supports, basic and advanced printer settings, variable layer height information, modifiers, the position of contained models and lots of other details, which makes it an ideal format for sharing.
The 3MF archive also makes it possible to save colors for multi-part models prepared for Multi-Material Upgrade printing. Multi-part models can be saved in a .3mf file as an object, which consists of several parts – each with its own color, materials, etc. STL files, on the other hand, do not offer this level of comfort; the model must be split into several separate files with no information about color and materials at all.
Here’s a small example of how a 3MF project can help when printing with the Original Prusa SL1 printer: Let’s say you would like to print one of our H0 trains with a resin that doesn’t have a profile in PrusaSlicer. It is necessary to enter the material exposition values and add all the support points manually. Why manually? Train models usually feature a number of tiny details, so an individual approach is preferred: you need to place supports carefully, adjust the size of support heads, etc. It’s obvious that this requires a lot of time. If you don’t save the project, you’ll end up with .stl and .sl1 files. STL doesn’t hold any configuration and SL1 cannot be further edited. So if you find a flaw, e.g. an insufficient number of supports, you’ll have to start all over again. If you save your project as a .3MF file, you can open it again later and fix everything you forgot the first time.
All of this is why you can upload not only .STL and .GCODE to PrusaPrinters.org, but also 3MF files. You will save other people a lot of work and provide them with the best settings you came up with, while still giving them the option to modify your data.
Give it a try!
Let’s sum it up: The .3MF file is a very useful improvement that can save us a lot of work and time thanks to the ability to save the model along with valuable information that cannot be held by other files (STL, OBJ, GCODE…). Due to its open-source nature and support provided by large companies, the 3MF file format has great potential in the 3D printing world (and several other 3D manufacturing sectors). Poor compatibility among various slicing programs can be considered a slight disadvantage: the print settings saved to a 3MF file by one program and opened in another will not be converted properly (or at all) and must be set manually.
However, at least the 3D model itself can be exported using a supported slicer (PrusaSlicer, Cura, Simplify3D, IdeaMaker, etc.). Luckily, the 3MF is open-source and supervised by the 3MF Consortium, so there is plenty of room for further development of the specification. Try to use the 3MF files for saving and sharing data and let us know how you like this simple, yet useful improvement.
I really like the fact that I can save all the settings that I have used in my slicer and tweak them later, but as long as it is not 3D Printer and slicer agnostic, I do not think that is the future.
It is 3D printer and Slicer agnostic…
You could load this into CURA and say a Ultimaker… it’ll load but you have to move things around to fit the new plater…
and it won’t use ALL the settings that Prusaslicer can such as colour or detail Layer settings.
Hi! great post!
Thinking of many years of STL files stored, is there tool to batch convert STLs to 3MF files?
Spin 3D Mesh Converter from NCH Software seems to have batch convert capability from .STL to .3MF (among other formats). It’s free for Windows.
I’m all for a better format, but we need support from the CAD software. Fusion360 has support via a plugin, but the reviews aren’t great.
Autodesk netfabb has support for it as well as Catia, Cura, Siemens NX, Materialise Magics and others. The format is quite new, so I believe more vendors will follow.
Right, 3MF is at least 4 years old, most modern-day CAD products support import and export of the format, some slicers even support the import for 3D Printing.
So It’s shame that it cannot contain the CGODE too… So you have a single working file for your projects. and don’t have to export to GCODE.
I understand that 3MF is a wrapper so there is probably no reason why it can’t have that too.
I currently work with Hundreds of stl objects and export them in scores of CGODE…
Prusaslicer 2 with undo and 3mf saving makes the world a lot better… but I’d still like to remove the GCODE aspect.
Slice then save and the machine code is contained in the 3MF – could even have multiple Printer profiles!
3MF documents can contain slice information: https://github.com/3MFConsortium/spec_slice/blob/master/3MF%20Slice%20Extension.md#chapter-1-introduction
Until the printers are smart enough to understand 3mf files we are stuck with also having gcode files. The printers are quite dumb.
As someone who has had to deal with XML, I’d suggest that XML is a poor choice for a base format– it is terribly space and time inefficient.
I really hope that we have a translation of the data/schema represented with 3MF that is not anywhere near as horrible as XML.
3MF is basically a zipped XML. So it’s small on disc, yet human readable if unpacked.
Amen. It’s a royal pain to deal with deal with. (half of java programming these days seems to a game of juggling XML configurations – ). XML does it feel its age, decades.
In defense of its use, it is far more definitive JSON or JSON schema even (both I personally greatly prefer) and even clearer formats as say AVRO. XML is pedantic, visually a pain to parse, flat ugly to look at … but when done well the result is one knows what they have and what the pieces truly mean including precision and accuracy, both a challenge with JSON (and JSON Schema) though not the case with AVRO and its ilk.
So, while we all may want to collectively hurl at the thought of XML, when it comes to a flexible format with the ability to type with precision and accuracy it was the right choice.
(as an aside, XML didn’t come from M$, not even remotely.. nor did any of ‘zip’ formats. By the time XML showed up at W3c in mid-90s it was already somewhat well-known as it was a -believe it or not- a greatly simplified and ‘understandable’ variant of SGML -YIKES!-)
And, even ignoring the whole encoding religion, the improvements brought by 3MF are so worth it.
That's interesting, If source file is smaller likely the archive would be too.
Why 3MF chose zip Deflate as the archive?
7Zip ZSTD is quicker at the same compression 🗜️ ratio or smaller at the same speed 🙂
Also it should add support for JXL and AVIF in a new version 🙂
Welcome to 2015
PrusaSlicer 2.1 doesn’t allow .3MF files as custom print bed models.
Yet the forums don’t support 3mf files. >:-(
We who frequent the forums have to ask people who are asking for help to zip their 3mf files so we can see what settings they are using to try to figure out what their problems might be.
As you say above: “The 3MF file format uses the same compression as a ZIP archive – you can actually rename the extension to .zip, simply unpack it and work with the contents.”
So, yeah… We are asking people to zip a zip file. If you guys are trying to save storage space for forum resources, zipping a zip file will make a larger file…
Actually, there are multiple XML files inside the ZIP packaging. Microsoft calls this the Open Packaging Convention.
How does this relate to my complaint about the lack of 3mf support on the forums? (It’s a simple filename filter, as someone recently demonstrated by sucessfully uploading a 3mf file after changing the extension to zip…)
Or did you intend to respond to alexander.bockspam, above?
So when will Prusa’s official printable parts be available in 3MF? They’re still only available as .STL and .GCODE now.
One problem I have with using 3MF files with Prusa slicer is that the file comes in named “bodyxxxyyy” instead of the part name like with STLs.
So, when you go to save the Gcode, you have to type the part name in again.
Why is that?
Can someone recommend FOSS 3D modeling/CAD software that supports 3MF?
From my perspective, it is another Microsoft abomination. Their office files are renamed zips that help support the storage industry. XML is the bane of most programmer’s life, except for Enterprise Java programmers who have virtually unlimited resources. Most modern programming leans more towards JSON as a compressable interchange format. It seems to me a good idea, not well executed.
Hi there,
With the last version of slicer, I could export an Amf file for Thingiverse, which doesn’t support 3mf as yet (at least, it doesn’t seem to display them).
Now, that export doesn’t appear to be possible.
Am I missing something, or have you removed that support?
Thanks
01Pad
Jesus came in clouds to usher in the New Covenant and give us the Holy Spirit. He is the fulfillment of all prophecies. He came as a baby in a manger, was born of a woman and was baptized by John the Baptist. He went about doing good and healing all who were sick, blind or lame. He taught about God’s love for us and how we must live for Him. Additionally, jesus coming in the clouds also told us that if we loved Him with all our hearts, minds, souls and strength then we would be like Him because His Father loved Him first before all others (John 5:19). The Bible tells us that Jesus came to bring life eternal into this world (John 3:16). He told us how to pray and how to receive His forgiveness for our sins. He forgave us when we confessed our sins to Him.