A free, open-source, 100% client-side PDF toolkit. Eight PDF tools that run entirely in your browser — your files never leave your device.
🔗 Live demo: madebybalaji.com/pdfsnip
- ✂️ Split PDF — Extract any pages, reorder, rotate, or delete visually before downloading
- 🔗 Merge PDFs — Combine multiple PDFs into one, drag to reorder
- 🗜️ Compress PDF — Shrink PDFs by up to 80% with three quality levels
- 🖼️ PDF → Images — Export every page as PNG or JPEG up to 216 DPI
- 🔏 Watermark — Stamp text on every page with custom opacity, position, and color
- 🔢 Page Numbers — Add configurable page numbers in any position and format
- 🔒 Password Protect — AES-256 encrypt your PDFs in one click
- 🔓 Unlock PDF — Remove the password from any PDF you own
This is a single static HTML file. There is no server upload, no telemetry, no analytics, no tracking, no cookies, no fingerprinting. Every PDF you process is handled locally by JavaScript running in your own browser tab. Close the tab and it's gone.
See SECURITY.md for the full threat model and hardening details.
Just open index.html in any modern browser. That's it.
python -m http.server 8000
# then open http://localhost:8000Drop the folder onto any static host:
- Netlify — drag and drop, done
- Cloudflare Pages — connect this repo
- GitHub Pages — enable in repo settings
- Vercel, Surge, S3, or your own nginx — anything that serves static files
A netlify.toml is included with sensible security headers (CSP, X-Frame-Options, nosniff, Referrer-Policy, Permissions-Policy).
- HTML / CSS / Vanilla JS — no framework, no build step
- pdf-lib — PDF reading, writing, and manipulation
- pdf.js — page thumbnail rendering
- JSZip — building ZIP downloads
All three libraries are loaded from CDN with SHA-384 SRI hashes locking the exact versions. No npm, no bundler, no node_modules.
- A modern browser: Chrome/Edge 90+, Firefox 88+, Safari 14+
- For local serving: Python 3 or any other static file server
- For development: a text editor (you're literally just editing one HTML file)
pdf-studio/
├── index.html # The entire app
├── netlify.toml # Static hosting config + security headers
├── README.md
├── CONTRIBUTING.md
├── SECURITY.md
├── LICENSE
└── .gitignore
Contributions are welcome — see CONTRIBUTING.md for the full guide.
Quick version:
- Fork and branch from
master - Edit
index.htmldirectly - Test by opening it in a browser
- Open a PR with a clear description
Found a vulnerability? See SECURITY.md for the responsible disclosure process. Please don't open a public issue for security problems.
MIT — see LICENSE. Use it, fork it, host it, do whatever.