If you've ever needed to merge, split, compress, or convert a PDF, you've probably ended up on some sketchy website uploading your documents to who-knows-where. Stirling-PDF fixes that — it's a fully self-hosted PDF toolkit you run on your own hardware, and it's absolutely packed with features.

Stirling-PDF web interface showing the home dashboard with available PDF tools

What Is Stirling-PDF?

Stirling-PDF is an open-source, self-hosted web application that gives you 50+ PDF tools all in one place. Merge, split, rotate, compress, convert, add watermarks, redact text, OCR scanned documents — you name it. It runs entirely on your own server, so your documents never leave your network.

Key features:

  • 50+ PDF manipulation tools in a clean web UI
  • Runs 100% locally — your files never leave your server
  • OCR support for scanned documents
  • REST API for automation and integration
  • Available in 40+ languages
  • Dark mode (because of course)

Installing with Docker Compose

The easiest way to get Stirling-PDF running is with Docker Compose. Create a directory for it and add a docker-compose.yml:

mkdir -p ~/stirling-pdf && cd ~/stirling-pdf

Create your docker-compose.yml:

services:
  stirling-pdf:
    image: stirlingtools/stirling-pdf:latest
    container_name: stirling-pdf
    ports:
      - '8080:8080'
    volumes:
      - ./stirling-data/tessdata:/usr/share/tessdata
      - ./stirling-data/configs:/configs
      - ./stirling-data/logs:/logs
      - ./stirling-data/pipeline:/pipeline
    environment:
      - SECURITY_ENABLELOGIN=false
      - LANGS=en_GB
    restart: unless-stopped

Fire it up:

docker compose up -d

That's it. Open http://your-server-ip:8080 in your browser and you're in.

What the Volumes Do

  • /configs — Settings and database storage
  • /usr/share/tessdata — OCR language files (for text recognition on scanned PDFs)
  • /logs — Application logs
  • /pipeline — Automation pipeline configs

Which Image to Use?

Stirling-PDF comes in three flavours:

  • latest — The standard image. Has everything most people need. Use this one.
  • latest-fat — Includes extra conversion tools and formats. Bigger image, more capabilities.
  • latest-ultra-lite — Stripped down for low-powered hardware (Raspberry Pi, old NAS boxes, etc).
Tip: If you want login protection, set SECURITY_ENABLELOGIN=true and Stirling-PDF will prompt you to create an admin account on first launch. Handy if you're exposing it beyond your local network.

Putting It Behind a Reverse Proxy

If you're already running nginx (like this site does), you can proxy Stirling-PDF behind a subdomain or path. Here's a basic nginx location block:

location /pdf/ {
    proxy_pass http://127.0.0.1:8080/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    client_max_body_size 100M;
}
Note: The client_max_body_size is important — without it nginx will reject any PDF upload over 1MB.

Worth It?

Absolutely. Once you've got Stirling-PDF running you'll never go back to those dodgy online PDF converters. It's fast, it's private, and it handles pretty much anything you throw at it. Perfect for a homelab setup.

Links: