Add Fluidd and custom boot scripts, migrate DC24V control, update the web UIs and filament macros, improve startup status reporting, and expand upgrade and replica coverage.
8.4 KiB
Changelog
All notable Reforge changes are recorded here. The project is in beta: a feature can be implemented and replica-tested without yet being validated on both printer models or through every real-world workflow.
Unreleased
Release preparation and documentation sweep.
Added
- Fluidd is available beside Mainsail at
http://<printer-ip>:81/, using the same Moonraker API and webcam proxy. - Custom
*.shfiles in/usr/data/anvil-data/scriptsrun in filename order during boot, survive updates, and write/usr/data/logs/custom-scripts.log. - The installer refuses to install on a printer running FlashForge firmware
older than 1.9.6, and says to install FlashForge's current firmware first.
On those releases the board firmware and Klipper do not agree, the MCU never
connects, and the printer comes up with no Klipper and no screen — which
looks like a bad flash rather than a mismatch. Nothing is written to the
printer when the gate refuses: it puts the reason on the panel, leaves
anvil-NOT-INSTALLED.txton the USB stick, and the printer boots as it did before. A version it cannot read is installed on, as before.
Changed
-
The normal boot screen says that Reforge is starting, names Moonraker and Klipper while it waits, and advances its progress bar through a complete normal boot instead of describing every boot as printer setup.
-
Mainsail is updated to 2.19.0. Both web interfaces now return their SPA shell for client-side routes while keeping API routes behind Moonraker.
-
Filament load and unload use the selected tool's saved material and shorter, overridable feed lengths; loading finishes with a retract.
-
The X and Y rotation distances are both 40.4.
-
Klipper's and Moonraker's config now live in Reforge's own directory,
/usr/data/anvil-data/config, seeded once on the first install with a copy ofprinter.cfgand the config files beside it. FlashForge's/usr/data/configis not written to at all from here on. -
Moonraker's data path moved to
/usr/data/anvil-data, which is what puts its config in that directory —moonraker.confandmoonraker-custom.confmoved with it, and Mainsail's config editor now shows the live files. Prints and logs stay in/usr/data/gcodesand/usr/data/logs; the job-history database is moved across once, by the service, while Moonraker is stopped.On a printer coming from an older Reforge, whatever that release put in
/usr/data/configstays there — the stock files it replaced were not kept, so there is nothing to restore them from. Stock's own installer force-copies itsprinter.base.cfgback on every flash, which is what repairs that directory.
Fixed
- Upgrading removes FlashForge's obsolete
[output_pin DC24V_CTL]section when present, before the mod configures PA3 as a heater-following 24 V control. - Object cancellation keeps extrusion and retraction history separate for every tool instead of carrying one tool's adjustment into another.
- Flashing the stock FlashForge package back over Reforge no longer leaves the
printer with a Klipper config it cannot resolve.
/usr/datais the data partition, so a stock flash does not clean it: the symlinkedprinter.base.cfgand theff-*.cfgbeside it used to outlive the mod, and Klipper treats an[include]that points at a removed/usr/data/anvilas fatal. Calibration and config edits made under Reforge stay in Reforge's directory and come back with it; a stock flash returns the machine to theprinter.cfgit had before. - FlashForge's
chelperis put back on a printer that took one of the two releases whose software component carried our Klipper (v20260827andv20260827b). Those replaced/usr/prog/klipper/klippy, and a stock flash restoresc_helper.sobut not thechelper/__init__.pythat declares what is in it — ours takes a fourth argument forextruder_set_pressure_advance, so a printer flashed back to stock failed at the first extruder. The whole directory is restored, withc_helper.soleft newest so their owncheck_build_codedoes not send klippy to a compiler no printer has. Only on machines running FlashForge 1.9.7 or older, which is the firmware this copy came from; a newer one is left alone. - A printer that took an earlier release has FlashForge's
klipperDaemonput back for it. That file is the one thing a stock flash cannot restore — their package carries no copy — so a machine whose copy was replaced could not be returned to stock at all.anvil-corenow ships FlashForge's own and restores it on every install and everyapk upgrade, so one update is enough; owners who have already rolled back are served by the package at Klipper4FlashForge/stock-recovery. - Going back to stock works again. The mod no longer replaces
/usr/prog/klipper/klipperDaemonwith a shim of its own. That link was the one thing a stock FlashForge flash could not undo — their package carries noklipperDaemonto copy over it — so stock'sstart.sh, whose last line isklipperDaemon start, ran the mod's shim, whosestartdoes nothing by design. The printer came back from a stock flash with a working screen and no Klipper behind it, however many times stock was flashed. Nothing on a modded machine called that file: our ownstart.shreplaces stock's and asks s6-rc, FlashForge'sfirmwareExeexecs onlystart.sh, and Moonraker runs withprovider: none. Printers that already took an earlier release still carry the link and are repaired by the package at Klipper4FlashForge/stock-recovery.
v20260827c-melitopol — 2026-08-27
Added
- HelixScreen’s Filament page now follows the selected tool for material, spool, temperatures, loading, and retracting.
- Installed packages record the Reforge APK feed location for future updates.
Fixed
- A selected tool with no resolvable heater is logged and ignored instead of heating the wrong hotend.
v20260827d-melitopol — 2026-08-27
Added
- HelixScreen pressure-advance calibration integration and per-tool Z correction selection in the tune overlay.
Fixed
- Pressure-advance calibration restores the previous heater target, including when a sweep fails partway through.
- Calibration documentation now explains that results belong in the slicer’s
filament profile rather than being saved to
printer.cfg.
v20260827-melitopol — 2026-08-27
Added
- s6-rc supervision for the web stack, camera, Moonraker, Wi-Fi, and related services, with readiness checks based on actual service readiness.
- A printer-local CPython 3.13 runtime for Moonraker with working SQLite.
- CPU priority controls that let Moonraker and the camera yield to Klipper.
- HelixScreen settings persistence across firmware updates.
Changed
- Reforge owns and starts the camera and web stack rather than stock
firmwareExe. - Startup retries until MCU boards answer and shows boot progress.
v20260825b-nova-kakhovka — 2026-08-25
Fixed
TOOL_OFFSET_CALIBRATEno longer shuts Klipper down on completion.
v20260825-nova-kakhovka — 2026-08-25
Added
- First-boot import of factory per-unit calibration into Klipper config.
- Toolchanger-aware calibration, status commands, and safe plate checks.
- An update path that preserves the root password and user configuration.
Fixed
- Release builds can no longer silently fall back to the stock Klipper tree.
v20260824-nova-kakhovka — 2026-08-24
Added
- USB packages for Creator 5 and Creator 5 Pro with model guards.
- Current Klipper with Creator 5 toolchanger support, Mainsail, Moonraker, HelixScreen, camera streaming, Wi-Fi, and root SSH.
- Stock slicer compatibility through
[ff_print],START_PRINT, andEND_PRINT, including preparation, mesh loading, nozzle cleaning, tool checks, and safe cancellation. - Tool-aware filament load, unload, purge, runout, and clog handling.
- Automatic pressure-advance calibration and VFA calibration support.
- Timelapse support, signed APK packages, pinned inputs, and Docker plus printer-replica QA.
Known release issue
The original packages were withdrawn because they could install a mixed Klipper tree. Use the rebuilt release or a later release; see its release note.
Project start — 2026-08-20
- Initial reverse-engineering notes and USB-installable firmware builder.