How CuroPDF Works — Your Files Never Leave Your Browser
CuroPDF uses PDF.js, jsPDF and WebAssembly to process your documents entirely inside your browser tab. Here’s the full technical explanation.
Thank you for reading this post, don't forget to subscribe!The short version
When you use a CuroPDF tool, your file is never sent anywhere. The PDF processing code runs inside your browser tab, on your device. Your document goes in, gets processed, comes out — all locally. We never see it.
The technology behind it
CuroPDF uses three browser technologies to process PDFs locally:
PDF.js (Mozilla)
Mozilla’s open-source PDF renderer. It reads, parses and renders PDF pages inside your browser. The same engine powers Firefox’s built-in PDF viewer.
jsPDF
A JavaScript library for creating PDF files. Used to build the output PDF — merge results, compressed files, numbered pages — directly in browser memory.
WebAssembly (Wasm)
Allows near-native performance in the browser. Used by Tesseract.js for OCR — runs Google’s Tesseract engine at C++ speed inside your tab.
JSZip / SheetJS
Used for tools that handle ZIP archives (PDF to JPG, Split PDF) and spreadsheets (Excel to PDF, PDF to Excel). All browser-side, all local.
Step by step: what happens when you use a tool
Example: Merging two PDFs
1. You visit curopdf.com/merge-pdf
Your browser downloads the tool page — HTML, CSS, JavaScript, and the PDF.js and jsPDF libraries. Total download: ~500KB. No data sent to us yet.
2. You select your PDF files
The files are read into your browser’s memory using the File API. They stay on your device — no upload, no network request.
3. PDF.js parses each document
The library reads the PDF structure entirely in JavaScript — pages, fonts, images, content streams. All in your browser tab.
4. Pages are rendered to canvas
Each page is drawn onto an invisible HTML canvas element. This is how the content is captured without needing a server-side renderer.
5. jsPDF assembles the output
A new PDF is constructed in browser memory with all pages combined in order.
6. Download is triggered
A download link is created pointing to a Blob URL — a temporary reference to the file in your browser memory. The file downloads directly from your own browser to your device.
Verifying the privacy yourself
You don’t have to take our word for it. Here’s how to verify that no files are uploaded:
- Open any CuroPDF tool in Chrome or Firefox
- Press F12 to open DevTools
- Click the Network tab
- Upload and process a file
- Look at the network requests — you will see zero outbound file uploads
✅ You’ll see requests to load fonts and library scripts, but zero requests that send your PDF data anywhere. That’s our privacy guarantee, visible in plain sight.
Browser compatibility
- ✅ Chrome 90+ (desktop and Android)
- ✅ Firefox 88+ (desktop and Android)
- ✅ Safari 14+ (Mac, iPhone, iPad)
- ✅ Edge 90+ (desktop)
- ✅ Samsung Internet 14+
- ⚠️ IE11 — not supported (WebAssembly not available)
Performance on large files
Because processing happens on your device, speed depends on your hardware. A modern laptop processes a 50-page PDF in 5–15 seconds. Older phones may take 30–60 seconds for large documents. The progress bar shows real-time progress so you always know what’s happening.
