Papra is a self-hosted document archiving platform designed for individuals and small teams who need a simple, reliable way to store and retrieve important documents like receipts, warranties, and scans. It solves the problem of digital document clutter by offering an intuitive interface with automated ingestion and full-text search, eliminating the need for manual file organization.
Built with a modern TypeScript stack—SolidJS for the frontend, HonoJS and Drizzle for the backend, and CadenceMQ for job processing—Papra supports Docker-based deployment and integrates with OCR engines for text extraction from images. Its open-source nature and lightweight Docker image (<200MB) make it ideal for users seeking privacy-focused, on-premise document management without complex infrastructure.
What You Get
- Document Upload & Storage - Securely store PDFs, images, and scanned documents in a centralized archive with metadata retention.
- Email Ingestion - Automatically import documents by sending emails to a unique, generated Papra email address with attachments.
- Folder Ingestion - Monitor local or network folders for new files and auto-import them into your document archive.
- Full-Text Search - Search document content using OCR-extracted text from images and scanned files, not just filenames.
- Tagging Rules - Define custom rules to auto-tag documents based on content, sender, or file type for automated organization.
- Organizations - Collaborate with family or colleagues by creating shared document spaces with user roles and permissions.
- Dark Mode & Responsive UI - Use Papra comfortably on any device with a mobile-optimized interface and system-theme-aware dark mode.
- CLI Tool - Manage documents, import files, and configure settings directly from the terminal using the built-in command-line interface.
- API & Webhooks - Integrate Papra with external tools via REST API and webhooks to trigger actions on document uploads or changes.
- Self-Hosting with Docker - Deploy Papra on any server using a lightweight, multi-architecture Docker image with minimal configuration.
Common Use Cases
- Archiving family receipts and warranties - A parent uses Papra to forward email receipts and scan warranty cards, then retrieves them years later when a device needs repair.
- Legal document retention for small firms - A paralegal sets up folder ingestion to auto-archive scanned contracts and court filings, using tags to categorize by case number.
- Personal finance organization - A freelancer saves all tax-related documents via email ingestion and uses full-text search to find invoices from specific vendors across years.
- Digital archiving for retirees - An elderly user uploads scanned photos and letters via mobile browser, relying on Papra’s simple interface to preserve memories without cloud dependency.
Under The Hood
Architecture
- Monorepo structure with clear separation between applications and shared packages, enabling independent development and versioning
- Centralized state and API client management via React context providers, with dependency injection through custom providers to decouple data fetching from UI
- Prisma ORM paired with Valibot for end-to-end type safety across database and API boundaries
- Unified tooling via pnpm workspaces and consistent testing/build pipelines across all modules
- Atomic styling with Tailwind CSS and UnoCSS, complemented by Astro for documentation site generation
Tech Stack
- Astro with Solid.js and Starlight Theme for component-driven documentation
- TypeScript-first development using modern ESM tooling like tsx and tsdown
- Vitest for comprehensive testing with coverage and isolated execution across the monorepo
- Unocss with custom presets and Tailwind Merge for flexible, atomic UI styling
- better-auth with Expo integration for cross-platform authentication flows
- Antfu’s ESLint and changesets for consistent linting and automated versioning
Code Quality
- Extensive test coverage spanning unit, integration, and end-to-end scenarios with robust edge case handling
- Clear separation of concerns through layered architecture: use cases, repositories, and middleware enforce clean boundaries
- Custom error classes ensure predictable and testable error responses across the system
- Strong type safety enforced via TypeScript interfaces and type guards in models, utilities, and tests
- Consistent naming and test structure aligned with domain terminology, improving readability and maintainability
- Strategic test utilities enable deterministic environments and isolated validation of external dependencies
What Makes It Unique
- Native browser-based encryption key generation eliminates server dependency, prioritizing data sovereignty
- Tabler Icons integrated as inline SVGs with dynamic class rendering for lightweight, themable UI elements
- Solid.js form system with Valibot validation and i18n-aware error handling creates a rare type-safe form architecture in documentation platforms
- Dynamic embedding of git metadata (commit SHA, version) with clickable links provides users unprecedented traceability
- Custom toast system with icon-driven feedback and themable classes unifies notification UX while preserving accessibility
- SSO provider system with dynamic button rendering and centralized auth abstraction enables seamless third-party identity integration