Klipper print farm: running many printers through Moonraker
Updated 31 October 2026
A Klipper print farm works because every printer exposes the same Moonraker API, so one tool can drive Vorons, Rat Rigs and anything else running it. Mainsail and Fluidd can already show several printers. What we did not find in their documentation is the farm part: choosing which printer runs the next job.
A note on our experience. We print motorcycle parts for our shop Revsticks in Thun on seven printers, and none is a Voron or a Rat Rig. Four are Bambus, and the one we control through Moonraker is an Anycubic Kobra S1 with Rinkhals firmware. So we know Klipper from one machine type, not from a room of them.
Why one tab per printer stops scaling
The tabs are the smaller problem, and they are partly solved. Mainsail lets you switch between Klipper instances and has a print farm overview. Its json printer list is "Recommended for Farms", because the default Moonraker-stored list "becomes impractical for printer farms". Fluidd can "manage multiple printers from one Fluidd install".
What doesn't scale is the decision behind each click. Which idle printer has a 0.4 mm nozzle and black PETG? Is there enough on that spool for a nine-hour plate? Has the last plate come off? You answer those once per print, in your head.
Starting prints on our seven took about 45 minutes every morning.
What Moonraker gives you, and what it doesn't
Moonraker is the API server next to Klipper. It listens on port 7125 by default.
| Moonraker provides | Where |
|---|---|
| Print state, progress, temperatures, Klipper's last error | /printer/objects/query |
| Upload a file and start it in one request | /server/files/upload with print=true |
| Pause, resume, cancel | /printer/print/pause, /resume, /cancel |
| A job queue for one instance | FIFO, per its docs |
| Filament usage sent to Spoolman, if you run it | [spoolman] section |
Two things are missing for a farm. The job queue's documentation describes an ordered list and says nothing about choosing between printers. And unless you add Spoolman, nothing in this table says what spool is loaded.
The options
All of these use Moonraker. We read their own pages on 31 October 2026. We didn't run the others ourselves, so their claims are theirs.
| Tool | What it is | Cost | Who picks the printer |
|---|---|---|---|
| Mainsail, Fluidd | Web interfaces for Klipper | Free | You |
| FDM Monster | Self-hosted farm tool for Moonraker, OctoPrint, PrusaLink and Bambu | Free, AGPL-3.0 | Its docs describe a queue across printers and batch actions. We didn't test how it dispatches. |
| print-farm-manager | Self-hosted, multi-brand, SQLite | Free, MIT | Its scheduler assigns jobs to idle printers |
| SimplyPrint | Hosted, multi-brand | Free for 2 printers, Print Farm $39.99 a month for 10, as listed on 31 October 2026 | Its queue and AutoPrint, by its own description |
| Rackrew | Hosted, with a bridge on your network | Free for 2 printers, Workshop CHF 24 a month for 10 | The router |
What each does well:
- Mainsail and Fluidd are free and local, and you keep them whichever tool you add.
- FDM Monster has over 9,000 commits on GitHub. It covers OctoPrint as well, says it can "control dozens of printers simultaneously", and offers a Raspberry Pi image. Its latest release was 2.1.1 when we looked.
- print-farm-manager asks for a human sign-off on every finished print before the next job. Its release notes say it was "validated in production on a real 52-printer farm". It has no login by design, so keep it on a trusted network.
- SimplyPrint connects through Moonraker's built-in
simplyprintcomponent, with no plugin. It has the most features here, including AI failure detection, filament inventory and maintenance, according to its own pages. If you need those or SSO, start there.
Rackrew is the cheaper hosted option at 10 printers, though that compares CHF with USD. It has no AI failure detection, you can't invite teammates yet, and it isn't self-hosted: files and the queue live with us. If you want everything on your own network, take one of the free tools.
Networking and fixed IP addresses
Reserve an address for every printer in your router on day one. A printer with a new address looks exactly like a dead one. See no Moonraker connection.
For Rackrew, the setup is one bridge in Docker on a Linux computer or Raspberry Pi, on the same network as the printers. Four details matter:
- Reserve the bridge's address too. Every printer's
moonraker.conflists it undertrusted_clients, and a new address means editing them all. A range such as192.168.1.0/24avoids that, but trusted clients get full API access, so keep it to your printer network. - No API key. Our driver connects as a trusted client and sends no key. With
force_logins: Trueit gets refused once a Moonraker user exists. - Port 7125. The dashboard has no port field. Several Klipper instances on one host, or a Rinkhals build on another port, need
portset through the API. - Cable or a strong signal. We allow five minutes for an upload, and we treat ten seconds of silence as offline. A slow Wi-Fi link is the usual cause of large files failing to start.
The full steps, including the camera, are in Klipper / Moonraker setup.
How filament checks work when Klipper doesn't know the spool
Our Moonraker driver reads no filament from the printer, so Rackrew's check rests on two things you can see.
What the file asks for. PrusaSlicer, OrcaSlicer and SuperSlicer write filament_type, filament_colour and filament used [g] as G-code comments. Rackrew reads them when you upload.
What you say is loaded. You register a spool with its net grams and assign it to the printer's slot. Each completed print subtracts the grams its file names.
The router compares the two. Material must match, colour must be the same hex value, and the spool must hold enough grams to finish.
| Situation | What happens |
|---|---|
| Spool assigned, too few grams | That printer is skipped: not enough PLA on slot 0 |
| No spool assigned, file names a filament | That printer is skipped: slot 0 must hold PLA |
| File names no filament, such as from Cura | No filament check at all. The job runs. |
Know these limits before you rely on it:
- It is bookkeeping, not a sensor. If you swap a spool and don't tell Rackrew, it believes the old one is loaded. Failed and cancelled prints aren't subtracted either, so correct from a scale now and then.
- Spoolman isn't connected. Rackrew doesn't read Moonraker's
[spoolman]data, so Spoolman users would keep two records. - The spool form has a fixed list: PLA, PETG, ABS, ASA, TPU, PA and PC. A file asking for PETG-CF can't match a registered spool today.
- Multi-material on Klipper isn't remapped. Unlike Bambu's AMS, our driver uploads the file as it is and sends no slot mapping. We haven't tested a Klipper multi-material unit, so treat each printer as one filament.
Sliced files and mixed fleets
If a file names a printer model and the printer has one set, they must agree, or the queue shows sliced for .... Klipper and Bambu printers share one queue in Rackrew. See how routing works, Bambu print farm and, for a Bambu-only room, Farm Manager vs Rackrew.
What it costs
Rackrew is free for 2 printers, without server slicing. Farm is CHF 14 a month for 5 printers. Workshop is CHF 24 for 10, then CHF 2 per extra printer, so 25 printers cost CHF 54 billed monthly. See pricing and the print farm calculator.
To try it, connect two printers for free, with no card, at app.rackrew.com/login.