Stirling-PDF

Local PDF editing without uploading files

Productivity & Notes MIT beginner ★ 93,337 stars

What is Stirling-PDF?

Stirling-PDF is a locally hosted web application that handles dozens of PDF operations including merging, splitting, compressing, converting, OCR and signing. Because it runs on your own machine, sensitive documents never get uploaded to a third-party service.

Best for

Anyone who handles PDFs with personal or confidential content

Why choose Stirling-PDF

Stirling-PDF handles the PDF tasks that otherwise send documents to a website you know nothing about. Merging, splitting, compressing, rotating, converting to and from images, OCR, watermarking, password protection and signing are all available from a local web interface, and because it runs on your own machine the files never leave your control. That matters most in exactly the cases where online tools are least appropriate: contracts, medical records, bank statements, anything with a signature on it. It covers an unusually broad set of operations for a self-hosted tool, and the interface is straightforward enough that non-technical people in a household or small office can use it without being taught. For anyone who regularly handles PDFs with personal content, it removes the choice between convenience and privacy.

Replaces

  • Adobe Acrobat
  • Smallpdf
  • iLovePDF

Key features

  • Merge, split, compress and rotate
  • OCR and format conversion
  • Password protection and signing
  • Batch processing

What to watch out for

OCR and conversion quality depend on the underlying libraries rather than the interface, and a scanned document with unusual layout or a language the model does not handle well will produce mediocre text. Very large files and heavy operations consume memory proportionate to the document, so a small container will fail on something a desktop application handles fine. The web interface means it should not be exposed publicly, since anyone who reaches it can process files through your server. It has a lot of features, and the ones involving signup, login or external API integrations add configuration surface that should be considered before enabling. The project is actively developed but is a wrapper around many components, so a change in one library can affect a specific feature.

How to deploy

  • Docker

Getting started

Run it locally and confirm the operations you actually need work on your real documents before relying on it, since OCR and conversion quality is document-specific. Give the container enough memory for the largest files you handle, because the failure mode for under-provisioning is an operation that simply does not complete. Keep it on the internal network and never expose it, since it processes whatever files anyone sends it. Disable the account and API features you do not use rather than leaving configuration surface enabled by default. Keep a copy of the original files, because compression and conversion are lossy in ways that only become obvious later.

Typical setup

It runs locally with enough memory allocated for the largest documents that will be processed, because under-provisioning produces operations that simply do not complete. The specific operations actually needed are verified against real documents before it is relied on, since OCR and conversion quality is document-specific. It stays on the internal network and is never exposed, because it processes whatever files anyone sends it. Account and API features that are not used are disabled rather than left enabled by default. Originals are always kept, because compression and conversion are lossy in ways that only become obvious later.

Who should look elsewhere

Do not choose it for archival-grade OCR or conversion of unusual documents, where a dedicated desktop application will produce better results. Avoid it if you cannot give the container adequate memory, because heavy operations fail in ways that are tedious to diagnose. And if you only need to merge two files occasionally, the setup effort exceeds the benefit of a container you then have to maintain.

Project health

  • GitHub stars: 93,337
  • Last code push: 2026-09-30
  • Open issues: 588
  • Status: actively developed

Figures pulled from the GitHub API and refreshed periodically.

More in Productivity & Notes