Skip to content

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:

[respond]

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:

[save_variables]
filename: ~/printer_data/config/saved_variables.cfg

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:

[include nfc_macros.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:

[spoolman]
server: http://your-spoolman-host:7912
sync_rate: 5

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/mainsail latest 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.