A self-hosted web dashboard for the CUPS printers on your home network.
698
Remote printing for your home server & homelab.
A self-hosted web dashboard for the CUPS printers on your home network — live status, add/edit/remove printers, print job history, and a simple upload-and-print flow, all behind a login. No cloud account, no external dependency beyond the CUPS server already on your network.
/guide page once it's running, or README.md in the source repo# docker-compose.yml
services:
app:
image: prateekrajgautam/rprint:latest
container_name: rprint
restart: unless-stopped
ports:
- "8905:8905"
environment:
APP_PORT: "8905"
DEFAULT_ADMIN_USERNAME: admin
DEFAULT_ADMIN_PASSWORD: admin # change this after first login
SESSION_SECRET: "change-me-to-something-random"
volumes:
- /var/run/cups/cups.sock:/var/run/cups/cups.sock
- rprint-data:/srv/app/data
- rprint-uploads:/srv/app/uploads
volumes:
rprint-data:
rprint-uploads:
docker compose up -d
Open http://localhost:8905, log in with the default credentials above, and change the password immediately from Settings — you'll see a reminder banner until you do.
docker rundocker run -d \
--name rprint \
-p 8905:8905 \
-e SESSION_SECRET="change-me-to-something-random" \
-v /var/run/cups/cups.sock:/var/run/cups/cups.sock \
-v rprint-data:/srv/app/data \
-v rprint-uploads:/srv/app/uploads \
prateekrajgautam/rprint:latest
rPrint doesn't detect printers itself — it connects to the CUPS print
server already running on your host via a mounted Unix socket
(/var/run/cups/cups.sock) and shows whatever CUPS already sees, whether
that's a USB printer or one found over the network. This is why the
socket mount above is required, not optional, on Linux hosts.
Docker Desktop (Mac/Windows): that socket path can't be shared into a container the same way. Instead, expose CUPS over TCP on the host and set:
environment:
CUPS_HOST: host.docker.internal
CUPS_PORT: "631"
and drop the cups.sock volume mount.
Every value below is an environment variable (-e / environment: /
.env file — whichever suits your setup). Only the ones worth knowing up
front are listed here; the source repo's .env.example documents every
option.
| Variable | Default | Notes |
|---|---|---|
APP_PORT | 8905 | Port the app listens on inside the container |
DEFAULT_ADMIN_USERNAME / DEFAULT_ADMIN_PASSWORD | admin / admin | Only used to seed the account the first time it starts — change the real password from Settings afterward |
SESSION_SECRET | (insecure default) | Set this to a long random value before exposing the app beyond localhost: python3 -c "import secrets; print(secrets.token_hex(32))" |
SESSION_COOKIE_SECURE | false | Set true once served over HTTPS (behind a reverse proxy) |
CUPS_SOCKET | /var/run/cups/cups.sock | Path to the mounted host CUPS socket |
CUPS_HOST / CUPS_PORT | (unset) | Alternative to the socket — connect to CUPS over TCP (Docker Desktop) |
DATA_DIR | /srv/app/data | SQLite database location (users, profiles, job history) |
UPLOAD_DIR | /srv/app/uploads | Where uploaded documents land before printing |
DEBUG | false | Verbose logs + re-enables the /api/docs Swagger UI |
| Container path | Purpose |
|---|---|
/var/run/cups/cups.sock | Host CUPS socket (read/write) — how printers are detected at all |
/srv/app/data | SQLite DB — mount this, or every restart resets to a fresh install |
/srv/app/uploads | Uploaded print documents — mount this to keep job history/re-downloads working across restarts |
| Port | Purpose |
|---|---|
8905 | Web UI + API (change via APP_PORT, remember to update the port mapping to match) |
latest — most recent buildX.Y.Z (e.g. 2.3.3) — a specific, pinned version; every build bumps this, so pin one if you want reproducible deploys instead of always tracking latestThis is built for a trusted home/LAN network, not the public internet.
If you do expose it beyond your LAN, put it behind a reverse proxy with
TLS (nginx/Caddy example configs are in the source repo's deploy/
folder) and set SESSION_COOKIE_SECURE=true.
Content type
Image
Digest
sha256:590812acd…
Size
61.6 MB
Last updated
18 days ago
docker pull prateekrajgautam/rprint