PrintStash
Organize your 3D models, keep the G-code that works, and manage your printers.
PrintStash is an open-source, self-hosted web app for your 3D printing library. Bring together files from your computer, model marketplaces, and NAS; preview them, open them in your slicer, and keep print settings and results with each Model. Run it on your own server with SQLite and local disk to get started.
!Python 3.11+
!React 19
!Vite
!Status: beta
Quick Start · Features · Printers · Screenshots · Docs · Limitations
Quick Start
[!WARNING]
Run PrintStash on a trusted self-hosted network. For remote access, use
a reverse proxy with TLS and your own access controls. The
HTTPS and reverse proxy guide
lists the settings to change. See Security.
Install Docker with the Compose plugin, then download the Compose file and start PrintStash:
mkdir -p printstash && cd printstash
curl -fsSL https://raw.githubusercontent.com/xiao-villamor/PrintStash/main/docker-compose.yml -o docker-compose.yml
docker compose up -d
Open http://localhost:3000 (or
http:// from another machine) and complete setup:
- Create your administrator account. There is no default username or
docker compose logs printstash; look for the line containing setup token.
Source builds from main use the new browser registration flow
without a console token. Keep access restricted until setup is complete.
- Add your first files. Upload a Model, or connect an existing folder under
- Explore the Model. Inspect its preview, open a file in your slicer, and
It runs one container (web UI and full API) with SQLite and one persistent
Docker volume at /data. No .env, build step, PostgreSQL, or S3 service is
needed.
Images support linux/amd64 and linux/arm64. Start with 1 GB RAM; 2 GB or
more helps with large meshes.
From a Git checkout, run docker compose up -d in the repository root.
Need PostgreSQL, S3, SSO or every setting in one place? Use docker-compose.advanced.yml, which wires every option with its default.
For ports, version pinning, host folders, upload limits, SSO, HTTPS, updates, and the purpose of the other Compose files, see Deployment and optional settings.
Features
A Model keeps a printable design's files, G-code Revisions, and print history in one place. Collections organize the library; a Multipart Model groups Models that make up one object, such as a box with a base and a choice of lids. You can use the library without connecting a printer.
Import · Organize · Multipart Models · Preview · Revisions · Print · Materials and costs · Share · Backups · Access
Bring your files together
- Upload from your browser: STL, 3MF, OBJ, STEP/STP, DXF, G-code, and PrusaSlicer
.bgcode). DXF originals remain downloadable without a preview.
Import ZIP archives with file selection and keep
their folder structure as nested Collections.
- Capture from model sites: send supported URLs or use the
- Review before importing: Pending Imports is an inbox for captures.
- Use the library you already have: index mounted folders or NAS shares,
- Send slices automatically: the OrcaSlicer native upload guide
needs_test Revision;
multi-object plates stay safely separate.
Find and organize your Models
- Browse thumbnails in grid or list views, navigate nested Collections, and
- Search names, filenames, Collection paths, tags, and source information.
- Star favorites and save filtered views so your usual searches are one click away.
- Select multiple Models to update tags, move them between Collections, change
- Choose the metrics shown on Model cards and the metadata visible on detail pages.
Keep multipart projects together
- Group existing Models into ordered, named pieces such as a base, handle, and
- Give the Multipart Model its own cover, description, tags, Collection, and
- Browse Multipart Models alongside ordinary Models in the main library.
- Reuse a Model in several projects. Each keeps its own files, Revisions, and
Inspect files and open your slicer
- Rotate and zoom source meshes in the browser, with solid, X-ray, and wireframe
- Preview plain-text G-code layer by layer, toggle travel moves, and view the
- Inspect extracted dimensions, volume, triangle count, and slicer settings
- Open a file directly in OrcaSlicer, Bambu Studio, or PrusaSlicer using
Keep track of G-code that works
- Keep several G-code Revisions with each Model, with labels, notes, and
- Mark one Revision as recommended so the next print starts from your preferred
- Compare two files side by side for slicer and material settings, estimates,
- Review each Model's print history, import matching Moonraker jobs, or log a
Send prints and manage your fleet
- See printer status, progress, and temperatures; send G-code, choose whether to
- See which printers already hold a Model's G-code and start an existing remote
- Queue a print or a batch of copies. Route work manually, to a default printer,
- Check loaded material and nozzle size against G-code before dispatch.
- Plan maintenance windows, stop new work reaching a printer while its current
- With Bambu LAN, keep history of externally started jobs and, when available,
Track filament, costs, and results
- Manage printer and filament presets from Profiles. Record loaded tools
- Optionally connect Spoolman to see
- Keep actual duration, measured filament use, and per-print cost from Moonraker
- Use the admin Statistics dashboard to explore print counts, filament,
Add notes, share, and stay informed
- Keep Markdown notes, PDFs, images, and other Documents with a Collection.
- Share a Model through an expiring, read-only public link. Original-file
- Receive print-completed, failed, cancelled, and printer-offline notifications
Protect and move your library
- Restore trashed Models before permanent cleanup. Physical cleanup is guarded
- Run Quick or Full Vault audits to find missing files, integrity problems,
- Create, verify, and restore backups of the SQLite database, managed files, and
- Export or import a portable library archive with files, metadata, tags,
- Start with local disk and optionally use PostgreSQL or remote managed storage
Manage access and personalize your workspace
- Create local accounts and named API keys for scripts and slicer hooks, or
- Grant view, edit, or admin access to Collections and separate view, print,
- Use responsive desktop and mobile layouts, light/dark themes, and an
- Check storage usage, backup status, and printer connectivity in administration;
Available on main, awaiting a release
The features above describe v0.13.0. Source builds from main also include
multipart build tracking with quantities and
confirmed usable output, BGCODE toolpath previews,
guided browser registration, and backup destination
history with retries for failed copies. These are **not included in v0.13.0
images**. See Unreleased for the complete list.
Printer Compatibility
Moonraker/Klipper is the primary integration. Beta providers have implemented workflows, but still need broader validation on physical printers and firmware. The app shows each printer's capabilities and disables unsupported actions.
| Printer / service | Support level | What you can do |
| --- | --- | --- |
| Moonraker / Klipper | Stable | Live status, upload/start, pause/resume/cancel, remote files, matching print-history import, measured filament use |
| Elegoo Neptune 4 / Pro / Plus / Max | Via Moonraker | Uses the Moonraker integration through a dedicated setup preset |
| Bambu LAN | Beta | Local status, plain-text G-code upload with explicit start, pause/resume/cancel, external-job history and best-effort file capture; no remote file inventory |
| PrusaLink | Beta | Local status, plain-text G-code and validated .bgcode upload/start, remote files, pause/resume/cancel; no Prusa Connect cloud |
| OctoPrint / OctoPi | Beta | Local status, G-code upload/start, remote files, pause/resume/cancel |
| Elegoo Centauri Carbon / Carbon 2 | Beta | Local status, G-code upload/start, pause/resume/cancel; no remote file inventory or history import |
See Provider support for authentication, unsupported actions, diagnostics, and the hardware validation record.
Screenshots
Library, inspection, and revisions
| Vault overview | Model detail | G-code toolpaths | | --- | --- | --- | | !A populated PrintStash vault with collections, filters, favorites, and saved views | !Model detail with the interactive 3D viewer and recommended G-code | !G-code toolpath preview with layer navigation |
Workflow and insights
| Artifact comparison | Live printer | Statistics | | --- | --- | --- | | !Side-by-side comparison of two G-code revisions | !Live Moonraker printer progress, temperatures, and controls | !Print cost, filament, time, and workload statistics |
In motion
| Organize several models | Compare G-code revisions | | --- | --- | | !Select several models and apply a tag in one action | !Open a model's revision history and compare two G-code artifacts |
Known Limitations & Beta Notes
- You still need a slicer. PrintStash organizes files and dispatches prepared
- Printer support depends on the provider and firmware. The
- Metadata and marketplace captures can be incomplete. Slicer output and
- Full and lite images differ. Both generate STL/OBJ/3MF thumbnails. The
- Backups have a defined scope. Built-in database backup/restore supports
- One server process per library. The supported deployment runs one API
See Known limitations for the full boundaries and Security for deployment guidance.
Documentation
| I want to… | Start here | | --- | --- | | Learn the app's workflows | User documentation | | Configure Docker, ports, folders, or SSO | Deployment guide | | Upgrade an existing installation | Upgrade notes · v0.13.0 release guide | | Connect a NAS or an existing library | Library sources | | Choose remote storage | Storage providers · Compatibility details | | Set up browser capture | Browser extension · Pending Imports guide | | Check backups or recover data | Disaster recovery · Storage safety | | Follow releases and future work | Changelog · Roadmap |
Project Status
PrintStash is in beta, with a published release for self-hosted use. Library management and Moonraker/Klipper are the best-established workflows; other printer integrations have explicit support levels.
| At a glance | Current status | | --- | --- | | Latest release | v0.13.0 · Changelog | | Recommended installation | Docker Compose with SQLite and local disk; full and lite images for amd64 and arm64 | | Upgrading | Back up first, then follow the upgrade notes | | Development | Changes after v0.13.0 are listed under Unreleased; future plans are in the roadmap |
Contributing
Bug reports, hardware notes, docs fixes, and small PRs are welcome. Start with CONTRIBUTING.md. Good first contributions include printer reports, parser fixtures, install notes, and small UI workflow improvements.
Not sure where to start? See community starter issues, ask in Discussions, or report an issue.
Security
Read SECURITY.md before reporting vulnerabilities.
PrintStash is designed for trusted self-hosted networks; do not expose it
directly to the public internet without a reverse proxy, TLS, and your own
access controls. The reverse proxy guide
shows how to bind the frontend to 127.0.0.1; copy-pasteable Caddy / Traefik / nginx examples are
in Reverse proxy with TLS.
License
PrintStash is licensed under the GNU AGPL-3.0.
Trademark
PrintStash is the name and mark of this self-hosted, open-source project, published here at xiao-villamor/PrintStash and printstash.org. The project is not affiliated with, endorsed by, or connected to any separately hosted service using the PrintStash name. If you run a service that reuses the name, please distinguish it clearly from the self-hosted project so users are not misled.