1.0.0 - The official re-release!
FilaBridge v1.0.0
FilaBridge keeps your Spoolman filament inventory automatically in sync with your PrusaLink printers... no more manual weight updates after every print!
This is the first release of FilaBridge under new maintenance. The original project was archived by its author, needo37, whose hard work brought us this tool in the first place. I rely on FilaBridge daily to keep my printers and Spoolman in sync, so rather than let it fade away I've picked it up here and intend to keep it alive. Bug reports, feature requests, and PRs are all welcome.
This release focuses on making filament tracking more accurate, the deployment and operation simpler, and the day-to day experience quieter and more informative to set a bseline for my continuing support of it.
As the old developer's last release was v0.2.3, i have opted to make my initial release 1.0.0
Highlights
Cancelled and failed prints are now tracked
Previously, only prints that finished cleanly counted against your spools. A print cancelled at 80% quietly used 80% of the filament without Spoolman ever hearing about it. FilaBridge now detects cancelled and failed prints (STOPPED and ERROR states) and bills the slicer's filament estimate scaled by how far the print actually got. (This is obviously an imperfect science, but the precentage method is certainly better than nothing!)
Filament estimates are captured at print start
FilaBridge now reads the slicer's filament estimate from the print file's header within moments of a print starting, using a streaming scan that reads a few kilobytes regardless of file size. Previously, printers that don't serve slicer metadata over the API (including the CORE One) forced a full G-code download at print end, which could never complete for large files at PrusaLink's transfer speeds. A multi-day print now records in seconds, and cancelled prints record accurately even when the printer is unreachable afterward.
Billing is idempotent and survives restarts
In-flight print state is persisted to the database, so restarting FilaBridge mid-print no longer loses track of the job. A billing ledger guarantees each job is only ever counted once, even across restarts or duplicate detections.
Print History tab
At risk of needless feature creep or bloat, a new dashboard tab lists your recent prints: job name, printer, completed or cancelled status, which spool was used, grams of filament billed, finish time, and run time. All of this data was already being logged and kept for tracking usage, so I figured no harm in surfacing this to users via a new tab.
Quick-Assign NFC tags for single-printer setups
If you have exactly one printer with one toolhead configured, the Spool Tags screen now also generates a Quick-Assign tag for each spool: one scan assigns the spool straight to your printer, with no second location tag needed. Multi-toolhead or multi-printer setups keep the standard two-scan workflow.
Much quieter docker logs, with more useful info
Informational output goes to stdout and warnings/errors to stderr, so you can route them separately. Steady-state logging is now edge-triggered: instead of several lines per printer every poll cycle, you get one line when something actually changes ("Printer MK4: IDLE -> PRINTING (job: benchy)"), one line when a printer goes offline, and one when it comes back, vs a failure poll every ~30 seconds.
Low filament warnings
When a print starts, FilaBridge compares what the print needs against what's left on the mapped spool. If the spool will run short, a warning appears on the dashboard with the exact numbers. Optionally, FilaBridge can pause the print when the warning fires, acknowledging the warning resumes it (or, if you already resumed at the printer, simply dismisses). Both behaviors are toggles in Basic Configuration.
Webhook notifications
FilaBridge can now push a notification to any webhook-based service when something needs your attention: a low-filament warning (including when it auto-pauses a print) or an unexpected printer disconnect mid-print. Point it at ntfy, Gotify, Home Assistant, Discord or Slack, Apprise, or anything else that accepts a webhook.
AI cleanup
No shade to the original developer, but it was very clear they leaned heavily on AI in the initial development of the tool, which led to some idiosyncrasies and quirks in how some of the code and documentation was written. I've gone through as much of that as I could for some formatting changes and clean-up (such as removing emojis from the log outputs), as well as manual human review.
CI Testing
There is now proper CI testing for just about everyting in GH to avoid regressions and surprises.
Cruft and DRY Cleanup
The original codebase had a lot of unused code from either improved/replaced sections or as of yet unused future planning. I've removed all of that as well as cleaned up duplicative functions into singular loops.
Added
- Print History tab and corresponding GET /api/print-history API
- Quick-Assign (single-scan) NFC tag/QR code generation for single-toolhead setups
- Version reporting: --version flag, version in the dashboard footer, the startup log line, and release binaries/images built with the release version
- /healthz endpoint, plus container healthchecks in the Dockerfile and docker-compose.yml
- Print status (completed vs cancelled) recorded in print history
- Low filament warning with optional pause-on-warning (toggles in settings)
- Print history can be disabled entirely for a leaner setup, with a button to clear stored history (Spoolman recording is unaffected either way)
- A Spoolman link in the dashboard tab bar for quick access to filaments and locations
- CI test suite covering print lifecycles, migrations, and the REST API
- Webhook notifications for low-filament warnings (including auto-pause) and unexpected printer disconnects during a print, compatible with ntfy, Gotify, Home Assistant, Discord/Slack, Apprise, or any webhook-based service
- Mobile-optimized dashboard UI
- Spool conflict detection: the same spool can't be assigned to two printers at the same time
- Custom toolhead display names
- Spoolman location sync: a spool's location follows its toolhead assignment (dropdown, NFC, or QR), and displaced spools move to a configured default storage location or are cleared
- Toolhead mapping with smart search by ID, material, brand, or name, plus auto-mapping from the dropdown
- Configurable timeouts for the PrusaLink API, Spoolman API, and file downloads
- Hostnames or IP addresses accepted for printers and Spoolman
- Input hardening (HTML escaping, error-ID sanitization)
Changed
- FilaBridge now targets Docker and Linux only (see Removed below)
- SQLite now runs in WAL mode with a busy timeout: much more robust against power loss (relevant to a Raspberry Pi user) and better under concurrent access. Note: keep the database on local disk or a Docker volume, not a network share!
- Archived spools in Spoolman are now hidden from FilaBridge, matching the existing behavior for empty spools and archived filaments
- Logging is dramatically quieter in steady state; HTTP request logging skips healthchecks and static assets
- The Docker image and docs now live at ghcr.io/sargonas/filabridge
- Stored credentials (PrusaLink API keys, Spoolman password) are now write-only: the API and UI never return them once saved. Leave a credential field blank when editing to keep the current value
- Switched to a pure-Go SQLite driver; building from source now requires Go 1.25 and no C toolchain
- Docker images now build natively for both architectures, cutting release build times from about thirty minutes to under five (mostly thanks to the SQLite driver change)
- The printer model field is gone: it was display-only, and removing it also removes the model-detection step when adding a printer (adding a printer is now instant, even for offline printers)
Fixed
- The auto-assign-previous-spool feature, once enabled, could never be disabled (the API rejected enabled: false as a missing field)
- Ctrl+C / SIGTERM could be swallowed by a background task, leaving the process running; shutdown is now reliable
- A data race in the WebSocket hub could crash the server when a slow client was dropped during a broadcast
- Config reloads raced against the monitoring loop and web handlers reading the configuration
- The dashboard error page referenced a template that didn't exist, producing a blank 500 instead of an error message
- A spool with no filament data could potentially crash the Spoolman debug endpoint
- Prints on printers that need user attention mid-print (filament runout, crash detection) are now tracked through the ATTENTION state instead of being ignored until they resume
- Large print files no longer fail usage recording with download timeouts due to mid-stream reading
Removed
- macOS and Windows builds removed. FilaBridge is designed to run next to Spoolman, which typically means Docker or a small Linux box. Additionally, the previous macOS release binaries were built without CGO and could not actually run at all. Linux binaries (amd64, arm64) are still published for bare-metal installs.
- Legacy no-op location "migration" routines that made pointless Spoolman API calls at every startup
Install
docker run -d --name filabridge -p 5000:5000 -v "$(pwd)/data:/app/data" ghcr.io/sargonas/filabridge:latest
Or grab a Linux binary from the assets below. Full setup is in the README.
Upgrading from v0.2.x
Your existing database works as-is: schema updates (the new print status column) are applied automatically on first start, and you'll see new .db-wal / .db-shm files appear next to the database once WAL mode kicks in.
One new caveat: printer names must now be unique. If two printers currently share a name, rename one before updating.
If you run via Docker or docker-compose, update your image reference to ghcr.io/sargonas/filabridge:latest. Configuration, toolhead mappings, and print history all carry over. Existing history entries predate cancelled-print tracking and will show as completed.
Known limitations
- There's no built-in authentication, by design. Run FilaBridge on a trusted network, behind a VPN, or behind an authenticating reverse proxy... that keeps QR and NFC assignment down to a single tap/click while keeping the service safe. Please never expose it directly to the internet!
- Pre-built binaries are Linux only, and the tool requires the PrusaLink API on a target printer
- INDX (>5 toolheads) support is new and only lightly tested. Either feedback or a donated INDX unit is welcome. ;)
Housekeeping
A real test suite and CI
Every pull request now runs a suite of end-to-end tests against simulated printers and Spoolman instances: full print lifecycles, cancellations, restart recovery, database migrations, and the API surface.
Thanks
To @needo37 for building FilaBridge and open-sourcing it under GPLv3, to @knobunc for several fixes and feature suggestions, to everyone on r/Prusa3d who helped test the release candidates, and to the Spoolman project for the inventory system this bridges into.
Enjoyed this release? You can Buy Me a Coffee to support my side hobbies!