Taking PDF Control Off the Cloud
Stirling PDF is an open-source, self-hosted web application that gives you a full suite of PDF tools without sending a single file to a third-party server. Merge, split, compress, convert, rotate, watermark, sign – it handles all of it through a clean browser interface that runs entirely on your own hardware. No subscriptions, no file size limits imposed by someone else’s pricing tier, no privacy fine print.
The appeal goes beyond privacy. Cloud-based PDF tools like Smallpdf or ILovePDF are convenient until they are not – until you hit a daily limit, until your organization’s IT policy prohibits uploading sensitive documents, until the free tier quietly disappears. Stirling PDF eliminates that dependency entirely. The setup takes under ten minutes with Docker, and once it is running, it behaves like any other local web app.

What You Need Before Starting
Stirling PDF runs best through Docker and Docker Compose, which means you need Docker installed on your host machine. This can be a home server, a Raspberry Pi 4 or newer, a VPS, or any Linux machine with a few hundred megabytes of free RAM. The application itself is lightweight. A Raspberry Pi 4 with 2GB of RAM handles it without strain, even when running other containers alongside it.
You also need basic familiarity with the command line and editing a YAML file. If you have already deployed something like Paperless-NGX for self-hosted document scanning, you will find the Stirling PDF setup process nearly identical in structure. Grab the official Docker image from the Stirling PDF GitHub repository – the project is actively maintained and the image is updated frequently.
Deploying with Docker Compose
Create a new directory for your Stirling PDF setup, then create a docker-compose.yml file inside it. The core configuration is minimal. Paste in the following:
Set the service name, use the image frooodle/s-pdf:latest, map port 8080 on the host to port 8080 in the container, and define two volume mounts – one for ./configs to persist your settings, and one for ./customFiles if you plan to use custom fonts or templates. Set the restart policy to unless-stopped so the container comes back up automatically after a reboot.
Run docker compose up -d from that directory. Docker will pull the image and start the container. Within thirty seconds, Stirling PDF is accessible at http://your-server-ip:8080 in any browser on your local network. No database setup, no external dependencies, no environment variables required for a basic deployment.

Configuring and Locking It Down
Out of the box, Stirling PDF runs without authentication. Anyone who can reach port 8080 on your network can use it. For a home network where you control access, this may be acceptable. For anything exposed beyond your LAN, you need to add authentication or put the service behind a reverse proxy with access control.
Stirling PDF includes a built-in security layer you can activate through environment variables. Add the following to your Docker Compose file under the environment key: set DOCKER_ENABLE_SECURITY to true, and provide a SECURITY_USER and SECURITY_PASS of your choosing. Restart the container with docker compose restart and you will be prompted for credentials on every new session. This is basic HTTP auth, not a full user management system, but it is enough to block casual access.
For tighter control, pair Stirling PDF with a reverse proxy like Nginx Proxy Manager or Traefik. This lets you serve it over HTTPS on a custom subdomain, apply additional middleware, and integrate it with tools like Authelia if you want multi-factor authentication in front of it. The container exposes a single port and does not require any special networking beyond that, so reverse proxy configuration is straightforward.
One setting worth adjusting early is the INSTALL_BOOK_AND_ADVANCED_HTML_OPS environment variable. Setting it to true installs additional LibreOffice-based conversion tools inside the container, unlocking Word-to-PDF and HTML-to-PDF conversion. The trade-off is a larger image size and a longer first-start time while those dependencies install. If you only need core PDF manipulation – merging, splitting, compressing, rotating – leave this variable unset and the container stays lean.

The feature set is wider than most people expect. Beyond the obvious merge and split tools, Stirling PDF can flatten annotations, remove passwords, add page numbers, crop pages, extract images from a PDF, and convert between PDF/A standards for archival compliance. The OCR tab – powered by Tesseract – can make scanned documents text-searchable, though you need to pass the TESSERACT_LANGS variable with your language codes for anything beyond English. Processing a 50-page scanned document through OCR on modest hardware takes a minute or two, which is worth knowing if you are running this on a Pi rather than a full server.
Updates are a single command: docker compose pull && docker compose up -d. Your configs and custom files persist in the mounted volumes, so nothing is lost between image versions. The project releases updates often enough that checking monthly keeps you current without becoming a maintenance burden. Whether you are managing tax documents, editing contracts without a subscription, or just tired of every PDF tool being a freemium trap, Stirling PDF earns its disk space – and it never asks where your files came from.





