OCR turns a folder of scans into an archive
Paperless-ngx supports OCR in more than 100 languages through Tesseract, then stores searchable text with the source document. It can ingest PDFs, images, plain text, and common office formats, though Office conversion requires the optional Tika service. Each record can carry tags, a correspondent, a document type, custom fields, and a configurable storage path. That model works better for household paperwork than manually nesting files by year and guessing later where an insurance letter went.
The archive keeps the unaltered original and can create a PDF/A copy for long-term storage. Search includes relevance ranking, matched-text previews, filters, and similar-document discovery. Paperless-ngx also watches a consume directory, accepts browser uploads, and can process attachments from multiple email accounts using rules. The useful part is the full path from arrival to retrieval: a scanner can drop a file into one directory, OCR can make it searchable, and rules can file it without a weekly sorting session.
Version 3.0.5 is active, but upgrades deserve care
GitHub recorded the latest push on 2026-08-25, and release v3.0.5 arrived on 2026-08-01. The repository showed 10 open issues and pull requests combined when we fetched it, with current work covering document-version filtering, query performance, translations, and trusted-proxy documentation. That is healthy maintenance for software entrusted with records. It also means the code is moving, so operators should read release notes and test restores before treating an update like a routine container refresh.
One open bug reports saved views changing behavior after an upgrade from v2.20.15 to v3.0.5 because of older Whoosh-style searches. The v3.0.5 notes list fixes for abbreviated relative dates and multiple document, search, mail, and database cases. Neither point makes the release unsafe, but together they make a practical case for pinning versions. A document archive is the wrong place to discover that a saved query or database change behaves differently only after the old container is gone.
What happened when we ran it
Our sandbox installed Paperless-ngx in 83 seconds. That brought in 216 packages and occupied 1,456 MB on disk; the build then succeeded in 6 seconds. The repository clone contained 1,492 files, about 195,077 lines of source, and 14 CI workflow files. A dependency audit reported 0 known vulnerabilities. Those measurements describe commit 2609327 in an unprivileged Debian container with 3 CPUs and 8 GB of RAM, not a tuned production host.
Tests did not run successfully. After 9 seconds, pytest exited with code 4 while Django loaded the settings module. The final log says PAPERLESS_SECRET_KEY was missing or still set to the default change-me, and it requires a unique secret for secure operation. That is the only cause shown in the log, so we would not call it a test regression. It does show that a source checkout needs security configuration before its suite reaches assertions.
Docker is the easy route; bare metal is a service stack
The installation guide recommends Docker for most users and offers an interactive Compose script. Even there, you choose persistent paths, check host UID and GID access, configure an admin account, and decide between SQLite, PostgreSQL, or MariaDB. PostgreSQL is recommended for new installations. Scheduled jobs and classifier training also require a Redis-compatible broker, with Valkey used by the bundled Compose files. A serious deployment needs backups for the database, original files, generated media, and configuration rather than one copied container volume.
Bare metal supports Python 3.11 through 3.14 on Linux. The documented package list includes Tesseract, Ghostscript, qpdf, ImageMagick, libmagic, database development libraries, fonts, and OCRmyPDF dependencies. Extra OCR languages add their own Tesseract packs. Network storage adds another wrinkle: a consume directory on NFS may lack inotify, so Paperless-ngx will ignore new arrivals unless polling is enabled. These are well documented constraints, but they explain why the short Docker pitch should not be read as a no-operations promise.
Clear-text files set the security boundary
The README gives an unusually direct warning: scanned documents are stored in clear text, without application-level encryption, and Paperless-ngx should never run on an untrusted host. That matters because the obvious payload is unusually sensitive: tax forms, identity documents, bank statements, medical letters, and contracts. Put the service behind controlled network access, use separate daily accounts instead of living as the superuser, restrict storage permissions, and make encrypted backups part of the host design.
Optional AI features need another privacy decision. Suggestions, document chat, and similarity search are disabled by default. Enabling a remote OpenAI-compatible backend sends document content and metadata outside the server and may incur charges; the docs suggest local Ollama or a self-hosted endpoint when that transfer is unacceptable. Paperless-ngx remains a strong local archive without those features. Its best quality is not novelty, but the careful connection between ingestion, OCR, filing, permissions, search, and recovery work that document owners otherwise assemble themselves.

