Web app · works offlinePDF tools in the browser · Mar 2026

PrivatePDF

Compress and merge PDFs without uploading them anywhere. All the work happens in your browser tab, and once it has loaded it keeps working with the Wi-Fi off.

Role
Solo, [with Claude Code?]
Timeline
Mar 2026
Stack
HTML, CSS, JavaScript, pdf-lib, PDF.js
Status
Prototype · 2 of 7 tools working
PrivatePDF home page: “PDF tools that respect your privacy”, with Compress and Merge available and five more tools marked coming soon

The home page. Compress and Merge work today; the other five tools are placeholders.

The problem

Most free PDF tools want you to upload the file first.

Compressing or merging a PDF is a two-minute job, and the usual way to do it is to upload the file to someone’s server and download it back.

That’s fine for a menu. It’s less fine for a lease, a bank statement or a scan of your passport, which are exactly the files people need to shrink to get under an upload limit. [What made me build it: the file I was trying to send, and where.]

The browser can already read, rewrite and render PDFs on its own, so I wanted to see how far I could get with no server at all: open the page, drop the file in, and nothing leaves the laptop.

Compress, before a file is added. The lock badge sits at the top of every tool page.
Compress, before a file is added. The lock badge sits at the top of every tool page.
Who it’s for

People with a sensitive PDF and a size limit.

First user

Me

[The documents I actually run through it.]

Wider

Anyone sending documents through an upload form

Visa and job applications, rental paperwork, insurance claims. Forms that cap attachments at a few MB and documents you’d rather not hand to a random website.

Inferred
Also

People on bad connections

After the first visit it runs offline, so a slow or missing connection doesn’t matter.

Inferred
Not for

Editing PDFs

No text editing, signing or forms. It moves pages around and makes files smaller.

Use cases

What you can do with it today.

Get under an upload limitCompress

Drop one PDF in (up to 100 MB), pick low, medium or high compression, and download the smaller copy. It shows the before and after size.

Put a pack of documents togetherMerge

Add two or more PDFs, drag them into order (or use the arrows), and download one file. Each file shows a thumbnail of its first page so you can tell them apart.

Strip the hidden detailsCompress

Every compressed file loses its title, author, creator and producer fields, which often carry a name or the software used.

Use it on a planeOffline

Visit once while online, and the pages and both PDF libraries are cached. A banner at the top says whether you’re online, and that the tools still work if you’re not.

The product

Two tools, five more on the list.

Each tool is one page with one job: drop a file, pick an option, download the result.

A compressed file on medium. The sample is a fictional four-page file of photos; how much a real document shrinks depends a lot on what’s in it.
A compressed file on medium. The sample is a fictional four-page file of photos; how much a real document shrinks depends a lot on what’s in it.
Merge with three fictional documents. Drag the handle or use the arrows to reorder.
Merge with three fictional documents. Drag the handle or use the arrows to reorder.
The merged result: three files, six pages, one download.
The merged result: three files, six pages, one download.
On a phone, the tool cards stack into one column.
On a phone, the tool cards stack into one column.
Compress on a phone. Tapping the drop zone opens the file picker.
Compress on a phone. Tapping the drop zone opens the file picker.

Coming soon

Split, rotate, PDF to images, images to PDF, and watermarks are on the home page, greyed out.

Installable

It has a web app manifest, so it can be added to a phone’s home screen like an app.

How it works

The browser does the work, and a service worker keeps it offline.

There is no backend. The site is static files, and the PDF work is done by two open-source libraries running in the tab.

1 · Load
Static pages
HTML, CSS and a little JavaScript. No accounts, no analytics.
2 · Cache
Service worker
Saves the pages, pdf-lib, PDF.js and the fonts on first visit.
3 · Read
PDF.js
Draws page thumbnails and renders pages for heavy compression.
4 · Write
pdf-lib
Copies pages for merging, rebuilds files and strips metadata.
5 · Save
Your downloads
The result is handed to the browser as a download. Nothing is sent anywhere.
HTML, CSS, vanilla JavaScriptpdf-lib 1.17PDF.js 3.11Service workerWeb app manifest

Compression runs in two passes. First it re-saves the file with pdf-lib, which tidies the structure and drops the metadata. On medium and high it also renders every page to an image and rebuilds the PDF from those images as JPEGs, then keeps whichever of the two versions is smaller.

Product decisions

The main decisions.

No server, so there’s nothing to upload to

WhyThe privacy promise only holds if it can’t be broken by accident. With no backend there’s no upload endpoint, no logs and no storage to secure.
Trade-offEverything is limited by the device. A big file on an old phone is slow, so I capped files at 100 MB.

Make it work offline

WhyIf the tools still run with the Wi-Fi off, that’s the easiest way to show the file isn’t going anywhere. The service worker caches the libraries too, not just the pages.
Trade-offThe first visit has to be online, and a page you’ve never opened can’t load offline. The app catches that and says so instead of showing a broken page.

Rebuild pages as images for heavier compression

WhyMost of the weight in a big PDF is scans and photos, and the browser can’t easily recompress those inside the file. Redrawing each page as a JPEG is the method that reliably shrinks them.
Trade-offOn medium and high, text in the result is no longer selectable or searchable, and links stop working. [Whether to warn about this on screen, or skip it for text-only files.]

Keep whichever version is smaller

WhyRe-encoding can make a text-only PDF bigger. Trying both and keeping the smaller one means compress never hands back a larger file than the simple re-save.
Trade-offMedium and high take longer, because they do the work twice.

Plain JavaScript, no framework

WhyThree pages and two tools didn’t need a build step. The whole app is about 1,300 lines and every file can be cached as is.
Trade-offEach new tool page repeats some markup. That will start to hurt around the seventh tool.
Where it stands

Two tools working, five still to build.

It’s a working prototype. [Whether it’s deployed anywhere, and where.]

Built

  • Compress, with three levels and metadata stripping
  • Merge, with drag to reorder and page thumbnails
  • Works offline after the first visit
  • Installable as a web app
  • Layout that works on a phone

Next

  • Split and rotate pages
  • PDF to images and images to PDF
  • Watermarks
  • A warning when compression will flatten text
0
files uploaded
2 of 7
tools working
100 MB
largest file it accepts
~1,300
lines of code, no framework
  1. 30 Mar 2026Compress, Merge, offline support and the home page
  2. [Date][Next tool shipped]
What I learned

What I took from it.

  • A promise like “your files never leave your device” is easier to keep when there’s nowhere for them to go. Leaving out the server did more for privacy than anything I could have added.
  • Offline support turned out to be the best proof of the privacy claim, and it cost about a hundred lines.
  • [What I’d do differently.]
About the screenshots: they show the real app running on fictional sample PDFs made for this page.