Trad Rack: a multimaterial system for FFF printers built around one-screw modules
A MMU system developed by ANNEX Engineering
At a glance
- What is it?
- Trad Rack is a multimaterial unit for FFF printers from Annex Engineering, and its design bet is that adding a filament lane should cost one printed module and one screw rather than a new drive train. The trade-off is that it is a mechanical design repository, licensed under a custom licence, with a single tagged release and no software package to install.
- Who is it for?
- Adopt Trad Rack if you are running an FFF printer, want multimaterial printing, and are comfortable sourcing parts, printing modules and cutting your own extrusion and rail to length, since the scalability argument rests on a single shared drive gear and a module held by one screw.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 170 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 24, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What Trad Rack is: a printer accessory, not a printer
Trad Rack is a multimaterial system for FFF printers with a focus on scalability at low cost, developed by Ryan G and the team at Annex Engineering. That framing is worth pausing on. FFF means fused filament fabrication, and a multimaterial unit is the box that sits beside the machine and hands the correct filament to the hotend when a print needs it. Trad Rack is that box, and it is not a printer, a firmware project or a slicer plugin.
The repository reflects that. The top level is dominated by design data rather than source: CAD/ for the model files, STLs/ for the printable parts, eDrawings/ for drawings, PCBs/ for board designs, Slicer_Config/ and Slicer_Scripts/ for print preparation, Sourcing/ for the parts list, Images/ for renders and photos, and docs/ for the written documentation. There is a directory named Kalico/, and the repository's primary language is recorded as Python, but the bulk of what you would actually use here is mechanical.
Demonstrations are linked from the README, a toolchange and print timelapse announced as a closed beta, and a standalone demo presented as an MRRF 2022 preview. A Discord server is linked as the place the community sits. So the project is best read as an open hardware design that is still being iterated on, shared by the people building it, with a community rather than a company support desk behind it.
One 2020 extrusion frame, an MGN9 rail, and a pivoting arm
The stats section lists the core mechanical decisions, and each one is a specific, checkable choice.
The frame is a single 2020 extrusion, so the unit is built around one aluminium profile rather than a plate-and-bracket frame. Selector movement runs on an MGN9 rail with either 6mm or 9mm 2GT belt, which gives the choice of belt width depending on how many lanes and how much load the build carries. A NEMA17 motor drives that selector movement.
The interesting mechanism is the filament drive. Rather than driving the filament directly, a pivoting arm on the selector lowers a hobbed gear onto the filament, and that arm is indirectly coupled to a servo through a spring. The spring is the point: the servo does not have to hold the gear at a precise position, it only has to overcome the spring, so the gear engagement can be compliant rather than rigid.
Filament movement has its own motor, and here the spec offers a choice between a NEMA17 and a 36mm round NEMA14 motor. The round NEMA14 is the shorter, lower-profile option, which matters in a unit that has to sit next to a printer frame.
Putting those together: a NEMA17 moves the selector along the rail to the lane you want, a servo-coupled pivoting arm presses a hobbed gear down onto that lane's filament, and a separate motor pushes the filament through. The whole assembly is driven by a selector position and a lane engagement, not by a separate drive train per lane.
The scalability argument: one shared drive gear pair, one module per lane
The stated main focus is allowing additional filament lanes to be added at the lowest possible cost and in the least assembly or disassembly. The mechanism that achieves it is structural.
Rather than using a separate drive gear, or a drive gear pair, for each filament lane, Trad Rack uses a single drive gear pair mounted to the selector for the entire unit. One module is required for each filament lane, and modules can be attached or detached with a single screw. So the cost of the second lane is the cost of the third lane, and removing a lane does not disturb the others.
The parts list for one module is short, and it is a real part list rather than a description:
1X printed module body
1X 623 bearing
1X M3x8 screw
1X M5x10 screw
1X M5 T-nut
1X bowden fittingOne printed body, one 623 bearing, three fasteners and a bowden fitting. The printed body is the part you produce yourself, which is what makes the low cost claim work: the expensive-per-lane element in a conventional design, a dedicated drive gear, is replaced by a small printed part that carries a standard bearing and a standard screw.
There is one constraint that scales with the design. The extrusion, rail and belt must be long enough to support the selected number of filament lanes, but they can be oversized in order to allow for additional modules to be added later. Buying long parts up front is the hedge, and it is the decision that determines whether the modularity is worth anything to you.
Where the design came from: Prusa MMU2 for the concept, SMuFF for the servo
The acknowledgments section names two projects and, more usefully, says what it took from each.
The main filament-switching concept is inspired by the Prusa MMU2. That is the general approach of a unit that selects between multiple filament paths and feeds the chosen one to the extruder, and Trad Rack is openly a variation on it rather than a from-scratch mechanism. The idea to use a servo to engage and disengage with each filament is inspired by the SMuFF, inspired by the SMuFF.
Read together, those two credits explain the design. The switching concept comes from the shared-selector lineage, and the engagement mechanism is a servo-based design credited to a different project.
The distinction from the projects it draws on is then the module and the shared gear pair. A unit that needs a dedicated drive gear for every lane scales in cost and in part count. Trad Rack scales in module count, where the module is a printed body with a bearing in it, and in screw count, where the cost of adding a lane is one screw.
That comparison also frames when Trad Rack is the wrong choice. If your existing printer already has a working multimaterial unit, the argument for switching is about future lane count and part cost, not about a defect in what you have. And a shared selector means a single point of failure for all lanes, where a per-lane design keeps a jam in one lane from affecting the rest.
Assembly detail is delegated to the Quick Start document
The getting started section is short. It points to the Quick Start document at docs/Quick_Start.md, and says you can continue reading below for more general information on Trad Rack. That is the whole instruction, and it is a meaningful signal about the shape of the project.
What is not in the repository root is a wiring diagram you can follow from the README, a firmware configuration you can copy, or a BOM you can order from directly. The Sourcing/ directory and the Print_Settings_and_File_Key.txt file at the root are where the parts and print parameters live, and the Slicer_Config/ and Slicer_Scripts/ directories are what you would use to produce the printed parts. The Kalico/ directory is present in the tree as well.
This is a common shape for open hardware, and it has consequences for anyone evaluating it. There is no package to install and no version of firmware to pin, so the adoption cost is measured in sourcing and assembly time rather than in setup commands. If you are comfortable with mechanical assembly, that is a reasonable trade. If you wanted a plug-in multimaterial box, this is not that.
The project also states its design intent as low cost and scalability, which tells you where the effort has gone. There is no section on enclosure design, cable routing, active cooling, or how the unit interfaces with a particular printer's control board, so treat those as your own engineering problems rather than documented answers.
A custom licence, one tagged release, and pushes that stopped in May 2026
The licence deserves attention before anything else, because it is not one of the standard permissive licences. It is recorded as a custom licence that GitHub cannot classify, with the LICENSE.md file at the repository root as the authoritative text. That means you need to read that file yourself to find out what you are allowed to do with the design, and it is exactly the kind of detail that a quick evaluation of a repository tends to skip.
On the release history, there is a single tag, R1, published on 2024-03-04. The repository is not archived, and the last push was on 2026-05-07, so work has continued well after that tag without a new named release. Treat the R1 tag as a marker rather than as a version of record, and work from the current state of the repository.
The project is a community open hardware effort rather than a commercial product line. Annex Engineering is credited as the developer, and the Discord server is the visible gathering point, with no support contract or warranty implied by anything in the repository.
What you get for that is a design that several people have built from and iterated on, with the modularity claim resting on parts counts and screw counts you can verify against the module list. What you do not get is a guarantee, a schedule or a support commitment, so plan on sourcing parts yourself and reading the Quick Start document before you cut extrusion.
Editorial conclusion
Adopt Trad Rack if you are running an FFF printer, want multimaterial printing, and are comfortable sourcing parts, printing modules and cutting your own extrusion and rail to length, since the scalability argument rests on a single shared drive gear and a module held by one screw. Do not adopt it expecting a finished product with a support channel, because this is a design repository with one tagged release, R1, and a custom licence whose terms you need to read in the LICENSE.md file before use. Before you commit, check the length requirement for the extrusion, rail and belt against the number of lanes you want, and read the Quick Start document in the docs/ directory, because the README itself defers assembly detail to it.
Frequently asked questions
How do I add another filament lane to Trad Rack?
Attach or detach a module with one screw. Trad Rack uses a single drive gear pair mounted to the selector for the whole unit, so each extra lane needs only one module, and the extrusion, rail and belt must already be long enough for the number of lanes you want.
What parts does one Trad Rack filament module need?
One printed module body, one 623 bearing, one M3x8 screw, one M5x10 screw, one M5 T-nut and one bowden fitting.
Which motors does the Trad Rack selector use?
A NEMA17 motor for selector movement along the MGN9 rail, and either a NEMA17 or a 36mm round NEMA14 motor for filament movement. The selector can use either 6mm or 9mm 2GT belt.
How does Trad Rack engage the filament without a motor per lane?
A pivoting arm on the selector lowers a hobbed gear onto the filament, and that arm is indirectly coupled to a servo through a spring. The idea to use a servo to engage and disengage with each filament is credited to the SMuFF in the acknowledgments.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/annex-engineering-tradrack)Was this useful?