
Papercrate
A self-hosted document archive. Built in Rust with a React frontend, Postgres for storage, S3 for files, and Quickwit for search. Still early — contributions and feedback welcome.

Document details
A side panel shows tags, correspondents, dates, and folder path for the selected document.

Read right here
Built-in PDF viewer with multi-page rendering, password support, and zoom.

Spread it out
Desk view lets you arrange documents on a freeform canvas. Drag them around and stack them however you like.
Full-text search
Documents are OCR-processed on upload and indexed for full-text search powered by Quickwit.
Tags and correspondents
Assign tags and correspondents to documents and filter your archive by either or both.
Folders
Organize documents in a folder tree. Move things around with drag and drop.
PDF viewer
View PDFs directly in the browser with multi-page rendering, password support, and zoom.
Multi-tenant
Run a single instance for multiple users with isolated storage and row-level security in Postgres.
WebDAV
Access your documents as a network drive from any WebDAV-compatible file manager.
Passkeys
Sign in with WebAuthn passkeys instead of passwords. API tokens are available for automation.
Self-hosted
Deploy with a single Docker Compose file that includes Postgres, Garage, and Quickwit.
Run it locally
mkdir papercrate && cd papercrate
curl -O https://raw.githubusercontent.com/papercrate-dms/papercrate/main/docker-compose.yml
printf "DOMAIN=localhost\nCADDY_ADDRESS=http://localhost\nPOSTGRES_PASSWORD=secret\nJWT_SECRET=secret\nPAPERCRATE_INITIAL_USER=myuser\n" > .env
docker compose up -d && sleep 10 && docker compose logs bootstrapSet DOMAIN to a real hostname for automatic Let's Encrypt TLS.
Built with
- Rust / Axum
- React 19
- TypeScript
- PostgreSQL + RLS
- Garage (S3)
- Quickwit
- Diesel ORM
- pdfjs
- Docker