Klipper, Moonraker, Mainsail¶
The standard upstream stack. Documented here only for the parts that matter to the rest of the system — for general usage refer to each project's own docs.
| Project | Version we run | Notes |
|---|---|---|
| Klipper | upstream master |
Every Klipper printer in the fleet (Voron 2.4 / Trident / V0 / CR-30 / Alcheman). J1S has its own firmware. |
| Moonraker | upstream master |
Every Klipper printer. J1S uses the bridge. |
| Mainsail | upstream latest release | Every printer (the bridge serves it on the J1S). |
| Fluidd | upstream latest release | Optional alternative UI; works against any host in the fleet. |
| KlipperScreen | upstream master |
Optional touchscreen on Voron hosts. |
What our stack relies on¶
Klipper [respond]¶
Required on every Klipper host in the fleet for the NFC daemon to push prompt dialogs:
Without [respond], RESPOND TYPE=command MSG="action:prompt_*" has
no effect. The bridge implements this natively for the J1S — no config
needed.
Klipper [save_variables]¶
Required on every Klipper host in the fleet to persist NFC metadata across reboots:
Again, the bridge backs this with its own database namespace — no config needed on the J1S.
Klipper [gcode_macro NFC_ASSIGN_TOOL] & [gcode_macro NFC_CANCEL]¶
Defined in nfc_macros.cfg shipped with the NFC daemon. Required on
every Klipper host. Include from printer.cfg:
The bridge intercepts both names natively — no include needed on the J1S.
Moonraker [spoolman]¶
Required on every Klipper host for the daemon's
POST /server/spoolman/spool_id to work:
The bridge implements the same server.spoolman.* JSON-RPC namespace
and reads its Spoolman URL from config.yaml.
Versioning policy¶
- Klipper: track
master, pin per known-good commit on each printer's Klipper checkout. Updates land deliberately, not via cron. - Moonraker: same — track
master, advance deliberately. - Mainsail / Fluidd: latest release is fine. The J1S Pi image build
fetches
mainsail-crew/mainsaillatest at image-build time, so rebuild the image to pick up UI updates.
Why we don't use Kalico / KAMP / other downstream Klipper distros¶
Kalico (formerly Danger-Klipper) and friends are interesting but each
add a maintenance burden. Vanilla Klipper plus a handful of upstream
plugins (klipper-toolchanger, optionally Klippain's bits) covers
everything the fleet needs without picking sides in the fork ecosystem.
If a specific feature shows up only downstream and matters enough, we'll revisit. Until then: vanilla.