How to split a PDF
- Drop your PDF into the zone above, or click "choose a file" to browse.
- Choose a mode: Extract pages to pull out specific pages, or Split all pages to turn every page into its own file.
- For extraction, type the pages you want — for example
1, 3, 5-8pulls pages 1, 3, 5, 6, 7, and 8 into a single PDF. Ranges and individual page numbers can be combined freely. - Click the download button. A PDF (for extraction) or a ZIP archive (when splitting all pages) saves directly to your downloads folder.
Everything runs inside the browser tab you have open. No file is sent anywhere.
Open DevTools (F12), go to the Network tab, and run the tool — you will see zero upload requests.
When to split a PDF
- Sharing one chapter from a report — extract pages 14–27 and send only the section that's relevant, rather than a 150-page document.
- Separating a combined invoice file — an accountant receives a single PDF with twelve monthly invoices; splitting yields twelve individual files that can be filed separately.
- Isolating a signed page — you receive a countersigned contract and need just the signature page to attach to another package.
- Splitting a scanned document stack — a batch scan of multiple letters came out as one file; splitting all pages lets you rename and archive each letter individually.
- Removing a cover page before sharing — extract everything except page 1 to strip an internal cover sheet from a document before sending it externally.
How it works under the hood
keptlocal uses pdf-lib,
an open-source JavaScript library that reads and writes PDF structure directly in the browser.
When you upload a file, its bytes are read into an ArrayBuffer in your browser's memory — the data stays in the tab, not on any server.
For extraction, the tool creates a new blank PDF document and copies the requested page objects from the source. For split-all, it creates one new document per page. Page content — text layers, fonts, images, vector graphics — is copied byte-for-byte without re-rendering, so the output is identical in quality to the original.
When you split all pages of a multi-page PDF, the individual files are bundled into a ZIP archive using JSZip, which also runs in-browser. The ZIP is assembled in memory and downloaded as a single file — again, no server involved.
Limits and what to expect
- File size: no enforced limit. Very large PDFs (several hundred megabytes) may be slow depending on your device's RAM.
- Password-protected PDFs: the tool attempts to open encrypted files using the
ignoreEncryptionflag. If the PDF requires a password to view its content, splitting will fail — unlock it in your PDF reader first and save a new copy. - Embedded forms and annotations: copied on a best-effort basis. Complex interactive forms may lose field state in split documents.
- Split-all on large documents: splitting a 200-page PDF into 200 individual PDFs takes a few seconds and produces a ZIP. Expect 1–3 seconds of processing time per 50 pages on a modern laptop.
- Browser support: works in any modern browser — Chrome 90+, Firefox 90+, Safari 15+, Edge 90+. Older browsers without WebAssembly support will not work.
Privacy: what happens to your file
Nothing leaves your machine. When you drop a PDF into keptlocal, the browser reads the file bytes directly into JavaScript memory using the
File and ArrayBuffer APIs. There is no upload step, no WebSocket connection, no proxy — the network is not involved at all.
This matters particularly when splitting sensitive documents: legal filings, medical records, financial statements, confidential reports. With server-based tools you are trusting a third party's infrastructure and deletion policy. With keptlocal the question does not arise, because the file bytes are local from start to finish.
Compare this to the dominant PDF tools: iLovePDF, Smallpdf, and Sejda all upload your file to their servers for processing. Their privacy policies promise deletion within hours, but you have no way to verify that. keptlocal's architecture makes the promise verifiable — you can watch the Network tab while it runs.