At the end of March 2024, we started shipping the MMU3 for the Original Prusa MK4 (and MK3.9). This also marked the end of a long in-house testing period in which the MMU3 proved to withstand thousands upon thousands of filament changes on the MK4. The MK3S+ version has been shipping since July 2023 and keeps going strong.

Right now, the MMU3 for all supported printers is available, most versions are in stock and we’re pushing down the leadtimes on the MK4 variant every day (see the shipping table for details). We’re happy to see that many ambitious prints are popping up on Reddit all the time – 150+ hour prints without a single intervention are nothing rare these days. 🙂

Before we jump in – all model links are at the end of the article!

MMU3 – fast and efficient

There are a number of reasons why we stick to the same concept of the multi-material unit.

First of all, it’s an incredibly simple mechanism – you can easily build the entire unit at home (or upgrade the previous version), maintenance is a breeze because you can get inside the unit quickly and clean any plastic debris, etc. For this purpose, we have improved several parts of the unit, so you can now, e.g., adjust its tilt in two steps for more convenient access. However, in general, most parts were redesigned and reinforced with metal parts. We would like to thank the 3D printing community for pointing us in the right direction with valuable feedback and user mods – check out our earlier article to learn more about the hardware changes!

The MMU3’s design also allows for very fast filament changes – they average between 35 to 45 seconds depending on the purging values set in PrusaSlicer. With easily thousands of filament changes during a single multi-material print, this shaves off a considerable amount of time from the print job and the only faster solution is the XL.

Another thing the MMU3 unit enables is multi-material printing with manageable waste. Instead of cutting and flushing excessive amounts of filament, the MMU3 uses a compact, semi-hollow waste tower. The size of the wipe tower can be further reduced by using wipe-to-object or wipe-to-infill options which purge the leftover material in the nozzle – either way, you don’t have to worry about pieces of plastic piling next to your printer.

So while the unit may look similar to its predecessor, the experience is very different, also thanks to a completely reworked firmware – we decided to share the entire process of developing the new version below in case you don’t believe me. 😉 With full two-way communication between the two boards, it’s much easier to configure and run multi-material prints. The color touchscreen on the MK3.5/MK4 gives you additional options, such as the ability to quickly remap filaments or set up SpoolJoin functionality for depleting leftover filament from nearly empty filament spools.

Last but not least, we decided to keep the design similar to the MMU2S so if you want to upgrade your older unit, it’s easy and cheap to do. And you can, of course, flash the MMU3 firmware to your MMU2S unit to improve its performance without replacing any parts.

MMU3 for the MK4

Now, the obvious question is: why did it take longer to release the MMU3 for the MK4 when the other versions have been out since mid-2023?

We’ve covered this extensively in our blog posts, so just briefly: we had a fully working MMU3 for the MK4 ready for shipping around April 2023 and we were waiting for our production capacity to free up a little bit – so the MMU3 was scheduled for June 2023. However, when Summer got closer and temperatures started rising, we noticed a sudden drop in its reliability (MMU3+MK4). Why did the MK3S+ work without an issue and the MK4 struggled? The cause lies in the different extrusion and hotend systems. We had a perfectly working combo up until that point and suddenly, we were back in square one.

So, we set up a testing farm and started developing a solution immediately. As we described previously, with the MMU, you’re looking at prints that easily take over 30 print hours which makes any sort of testing more time-consuming.

The cause of the issue was hidden in the tips of the filament – once you unload a filament from the extruder, the tip must be absolutely perfect. However, in our case, unloaded filaments often had a long thin wisp of plastic at the end which caused issues in the tightly-designed Nextruder. We have described it extensively in our previous updates (October 2023 and January 2024).

An extreme case of the filament string forming on the tip

We ended the last one with a statement that most of the issues on the MK4 are caused by filament not going smoothly through the extruder and into the filament guide. This brings me to…

The Nextruder Main Plate

To get the frequent filament (un)loading to the required level of reliability, we had to adjust the “Main Plate” part in the Nextruder and this is why it is also included in the MMU3 package. We have also redesigned the filament unloading process, making it more efficient and much faster!

When you use the MK4 in the usual way and even change filaments several times a day, the Main Plate part will barely show any signs of wear even after a prolonged time. However, multi-colored prints can easily perform thousands of filament changes during a single print – without the MMU, it would probably take you many, many years of frequent printing to get to this number of filament changes. With so many filament changes during multi-material prints, the Main Plate may show signs of wear depending on how heavily you use the MMU.

