I Built a Privacy-First PDF Tool That Never Uploads Your Files
Hey everyone! π
I've been working on a side project for a while now, and I finally feel ready to share it with the dev community. It's called AeroPDF a collection of free PDF tools that run 100% in your browser.
No uploads. No servers touching your files. Just pure client-side magic.
Why I Built This
We've all been there. You need to quickly merge two PDFs or compress a file before emailing it. You Google "merge pdf online" and end up on some sketchy site that:
- Uploads your file to who-knows-where
- Shows you 47 ads
- Asks you to "sign up for premium" after processing ONE file
- Probably keeps a copy of your data forever
I got tired of it. Especially when dealing with sensitive stuff like contracts, invoices, or personal documents. Why should I trust a random server with my files?
So I thought: What if everything just happened locally?
The Tech Stack
For the curious devs out there, here's what powers AeroPDF:
- Next.js 14 (App Router) For the framework and SSR
- pdf-lib The backbone for most PDF manipulations (merge, split, rotate, etc.)
- PDF.js Mozilla's library for rendering PDF previews
- Tailwind CSS Because life's too short for vanilla CSS
- Deployed on Netlify Simple, fast, free tier is generous
The key insight was that pdf-lib can do almost everything you need for basic PDF operations, and it runs entirely in JavaScript. No backend required.
How It Actually Works
When you drop a file into AeroPDF, here's what happens:
// Simplified example of merging PDFs client-side
import { PDFDocument } from 'pdf-lib';
async function mergePDFs(pdfFiles) {
const mergedPdf = await PDFDocument.create();
for (const file of pdfFiles) {
const arrayBuffer = await file.arrayBuffer();
const pdf = await PDFDocument.load(arrayBuffer);
const pages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());
pages.forEach(page => mergedPdf.addPage(page));
}
return await mergedPdf.save();
}
That's it. The file goes from your device β browser memory β back to your device as a download. The server never sees it.
Features I'm Most Proud Of
- Merge PDF Combine multiple files, drag to reorder
- Split/Extract Pages Visual page picker
- Compress PDF Reduces file size (with quality options)
- PDF to Word Basic text extraction
- E-Sign Draw or type signatures directly on documents
- Password Protection Encrypt PDFs before sharing
And honestly, most of these took way less code than I expected once I figured out the pdf-lib API.
The Privacy Angle
I'm not just saying "privacy-first" for marketing. There's literally no backend processing.
- No file uploads
- No analytics tracking your documents
- No cookies beyond what's needed for the site to function
- Works offline once loaded (it's a PWA)
You can literally disconnect from the internet after the page loads and it still works. Try that with iLovePDF.
Lessons Learned
Browser APIs are powerful FileReader, Blob, URL.createObjectURL() are your friends
pdf-lib is amazing Seriously, huge thanks to the maintainers
SEO for tool sites is hard Competing with established players takes time
Users actually care about privacy The feedback I've gotten shows people appreciate not uploading files
What's Next?
I'm working on:
A Chrome extension for quick access
Try It Out
If you work with PDFs (and who doesn't?), give it a spin: aeropdf.app
It's completely free. No accounts. No limits. No BS.
Would love to hear your feedback or suggestions. And if you're interested in the technical details of any specific feature, drop a comment happy to write a deeper dive!
P.S. If you're building something similar and need help with client-side PDF processing, feel free to reach out. I've learned a lot of tricks along the way.
Top comments (2)
Just a heads up to anyone digging into the code: getting pdf-lib to handle large files purely client-side was a bit of a challenge with memory limits π . If anyone has experience optimizing ArrayBuffers for huge PDFs, Iβm all ears for suggestions!
Love the clean UI. Just tested the merge tool and it was instant. Good stuff. π