Stirling-PDF: The 94k-Star Open-Source PDF Platform That Actually Challenges Adobe Acrobat
Most developers know Stirling-PDF by name. Few understand what it actually replaces.
You've seen the GitHub stars. You've seen the Docker pull counts. But here's what nobody explains properly: Stirling-PDF isn't just a "PDF tool." It's a complete, self-hosted document processing platform that covers 90% of what teams pay Adobe $20-30/user/month for — and it runs on a $4 VPS.
What Stirling-PDF Actually Is
Stirling-PDF is a web-based PDF manipulation platform with three deployment modes:
- Cloud: Their hosted SaaS (free tier, paid for automation credits)
- Desktop: Native Tauri apps for Windows, macOS, Linux — works offline
- Server: Self-hosted Docker container with REST API, MCP server, and optional SSO
The server mode is what matters for teams. One container. 50+ PDF operations. REST API for every tool. MCP server so AI agents can drive it. No per-seat licensing until you exceed 5 users.
The Architecture Nobody Talks About
Stirling 2.0 is a complete rewrite. Here's the stack:
Backend (Spring Boot, JDK 25)
- Apache PDFBox — core PDF reading, editing, form filling
- JPDFium — PDFium-based engine for merge, split, text/table extraction
- LibreOffice (via unoserver) — Office → PDF conversions
- Tesseract OCR — text recognition via OCRmyPDF
- qpdf, Ghostscript, Calibre, ImageMagick — compression, linearization, ebook conversion, image processing
- FastAPI + Pydantic AI — Python AI engine for smart operations
Frontend (React SPA, TypeScript, Vite)
- PDF.js — client-side rendering
- pdf-lib (Cantoo fork) — client-side PDF manipulation
- IndexedDB — local file storage with thumbnails
- Mantine + TailwindCSS — UI
- i18next — 40+ languages
Desktop (Tauri + Rust)
- Native file associations
- Bundled JRE via JLink
- Open-with support
Infrastructure
- Docker images:
latest(4GB),latest-fat(6GB+AI),latest-ultra-lite(2GB, no OCR/Office) - ProcessExecutor pattern — concurrency limits, timeouts per tool
- UnoServerPool — manages LibreOffice UNO server pool for conversions
50+ Operations, One API Pattern
Every server-side tool exposes a REST endpoint:
POST /api/v1/misc/compress-pdf
POST /api/v1/security/add-watermark
POST /api/v1/convert/pdf-to-img
POST /api/v1/pages/merge
Send multipart/form-data. Get the processed file back. Add ?async=true for long jobs — poll /api/v1/general/job/{jobId}.
The Pipeline API chains operations: upload once, run multiple tools, download once.
MCP: AI Agents That Can Actually Edit PDFs
This is the part most people miss. Stirling-PDF includes a built-in MCP server (disabled by default). Enable it:
mcp:
enabled: true
scopesEnabled: true
auth:
mode: oauth # or apikey
It exposes 7 tools over JSON-RPC 2.0:
| Tool | Purpose |
|---|---|
stirling_describe_operation |
Look up parameters/schema for any operation |
stirling_pages |
Merge, split, rotate, reorder, add blank pages |
stirling_convert |
Convert to/from PDF (images, Office, etc.) |
stirling_misc |
Compress, flatten, repair |
stirling_security |
Encrypt, decrypt, permissions |
stirling_upload / stirling_download
|
Large file handling via fileId |
stirling_ai |
AI engine capabilities |
An AI assistant can now: "Take this scanned contract, OCR it, extract the tables, redact the SSN fields, and save as PDF/A." All local. No document leaves your server.
The Open-Core Reality Check
Stirling moved to open-core in 2025. Here's what that actually means:
| Feature | Free (≤5 users) | Team ($99/mo) | Enterprise |
|---|---|---|---|
| All PDF tools, REST API, OAuth2/OIDC | ✓ | ✓ | ✓ |
| External DB, clustering, S3 storage | ✗ | ✓ | ✓ |
| Prometheus metrics, custom metadata | ✗ | ✓ | ✓ |
| SAML2, audit logs, DB backup alerts | ✗ | ✗ | ✓ |
| Offline activation (air-gapped) | ✗ | ✗ | ✓ |
| Text editing (alpha) | ✗ | ✓ | ✓ |
Critical: The core 50+ tools stay free. The paid tiers unlock multi-user admin, enterprise integrations, and the alpha text editing feature. Individual users and teams ≤5 see zero change.
Deploying on a $4 VPS (Hetzner CX22)
# docker-compose.yml
services:
stirling-pdf:
image: docker.stirlingpdf.com/stirlingtools/stirling-pdf:latest
container_name: stirling-pdf
ports:
- '8080:8080'
volumes:
- ./stirling-data/configs:/configs
- ./stirling-data/logs:/logs
- ./stirling-data/customFiles:/customFiles
- ./stirling-data/pipeline:/pipeline
- ./stirling-data/storage:/storage
- ./stirling-data/tessdata:/usr/share/tessdata
mem_limit: 4g
restart: unless-stopped
docker compose up -d
Open http://your-vps:8080. Default login: admin / stirling (change immediately).
For production behind a reverse proxy, set X-Forwarded-Proto, X-Forwarded-Host, X-Forwarded-Port so MCP resource metadata resolves correctly.
When to Use Stirling vs. Adobe vs. Smallpdf
| Scenario | Use |
|---|---|
| Occasional personal PDF edits | Stirling Cloud (free) or Desktop app |
| Team ≤5, self-hosted, no SSO needed | Stirling Server Free |
| Team >5, need SSO/audit/clustering | Stirling Team ($99/mo, unlimited seats) |
| Air-gapped, regulated, custom SLA | Stirling Enterprise |
| Already deep in Adobe ecosystem, need cloud sync | Adobe Acrobat Pro |
| One-off online conversion, no privacy concern | Smallpdf / iLovePDF |
The Mental Model Shift
Stop thinking "PDF tool." Start thinking document processing platform.
- Automation: Pipeline API + REST API = CI/CD for documents
- AI integration: MCP server = agents that can actually manipulate PDFs
- Data sovereignty: Self-hosted = documents never leave your network
- Cost model: $99/mo for unlimited seats vs. $20-30/user/mo = break-even at 4-5 users
What's Still Missing
- Text editing is alpha (paid only, improving)
- No real-time collaborative editing
- Mobile UI is functional but not polished
- ARM64 images exist but some binaries (unoserver) are amd64-only in older versions
TL;DR
Stirling-PDF is the only open-source PDF platform that covers the full lifecycle: view, edit, convert, OCR, sign, redact, automate, API, MCP — all self-hostable on commodity hardware. 94k stars isn't hype. It's developers realizing they've been overpaying for PDF infrastructure.
Try it: docker run -p 8080:8080 docker.stirlingpdf.com/stirlingtools/stirling-pdf
Top comments (0)