Papercrate document list view

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 metadata panel

Document details

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

Grid view with PDF viewer

Read right here

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

Desk view

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 bootstrap

Set 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