A fast, modern, and privacy-focused PDF toolkit that runs entirely in your browser.
No uploads, no servers, no tracking — your files never leave your device.
Try it here → pdf.cloakyard.com
CloakPDF offers 36 powerful PDF tools, all running 100% client-side. Features are grouped by what they do; the order roughly tracks day-to-day usefulness, with the differentiating on-device AI feature leading.
Chat with your PDF using a small AI model running entirely in your browser — no API keys, no server round-trips
| Tool | Description |
|---|---|
| Ask your PDF (beta) | Ask natural-language questions about any PDF and get grounded answers extracted from the document text. Powered by a downloadable small chat model (1.2B or 2.6B parameter tier, your choice). See Local AI below. |
Rearrange, combine, and manage your PDF pages
| Tool | Description |
|---|---|
| Merge PDFs | Combine multiple PDF files into a single document with drag-to-reorder support |
| Split PDF | Divide a PDF into multiple separate files — split every page, every N pages, or at custom points |
| Extract Pages | Select pages visually or by range (e.g., 1-3, 5, 7-9) and save as a new PDF |
| Reorder Pages | Drag and drop to rearrange page order with smooth animations |
| Delete Pages | Select and remove unwanted pages visually |
| Rotate Pages | Rotate individual pages by 90°, -90°, or 180° — or rotate all at once |
| Reverse Pages | Flip the entire page order of a PDF in one click |
| Add Blank Page | Insert a blank page at any position — dimensions match the adjacent page |
| Duplicate Page | Copy any page and insert it at a chosen position in the document |
| Remove Blank Pages | Auto-detect and remove empty pages — adjustable sensitivity with manual override |
| Add Bookmarks | Add a clickable outline so readers can jump to any page instantly |
| File Attachments | View, add, extract, or remove files embedded in a PDF |
Compress, convert, and extract content
| Tool | Description |
|---|---|
| Compress PDF | Reduce file size with 3 quality levels — Light, Balanced, and Maximum |
| PDF to Image | Export pages as PNG or JPEG at 72 / 150 / 300 DPI — single file or ZIP |
| Images to PDF | Convert images (PNG, JPEG) to PDF with A4, Letter, or Fit-to-Image page sizes |
| OCR PDF | Extract text from scanned or image-based PDFs using Tesseract.js OCR |
| Extract Images | Pull all embedded raster images from a PDF — preview, select, and download individually or as a ZIP |
| Crop Pages | Trim page margins by setting a crop box (mm input, uniform or per-side); also removes existing crop boxes to restore the full page |
| Flatten PDF | Remove interactive form fields and annotations, making the PDF non-editable |
| Grayscale PDF | Convert all pages to grayscale — useful for print cost savings and black-and-white output |
| N-up Pages | Arrange multiple pages onto a single sheet (2-up, 4-up, 9-up) for compact printing |
| Contact Sheet | Render all pages as a thumbnail grid for quick visual review — export as PNG or PDF |
| Repair PDF | Fix structural issues in corrupted or malformed PDFs by re-parsing and rebuilding the file |
Add watermarks, signatures, and overlays
| Tool | Description |
|---|---|
| Add Signature | Draw or upload a custom signature image and place it on any page with adjustable size and position |
| Fill PDF Form | Fill text fields, checkboxes, dropdowns, and radio groups in interactive PDF forms |
| Stamp & Watermark | Apply pre-built stamps (DRAFT, APPROVED, CONFIDENTIAL, etc.) in text or seal style, or add a custom text watermark with configurable colour, rotation, and opacity |
| Add Page Numbers | Insert page numbers with 6 position options, 4 formats, and custom styling |
| Header & Footer | Add repeating text (with {{page}} / {{total}} tokens) at the top and bottom of every page |
| Bates Numbering | Stamp sequential identifiers (prefix + zero-padded number + suffix) for legal and compliance workflows |
Protect your PDFs and manage metadata
| Tool | Description |
|---|---|
| PDF Password | Add or remove a password and control print, copy, and edit rights |
| Redact PDF | Permanently black out sensitive text and images |
| Edit Metadata | View, edit, or redact document properties like title, author, subject, keywords, and dates |
| Digital Signature | Sign PDFs with a PKCS#12 certificate or a generated self-signed certificate for authenticity |
| Compare PDFs | Visual side-by-side diff of two PDFs with pixel-level change detection and diff overlay |
| PDF Inspector | View version, page count, dimensions, metadata, and encryption status without modifying |
| No file uploads | Everything is processed locally in your browser |
| No server-side processing | Zero network requests for your files |
| On-device AI | The Ask-your-PDF chat model runs entirely in the browser — no API key, no inference server, no quota |
| No data collection | No analytics, no tracking, no cookies |
| Fully offline capable | Works without an internet connection after the initial model + asset load |
| Category | Technology |
|---|---|
| Framework | React 19 |
| Styling | Tailwind CSS 4 |
| Build Tool | Vite+ (Vite + Rolldown unified toolchain) |
| Language | TypeScript 6 |
| PDF Manipulation | @pdfme/pdf-lib |
| PDF Rendering | PDF.js |
| On-device AI | Transformers.js + LangChain.js / LangGraph |
| Drag & Drop | dnd-kit |
| Icons | Lucide React |
| OCR Engine | Tesseract.js |
| ZIP Export | JSZip |
| Toolchain CLI | Vite+ (vp) |
- Node.js ≥ 24.x (LTS recommended)
- Vite+ (
vp) — install globally vianpm i -g vite-plus
# Clone the repository
git clone https://github.com/cloakyard/cloakpdf.git
cd cloakpdf
# Install dependencies
vp install
# Start the development server
vp dev| Command | Description |
|---|---|
vp dev |
Start the Vite dev server with hot reload |
vp build |
TypeScript check + production build |
vp preview |
Preview the production build locally |
vp check |
Run format, lint, and type checks |
vp test |
Run tests |
cloakpdf/
├── public/ # Static assets
├── src/
│ ├── main.tsx # App entry point
│ ├── App.tsx # Root component with lazy-loaded tools
│ ├── index.css # Global styles & Tailwind theme
│ ├── types.ts # TypeScript type definitions
│ ├── assets/ # Images & icons
│ ├── components/ # Reusable UI components (layout, drop zone, thumbnails, etc.)
│ ├── config/ # Color palette & theme tokens
│ ├── tools/ # One component per tool (merge, split, compress, etc.)
│ └── utils/ # Core PDF operations, file helpers, rendering
├── index.html # HTML entry point
├── vite.config.ts # Vite + Tailwind configuration
├── tsconfig.json # TypeScript configuration
└── package.json
CloakPDF leverages two complementary libraries for full PDF support:
- @pdfme/pdf-lib — Handles all PDF manipulation: merging, splitting, rotation, page deletion, watermarking, signature embedding, image-to-PDF conversion, and metadata editing.
- PDF.js — Renders PDF pages to canvas for visual previews and thumbnail generation.
All operations happen in-memory using the browser's FileReader API and ArrayBuffers. Processed files are delivered as downloadable blobs — no data ever touches a remote server.
Ask your PDF runs a full retrieval-augmented question-answering pipeline entirely in your browser — no API key, no inference server, no usage quota. The model weights download once from Hugging Face's CDN, get cached, and work offline forever after.
Three small models work together on first use (~1.15 GB total on the default Compact chat tier; ~1.9 GB on Quality):
- Chat — LFM2.5-1.2B-Instruct (Compact, default) or LFM2-2.6B (Quality)
- Retrieval — EmbeddingGemma-300M
- Reranking — MS MARCO MiniLM-L-6-v2
For everything else — the LangGraph state machine, the BM25 + dense hybrid retriever, the three deterministic fast-paths, sampling profiles, caching layers, WebGPU vs WASM choices, and the rationale behind every model swap — see the implementation deep-dive:
→ docs/local-ai.md (with diagrams of the graph + ingest pipeline)
CloakPDF is deployed to Cloudflare Workers (with Static Assets) at pdf.cloakyard.com. Cloudflare's Workers Builds Git integration auto-builds and deploys every push to main, with preview deployments for pull requests.
The deploy is driven by wrangler.jsonc — Cloudflare reads this file, runs the build, and serves the dist/ folder as static assets straight from the Worker runtime on Cloudflare's edge network.
Contributions are welcome! See the Contributing Guide for details on how to get started.
This project is licensed under the MIT License — feel free to use it for both personal and commercial purposes. See the LICENSE file for details.
Built with ❤️ by Sumit Sahoo
