Print over LAN without vendor cloud services
Which printers keep working with the vendor cloud off, how to set up a fully local slice-to-print workflow, and what you give up by leaving the cloud behind.
You can run the whole loop locally: slice on your machine, keep the files on a server you own, and send jobs to the printer over your own network. Whether that costs you anything depends entirely on the brand. A Klipper machine never needed the internet in the first place, a Prusa on PrusaLink is local by design, and a Bambu printer will do it too, but only after you turn on LAN mode and accept that the convenience features go with it.
The honest summary is that “no cloud” is free on some hardware and a real trade on others, so it is worth knowing which one you own before you plan around it.
What each stack keeps when the cloud is off
| Printer | Local interface | What the vendor cloud is for | What a library can do locally |
|---|---|---|---|
| Klipper (Voron, Ratrig, Creality/Sovol, Elegoo Neptune 4) | Moonraker | Nothing. There is no vendor cloud in this stack | Everything: status, upload, start, controls, file inventory, measured filament |
| Prusa MK4 / XL | PrusaLink, in firmware | Prusa Connect adds remote access, an account, and cloud storage | Status, upload, start, controls, printer file inventory |
| Anything behind OctoPrint | OctoPrint API | Nothing required | Status, upload, start, controls, printer file inventory |
| Bambu X1 / P1 / A1 | LAN mode, with access code and serial | Handy app, remote monitoring, MakerWorld sends, cloud slicing | Status, plain-text upload, opt-in start, pause, resume, cancel |
| Elegoo Centauri Carbon | SDCP or local MQTT | Elegoo’s app | Status, controls, beta upload, and starting a file already on the machine |
Moonraker is the stable provider in PrintStash and the only one that reports measured filament use and duration back from the job. The other four are beta. The gaps in that last column are provider limits rather than network limits: Bambu LAN gives no remote file inventory, while Elegoo Centauri upload is beta and file inventory remains disabled. The compatibility matrix tracks the current state per capability.
Bambu deserves the extra paragraph, because its local story changed. Since the firmware releases that introduced Bambu’s authorization control (01.08.03.00 on X1, 01.08.02.00 on P1, 01.05.00.00 on A1, and enabled from the factory on H2 and P2 series machines), third-party software cannot start prints, stop prints, move the machine, or heat it while the printer runs in cloud mode. Reading status still works. Turning on LAN-only mode together with developer mode restores third-party control, which is the configuration PrintStash’s beta Bambu provider expects. Firmware can still be updated from a USB stick without going back to cloud mode.
Setting up the local loop
Start with the library, because it is the piece that has to be reachable from both your desktop and your printers.
- Run it on a machine that stays on. A Docker Compose stack on a NAS, an old mini PC, or a Raspberry Pi is enough. The default setup uses SQLite and local disk, creates no account anywhere, and sends no telemetry. There is no cloud dependency to switch off.
- Turn on each printer’s local interface. Klipper machines already expose Moonraker at port 7125, which is what Mainsail or Fluidd talks to. A Prusa MK4 runs PrusaLink in its own firmware, reachable at the printer’s IP with a digest login or the legacy API key. A Bambu printer needs LAN mode enabled, developer mode on, and its access code and serial number written down. OctoPrint needs an API key.
- Add the printers and read the diagnostics tab before trusting anything. It reports connectivity, the provider’s declared capabilities, and which actions are unsupported, without echoing back stored credentials.
- Smoke test on a machine where a mistake is cheap: confirm live status tracks the printer, then upload a small known-good file without auto-start, confirm it appears in the printer’s own interface, and only then exercise start, pause, and cancel.
- Slice as you always did. OrcaSlicer, PrusaSlicer, and Bambu Studio all run locally, and a post-processing hook can push each export into the library automatically if you want the intake step gone. That setup is in the OrcaSlicer auto-upload guide.
Keep Mainsail, Fluidd, or the printer’s own screen for webcams, console access, and firmware work. A library is not a firmware dashboard, and nothing about going local changes which tool is right for a stuck extruder.
Reaching it when you are not home
This is where most local-first setups quietly reintroduce a cloud, so decide it deliberately.
A VPN back to your own network is the option that keeps the property you set out to have. WireGuard or Tailscale on your phone puts you on the LAN, and every local interface works exactly as it does at home, with nothing exposed to the internet. It is also the least work to keep secure over time.
Publishing the library on a public hostname is the other option, and it is a different security posture. PrintStash is built for a trusted network: authentication and collection permissions protect the library, but the design does not assume hostile traffic. If you go that way, use the production Compose file, put TLS in front of it, set a strong VAULT_JWT_SECRET, and keep the proxy patched. The reverse proxy guide has working Caddy, Traefik, and nginx configurations. Expiring share links are the safer way to hand one model to someone outside the house without opening the whole library.
Note that a VPN or proxy gets you to the library and the printers’ local interfaces. It does not restore vendor features that live in the vendor’s cloud.
What you actually give up
Push notifications from the vendor app, remote camera streaming through it, one-click sends from a model site, and cloud profile sync between machines all stop when you leave the cloud. On Bambu specifically, LAN mode means Handy no longer reaches the printer from outside your network and firmware updates become a manual job.
Some of that comes back in another form. Print notifications can go to Discord, Telegram, ntfy, or a webhook from your own server. Job history, costs, and measured filament live in the library instead of the vendor’s account. Camera streaming does not come back through PrintStash, which is one of the reasons Mainsail and Fluidd stay in the picture for Klipper users.
The gain is less about privacy than about continuity: the workflow keeps working when a vendor changes an API, retires an app, or has an outage on a Sunday afternoon.
Questions that come up
Can I print remotely without using vendor cloud services?
Yes, on every printer family covered here, though the definition of remote matters. Within your own network, nothing needs the internet: the slicer, the library, and the printer’s local interface all talk to each other directly. From outside the house, use a VPN back to your network rather than exposing the printer, and everything behaves as it does at home. The vendor cloud is only strictly necessary for the vendor’s own conveniences, like the mobile app’s push notifications or one-click sends from a model site.
Does Bambu LAN mode still allow third-party software to start prints?
Only with developer mode enabled alongside it. Bambu’s authorization control system, introduced on X1 firmware 01.08.03.00, P1 01.08.02.00, A1 01.05.00.00, and shipped enabled on newer models, blocks third-party tools from starting or stopping prints, heating the machine, or sending movement commands while the printer runs in cloud mode. Reading status is unaffected. LAN-only mode plus developer mode is the supported local configuration, and it is what PrintStash’s beta Bambu provider assumes. Firmware updates can be done from a USB stick without returning to cloud mode.
Do I need an internet connection at all?
Not for the core loop. A self-hosted library runs on SQLite and local disk with no account and no telemetry, slicers run on your desktop, and printers accept jobs over the LAN. Internet access matters for the things that genuinely come from outside: downloading models from Printables or MakerWorld, pulling container image updates, and sending notifications to a service like Telegram. None of those sit in the path between a sliced file and a printer.
Which printers keep the most features when the cloud is off?
Klipper machines through Moonraker, by a wide margin. That stack has no vendor cloud to begin with, so status, uploads, starting, pausing, printer file listings, raw G-code, emergency stop, and measured filament and duration are all available locally. PrusaLink and OctoPrint keep uploads, control, and printer file inventory but do not report measured consumption back. Bambu LAN keeps upload and job control without remote file inventory, and Elegoo Centauri keeps status, control, and beta upload without any inventory.
Is putting it behind a reverse proxy as good as a VPN?
For a household setup, a VPN is the safer default. A reverse proxy with TLS is a legitimate option and the guide covers doing it properly, but it puts a service designed for a trusted network on the public internet, where it faces automated traffic all day. If you do expose it, the minimum is a strong JWT secret, TLS, a maintained proxy, and non-admin accounts for daily use. If you only need to send one model to someone else, an expiring share link avoids the question entirely.
Sources
- Prusa Connect and PrusaLink explained for PrusaLink working standalone on a LAN without an account or internet.
- SimplyPrint’s summary of Bambu’s authorization control system for the affected firmware versions and the LAN-plus-developer-mode workaround, alongside Bambu’s own third-party integration and LAN mode wiki pages. Checked August 12, 2026; Bambu has changed this policy before, so verify against the wiki before planning around it.
- PrintStash compatibility matrix and printers guide for the per-provider capability set in the shipped release.
For the Bambu specifics, Bambu printers in LAN mode covers what the beta provider does and does not do. For Klipper, connecting through Moonraker is the setup with the fullest local feature set.