The part we include with the MMU has been printed with Multi Jet Fusion to make it longer-lasting. However, it still needs to be treated as a consumable as it will wear out over time. The printer keeps track of filament changes and will notify you when the expected lifespan of this part is near the end, or if the filament loading procedure became less reliable due to excessive wear. According to our in-house testing, the MJF part lasts about 80.000 filament changes and then needs replacing (it takes about 10 minutes to replace it). We’ve tested this part extensively in-house and if you experience issues sooner than expected, it’s probably caused by something else. Please feel free to contact our support team for assistance.

As a short-term solution, you can print the part from PETG – the STL file is available at However, the lifespan will be noticeably shorter.

Road to MMU3

Back in late 2021 / early 2022, our firmware lead David started assembling a list of features for a new MMU2S firmware. Originally, the only goal was to show proper status messages on the printer’s screen, should the MMU encounter an issue. From there, it evolved into a whole new project aiming to add full two-way communication, proper status messages, and many other features to make the unit much less prone to assembly-related issues. We realized that assembling the MMU required way too much patience to ensure everything was PERFECTLY aligned. This was never an issue with our 3D printers (as many people online say “the assembly kit just works”), so the situation with the MMU was somewhat unexpected – and the users voiced their frustration very strongly.

There’s usually no need to go online and say “Everything’s fine.” You go online to look for troubleshooting help. As questions about the MMU2 and requests for help started to appear, it created a sense that MMU2S doesn’t work – at all. However, most users had no major trouble with multi-material printing. Also, when various community mods/fixes started to appear, they had varying degrees of success – exactly because it was too difficult to assemble the MMU with high precision, so the cause of the issue was often in various places. We took these comments very seriously. Also, we reached out to all MMU2S owners with information on how they can improve their units with new firmware and offered ways to compensate for the issues during assembly.

Firmware to the rescue

We analyzed the situation thoroughly, going over user posts on social media, videos, reviews, modifications, and, of course, tech support reports. Originally, we wanted to rework the firmware to make it more user-friendly because the unit used a simple, yet somewhat cryptic, system of five LEDs to communicate with the user. This was one of the things that helped create the confusion on social media. “Oh no, my first and third LEDs are flashing! What does it mean?” It made dealing with common print issues way too difficult. It would make more sense if the printer could tell you “Something blocks the rotation of the idler, please check the following:” instead of blinking the LEDs.


Needless to say, the firmware for the MMU2 was developed in a tiny team many years ago and things changed a lot in the company over the past several years. So, David set out to improve the existing codebase, but what seemed like a simple firmware update at first, turned out to be a whole new project that ended up with the introduction of the MMU3. Instead of augmenting the old code, the existing codebase went out of the window and the new firmware started completely from scratch. The complete overwork of the codebase led to a massive improvement in overall performance – which is not always the case in software development. 😉

During the span of two months, the proposal for a brand-new firmware architecture was completed. Initially, we considered Arduino IDE, but this was later dropped because it didn’t allow us everything we planned.

The firmware is built on three layers:

  • HAL – Hardware Abstraction Layer – allows access to timers, watchdogs, EEPROM, USART and more
  • Modules – unit component abstraction – buttons, FINDA sensor, Fsensor, Idler, LEDs, Fully-featured stepper engine, permanent storage, protocols, pulley, selector, serial, timing, USB CDC, user input
  • Application Logic – function logic, such as Cut, Eject, Home, HW sanity check, filament loading, unload and more

One of the things that hindered the previous firmware (which had its roots in 2017) was that it was written as a synchronous code which basically ruled out any updating of the printer while the MMU was performing an action. Before the MMU could react to any new input or situation, it had to complete a certain cycle. Moreover, it didn’t really know what was happening with the printer. It only kept receiving commands which were then carried out. With the new architecture, this is no longer the case. Everything operates as a state machine in parallel all the time and both the printer and the MMU always communicate with each other, sharing real-time information. This way, the system can resolve many situations that would otherwise cause the “MMU needs user attention” messages. Filament loading failed? Let’s try loading it again automatically. Good, it works now, carry on.


This was all done on a simple ATMega 32U4 chip. Because it’s not viable to run an embedded OS with multitasking on it due to limited resources, we had to make one ourselves. Well, it’s not “real” multitasking, it’s rather a smart architecture that ensures no component can ever block others so that everything keeps running all the time.

