Software / Homelab

Paperless-ngx 3.0.5 document management

Hands-on Paperless-ngx 3.0.5: 49.1s first boot, 11.4s per document OCR, 100% field accuracy against ground truth, and 1.16 GiB idle.

Acquisition
Free and open source, GPLv3
Tested for
1 days
Disclosure
Nothing here is sponsored

As tested

Specifications as tested
Version Paperless-ngx 3.0.5 (postgres + tika compose)
OCR engine Tesseract 5.5.0, OCRmyPDF 17.4.2
Tested on i5-10210U, 4 cores / 8 threads, 7.62 GiB to Docker
Test set 24 image-only A4 PDFs at 150 dpi, 2.17 MB
First boot 49.1 s from up -d to UI responding
OCR speed 11.4 s per document, 5.26 per minute
Idle memory 1.16 GiB across five containers
Disk cost 7.18 GB images, 6.6 GB net on disk

Twenty-four scanned invoices in, every field read back correctly, on a 1.6 GHz laptop with no GPU. Paperless-ngx is the least demanding self-hosted stack I have measured.

49.1s
To first boot
11.4s
Per document
100%
Field accuracy
1.16GiB
Idle memory

How this was tested

Same box as the Immich review, which makes the two directly comparable: an i5-10210U with four cores and eight threads, 7.62 GiB handed to Docker Desktop 29.6.2 on WSL2. Immich was stopped first so nothing competed for memory.

The test set was 24 A4 invoices generated at 150 dpi as image-only PDFs, with no text layer, so Tesseract had to genuinely read them. Each carries speckle, a half-pixel Gaussian blur and up to 0.6 degrees of rotation to imitate a scanner.

Every document was written alongside a ground-truth file recording its invoice number, vendor, city, net, VAT and total. That is what makes the accuracy figure meaningful rather than a vibe.

Installation

Paperless ships a compose file per configuration. I used the PostgreSQL and Tika variant, which is the one you want if you ever intend to feed it Word or Excel files.

131s
Cold image pull
3.3s
up -d returns
49.1s
UI responding
38.4s
Restart recovery

Five containers: webserver, PostgreSQL 18, Valkey, Gotenberg and Apache Tika. Versions inside are Paperless-ngx 3.0.5, Tesseract 5.5.0 and OCRmyPDF 17.4.2.

Notably, it did not repeat the trap that caught Immich on Windows. Paperless puts its database in a named Docker volume by default rather than a bind mount, so Postgres initialises cleanly with no edits. The only bind mounts are the consume and export folders, which hold ordinary files and do not care about Unix ownership.

What I did change: timezone, OCR language, and a 50-character secret key. Worth doing, because the shipped compose file uses paperless as the database password.

docker-compose.env
# Verified on Windows 11 + Docker Desktop 29.6.2 (WSL2), 9 Aug 2026
PAPERLESS_TIME_ZONE=Europe/London
PAPERLESS_OCR_LANGUAGE=eng
PAPERLESS_URL=http://localhost:8000
PAPERLESS_SECRET_KEY=50-random-characters
PAPERLESS_TASK_WORKERS=2
PAPERLESS_THREADS_PER_WORKER=2

OCR accuracy

Chart showing 24 of 24 correct for invoice number, vendor, total, net and VAT

All 24 documents ingested. All 120 fields came back correctly: invoice numbers, vendor names, totals, net amounts and VAT.

I verified this by querying the documents_document table in Postgres directly and matching the extracted text against the ground-truth file, rather than trusting the interface. Zero empty documents, averaging 261 characters extracted per page.

Dropping files into the consume folder is genuinely the whole workflow. Copy in, wait, they appear indexed. No clicking required.

Speed and resource cost

Stacked bar showing 1.16 GiB idle memory across webserver, tika, db, gotenberg and broker

OCR took 273.6 seconds for 24 documents: 11.4 seconds each, or 5.26 documents a minute. That is a five-year-old ultrabook chip with no acceleration, so treat it as a floor rather than a ceiling.

Idle sits at 1.16 GiB across five containers, and peaked at 1.58 GB during OCR. Tika alone accounts for 299 MiB doing nothing, which is the price of Office file support.

Against Immich, on the same hardware

Comparison chart: Paperless idles at 1.16 GiB and peaks at 264.8 percent CPU against Immich at 2.42 GiB and 827.1 percent

Running both on the same machine makes the contrast plain. Paperless idles at less than half Immich’s memory and peaks at roughly a third of the CPU. Where it loses is disk: 7.18 GB of images against Immich’s 6.1 GB, largely because Gotenberg alone is 2.44 GB.

Practically, that means Paperless will sit comfortably on a 4 GB box where Immich cannot. It is a far better first tenant for a small home server.

Stability

docker compose restart brought the interface back in 38.4 seconds with all 24 documents intact. Nothing crashed, and the consume folder drained without a single failed task.

Who should run it

Run it if you have a scanner and a filing cabinet you resent, and a box with 4 GB free. The consume-folder workflow means you can point a network scanner at it and stop thinking about filing entirely.

Skip it if your documents are already born-digital and searchable, or if you are not going to set up backups. An OCR index of your entire financial life is exactly the thing you do not want to lose or leak.

What holds up

  • Extracted all 120 ground-truth fields from 24 image-only scans without a single miss.
  • Idles at 1.16 GiB and peaks at 264.8% CPU, comfortably less than half what Immich wanted on the same box.
  • The consume folder is the entire workflow: drop files in, they appear indexed, no clicking.

What does not

  • Largest disk footprint of anything tested here at 7.18 GB, with Gotenberg alone taking 2.44 GB.
  • Tika holds 299 MiB at complete idle purely so Office files can be parsed later.
  • The shipped compose file uses paperless as the database password and needs a secret key set before it faces anything.

Common questions

On an i5-10210U with no GPU and two workers, 11.4 seconds per A4 page, or 5.26 documents a minute. That is a five-year-old ultrabook chip, so treat it as a floor. More workers and threads will improve it.

It idled at 1.16 GiB across five containers and peaked at 1.58 GB during OCR. It fits on a 4 GB box, unlike Immich, which needs 6 GB minimum.

On 24 generated scans with speckle, blur and slight rotation, it read all 120 ground-truth fields correctly, verified by querying Postgres directly. Real-world scans with stains, staples and handwriting will be harder.

Only if you want to feed it Office documents and emails. They cost about 3 GB of images and 308 MiB of idle memory between them. There is a compose file without them.

Treat it as you would any personal archive. It holds an OCR index of your financial life, so put it behind a VPN or a reverse proxy with real certificates rather than forwarding port 8000.