← Blog

PrintStash v0.11.0: fleet, scheduling, SSO, PWA, and i18n

Fleet queue with routing, maintenance-aware scheduling, restart-safe jobs, OIDC login, installable offline shell, and English/Spanish localization.

release

v0.11.0 is the biggest step so far past the single-library workspace: PrintStash can now dispatch prints across a fleet, schedule around maintenance, sign in through your existing identity provider, install as an app, and speak more than one language. It also folds in the platform work that was previously planned for 0.12, so all of it lands in one release.

Fleet queue and routing

Administrators can queue Vault G-code across configured printers using manual, default-printer, or deterministic least-busy routing, then reorder, reroute, cancel, and retry eligible failed dispatches. Immediate sends and scheduled dispatches share one storage-to-provider transfer seam, so capability checks and local-first storage behave the same whether a job runs now or later.

Printer management gains Fleet, Queue, and Maintenance views, and the Model send dialog can add G-code straight to the fleet queue. Queue reads keep active work visible while limiting terminal history to 20 rows by default, with bounded pagination up to 100 rows in the UI and API.

Maintenance-aware scheduling

Printers can be placed in soft-drain mode, assigned one-off maintenance windows, and given a simple maintenance log, all without interrupting an active print. The scheduler dispatches around those windows so a machine can be taken out of rotation cleanly instead of by unplugging it.

Restart-safe background work

Import and scan job status now survives an application restart. Interrupted non-replayable work is marked failed and retryable instead of disappearing or hanging forever. The local task queue wakes database-backed fleet dispatch immediately while timeout polling preserves queued work across restarts. None of this needs Redis or another external service.

OIDC / SSO login

Optional generic OpenID Connect supports Authentik, Authelia, and similar providers, with discovery, authorization-code PKCE, validated ID tokens, collision-safe just-in-time users, configurable admin-group mapping, and a fallback local login. Setup lives under Settings → SSO and is stored encrypted. ID tokens accept only asymmetric RS/ES signing algorithms, and HTTPS callbacks force Secure state, nonce, verifier, and session cookies.

Installable offline shell

PrintStash now ships a web-app manifest and service worker, so it can be installed as a PWA and reopen its cached shell when the server is temporarily unreachable. Service-worker updates bypass HTTP caching, replace old cache generations, activate waiting workers, and revalidate cached static assets while preserving the offline navigation fallback.

English and Spanish localization

A typed, persisted locale system ships with English and Spanish catalogs, a global language switch, and translated login, desktop, mobile, profile, and Settings navigation surfaces. That is the foundation for running PrintStash in a language other than English.

Provider fixes

  • Moonraker connections now send the required server.connection.identify handshake before subscribing when an API key is configured, instead of silently subscribing unauthenticated.
  • Bambu LAN MQTT commands wait for the printer’s own report before treating a print/pause/cancel/resume as successful, and status queries read the pushed MQTT report instead of a nonexistent local HTTPS status endpoint.
  • PrusaLink file listing, job state, and start-print now match the real v1 API: recursive folder listings, telemetry from printer fields, and starting a file via POST /api/v1/files/local/{path}.
  • Cancelling a printer job now also marks its PrintStash job row cancelled instead of leaving it stuck as started, printing, or paused.

Safer dispatch and sharper observability

Dispatches interrupted between provider upload/start and the final database write are recorded as an unknown outcome and cannot be retried automatically, preventing accidental duplicate prints after a restart. Prometheus now reports fleet jobs, blocked work, dispatcher outcomes, scheduler liveness, and last-tick time, and authenticated health details expose the same scheduler state.

Upgrading from an existing installation follows the normal Docker Compose flow. Back up first, then follow the upgrade guide for the current commands and migration notes.

See the v0.11.0 GitHub release or read the full changelog.