Unit testing and integration

David and his team spent months developing the firmware just by using unit testing (software-only testing of small parts of the code) and they always checked whether avr-gcc can compile the code. The only parts of physical testing were done with partial HAL components implementation. Once the development was in later stages, the dev team finally uploaded the firmware into the MMU2S board – and it worked beautifully, proving the test-driven development approach valid in its pure form.

An essential part of the new firmware was the implementation of proper error messages – this also meant preparing the other side (the printer) for communication. With two different firmware branches (MK3S+ with the Einsy board and the 32-bit MK4 with the xBuddy board), there was some extra work to do.

In the end, we use state machines here, too. The printer is the control device and the MMU only responds to commands (but this time, it can also “report back”). It only makes sense that the more powerful CPU in the printer controls the communication, requests and more. Above this communication protocol is one additional layer that connects the protocol with Marlin firmware. This is where we wanted to keep the top-level API, but everything else was thrown out and completely rewritten.

This was an incredible amount of work, but in the end, it was worth it. The communication between the two devices runs smoothly and the entire experience is virtually seamless.

And then the hardware team had a couple of ideas.

Adjust it here, adjust it there…

We have already mentioned that community-made modifications were an important indicator that helped us focus on crucial areas.

With the work on the new firmware underway, our hardware development team looked at the MMU unit and decided to improve a few parts here, a few parts there – and eventually, they redesigned the majority of components save for the electronics. Again, more details can be found in the previous blog entry.

Meanwhile, the firmware team decided to add one more component to the codebase. A pretty big one: registry support. Or to be more specific: runtime MMU parametrization, similar to a MODBUS registry system. There was even an attempt to use full MODBUS, however, due to limited resources on the MK3S+, this was dropped in favor of a modified version of the MMU protocol. It now adds 35 registry entries (1-byte and 2-byte), some are read-only, others are read/write, and some are persistent in the EEPROM. This gives us a whole host of new options, including new G-codes M707 and M708 to read/write registry entries. For example, this allows to configure the speed of filament loading before every filament change. Also, each printer parametrizes its MMU at the start – which allows us to have just one MMU firmware for all supported printer models.

More power is not always better

When the MMU3 loads filament into the extruder, it’s a rather simple operation. The idler rotates, applies pressure onto the string of filament and presses it against the feed gear. The gear starts rotating, pushing the filament through the selector and the PTFE tube into the extruder.

Our initial idea was that we need as much pressure as possible. I mean – why not? You need to push the filament through the PTFE tube, you don’t want the filament to slip or lose steps. But that’s actually not the case. The movement of the filament is checked by the two filament sensors (in the MMU and in the printer), so it doesn’t really matter if the motor loses some steps. And it doesn’t have to run on full power either.

This helps avoid creating dents in the filament string where a too-powerful drive would shave off material from the filament string, preventing it from being pushed forward by the gear. If you watched Top Gear, you can probably remember Jeremy Clarkson screaming “POWAAHH!” during a massive burnout which usually narrowly avoided a disaster – this is similar. Excessive horsepower is useless when the wheels cannot transfer torque onto the road. Less current going into the motor means that if the filament becomes stuck somewhere, the motor won’t grind the material away and cause more issues half an hour later when this part of the filament gets into the extruder. When the MMU runs out of the pre-set stepping range/length, it shows an error anyway. But the piece of filament can be reused (not thrown away).

Also, unlike the printer, the old MMU firmware lacked a proper dedicated stepper and planner engine. This made the unit more noisy than it had to be, plus it was almost impossible to control accelerations other than by changing the code. With the new firmware, this is no longer the case. There’s a full stepper and planner engine that manages 3 axes at the same time, including acceleration ramps. This allows us to control the speeds and accelerations of all motors dynamically at runtime. Plus, we changed the way the TMC2130 drivers perform homing (we now measure the axes’ length) which also helps to make the unit more quiet and reliable.

There are more things behind the MMU3 firmware, but they are even more nerdy than what was just explained. Maybe some other time. 🙂

Colored prints with less waste and more comfort

So, this sums up the current state of the MMU3. The unit is available for all supported printer models, it works exceptionally well and you can achieve some really impressive results with minimal hassle.

We’re chewing through the backlog of MMU3 orders faster than we expected, so if you don’t have your unit yet, it’s gonna be on the way real soon. And if you’re already printing with multiple filaments, do share your prints! We can’t wait to see them!

Happy printing!


Model links: