Warning
ALPHA SOFTWARE - Tested on specific CAN bus, STM32 Serial/DFU, and Linux Process devices (see below). Non-Raspberry Pi and Fluidd are unsupported but on the roadmap. Kalico is auto-detected if installed at ~/klipper.
Contributions and bug reports are appreciated!
KlipperFleet is a web interface (integrated into Mainsail) for configuring, building, and flashing Klipper/Kalico firmware across all MCUs on a printer. No command line needed.
- Web Configurator: Replaces
make menuconfigwith a reactive web form parsed from Klipper's Kconfig source. - Fleet Management: Register MCUs (Serial, CAN, DFU), assign profiles, and attach DFU IDs to Serial devices for cross-reboot tracking.
- Smart Sequencing: Flashes CAN downstream nodes first, bridge hosts last.
- UART Support: Detects MCUs connected via Raspberry Pi UART (GPIO).
- Batch Operations: Build All, Flash Ready, Flash All, or Build & Flash All in one click.
- Auto Reboot: Detects Klipper vs. Katapult/DFU mode and reboots devices into the correct bootloader automatically.
- Service Management: Stops/starts Klipper and Moonraker services during flash operations.
- Integrated Flashing: Flash via Serial, CAN, or DFU from the browser with real-time log streaming.
- Mainsail Integration: Native look and feel within the Mainsail ecosystem.
Important
All other hardware should be considered untested. Please open an issue if you run into problems, or share your results in the compatibility thread.
| MCU / Board | Connection | Bootloader | Offset | Reported By |
|---|---|---|---|---|
| Raspberry Pi | Linux | N/A | N/A | Developer, Community |
| Spider 3 H7 (H723) | CAN / CAN Bridge | Katapult | 8KiB | Developer |
| BTT MMBCAN v1 | CAN | Katapult | 8KiB | Developer |
| Spider 3 (F446) | DFU (USB) | STM32 DFU | 32KiB | Developer |
| BTT EBB36 Gen2 | CAN | Katapult | 8KiB | Community |
| BTT EBB36 v1.2 | CAN | Katapult | 8KiB | Community |
| BTT Kraken | CAN | Katapult | 128KiB | Community |
| QIDI Plus 4 Mainboard | USB | Katapult | 32KiB | Community |
| QIDI Plus 4 Toolhead | USB to UART | Katapult | 8KiB | Community |
| QIDI Box v2 | USB | Katapult | 32KiB | Community |
| ToquesCAN | CAN | Katapult | 8KiB | Community |
| Fysetc Spider V2.2 | UART | Katapult | 32KiB | Community |
- Klipper at
~/klipperand Katapult at~/katapult - can-utils (CAN devices only), Python 3.9+ with
venv - Passwordless sudo for
systemctlandip link
Run this one-liner on your Raspberry Pi:
wget -qO - https://raw.githubusercontent.com/JohnBaumb/KlipperFleet/main/install.sh | sudo bashIf you prefer to clone manually:
cd ~
git clone https://github.com/JohnBaumb/KlipperFleet.git
cd KlipperFleet
sudo chmod +x install.sh
sudo ./install.shAdd the following to moonraker.conf:
[update_manager klipperfleet]
type: git_repo
path: ~/KlipperFleet
origin: https://github.com/JohnBaumb/KlipperFleet.git
primary_branch: main
managed_services: klipperfleet
virtualenv: ~/KlipperFleet/venv
requirements: backend/requirements.txt
system_dependencies: install_scripts/system-dependencies.json
is_system_service: False
The installer auto-configures .theme/navi.json. If the entry is missing, add it manually:
Tip
Enable Show Hidden Files in Mainsail settings to see the .theme folder.
[
{
"title": "KlipperFleet",
"href": "/klipperfleet.html",
"target": "_self",
"icon": "M20,21V19L17,16H13V13H16V11H13V8H16V6H13V3H11V6H8V8H11V11H8V13H11V16H7L4,19V21H20Z",
"position": 86
}
]- Configurator - Select a profile, configure MCU settings, click Save.
- Fleet Manager - Scan for devices, add them to your fleet, assign profiles. Use Attach to link DFU IDs to Serial devices for cross-reboot tracking.
- Dashboard - Build All compiles firmware, Flash Ready flashes bootloader-ready devices, Flash All reboots and flashes everything, Build & Flash All does it all in one click.
| Component | Technology |
|---|---|
| Backend | FastAPI (Python 3) |
| Kconfig Engine | Klipper's bundled kconfiglib |
| Frontend | Vue.js 3, Tailwind CSS |
| Flashing | Katapult flashtool.py, dfu-util, avrdude |
| Device Type | Method | Reboot Technique | Flash Tool | Firmware Format | ID Type |
|---|---|---|---|---|---|
| CAN Node | can |
flashtool.py -r via CAN |
flashtool.py -f via CAN |
.bin |
UUID (12 hex chars) |
| Serial + Katapult | serial |
1200bps trick -> flashtool.py -r | flashtool.py -f -d via serial |
.bin |
/dev/serial/by-id/... |
| Serial AVR (no Katapult) | serial |
None (direct flash) | make flash (avrdude) |
.elf |
/dev/ttyUSB0 etc |
| DFU (STM32) | dfu |
1200bps trick or manual | dfu-util |
.bin |
Serial number or USB path |
| Linux Process | linux |
None | cp + service restart |
.elf |
linux_process |
| CAN Bridge (Katapult) | can->serial |
1200bps trick or flashtool.py -r | flashtool.py -f -d via serial |
.bin |
UUID -> /dev/serial/by-id/... |
| CAN Bridge (DFU) | can->dfu |
1200bps trick | dfu-util |
.bin |
UUID -> DFU serial/path |
Stored in ~/printer_data/config/klipperfleet/: profiles/ (Kconfig files), artifacts/ (compiled firmware), fleet.json (device registry).
- Enhanced DFU handling and bridge recovery
- User wiki with setup guides and troubleshooting, Profile import/export for easy setup of new devices.
- Fluidd support (confirmed working by adding the Moonraker update manager entry, but no Fluidd sidebar integration yet)
GPLv3


