An offline-first, browser-based PDF utility built in React. It runs entirely inside your browser's local sandbox โ your documents never leave your device. No cloud servers, no account registration, no subscriptions, and zero tracking.
graph TD
A[Upload Local PDF] --> B[Parse PDF.js locally to memory ArrayBuffer]
B --> C[Render pages on HTML5 Canvas preview]
C --> D{Choose Action}
D -->|Merge| E[Queue 2โ10 PDF files & arrange order]
D -->|Reorder| F[Drag thumbnails in interactive grid]
D -->|Extract Pages| G[Click pages visually OR type page range]
D -->|Extract Images| H[Scan PDF binary stream for embedded images]
D -->|Overlay| I[Draw links / Add text, images, or PNG stamps]
E --> J[Compile operations with pdf-lib]
F --> J
G --> J
H --> J
I --> J
J --> K[Save Version in temporal history tree]
K --> L[Generate local browser Blob URL]
L --> M[Download file directly from RAM to device]
A Local Client architecture means that all computation tasks โ document rendering, image processing, and PDF binary modifications โ are performed directly on the user's machine inside the browser's execution sandbox. Unlike traditional web apps, there is no backend API processing your files.
- File Ingestion: When you load a PDF, the browser reads the file locally via the HTML5 File Reader API, storing it in RAM as an
ArrayBuffer. - Local Rendering: The application uses Mozilla's PDF.js library to parse and paint page layouts directly onto HTML5
<canvas>elements. - Delta Operation Logs: Edits (page sorting, adding stamps/text) are tracked as lightweight JSON delta frames rather than copying entire PDF blobs โ keeping memory usage minimal, especially on mobile.
- Client-Side Compilation: When you hit "Apply & Save", pdf-lib applies the queued operations onto the original byte array inside the browser.
- Direct RAM Download: A local
blob:URI maps to the browser's RAM buffer. When you download, the file is transferred instantly from memory to local storage.
- Visual page grid: All PDF pages are rendered as a clickable thumbnail grid.
- Click-to-select: Click any page to toggle its selection. A purple checkmark overlay highlights selected pages.
- Two-way binding: Selecting pages in the grid auto-updates the
Page Rangetext input (e.g.1, 3-5, 7), and editing the text field immediately updates the visual checkmarks. - Column switcher: Adjust the grid layout using the
Cols: 1 | 2 | 5 | 10toggle.
- Drag-and-drop grid: Drag page thumbnails to rearrange their order using dnd-kit.
- Fullscreen preview: Tap/click any page thumbnail to open a high-resolution fullscreen preview modal with Previous/Next navigation.
- Column switcher: Adjust the grid layout using the
Cols: 1 | 2 | 5 | 10toggle.
- Multi-file queue: Load 2โ10 PDF files and arrange their order in a sortable list.
- Column switcher: View queued files in 1, 2, 5, or 10 column layouts.
- Smart card layout: Cards switch between row layout (1โ2 cols) and vertical card layout (5โ10 cols) to prevent label clipping.
- Links: Draw clickable hyperlink regions over any page area.
- Text: Add text boxes with custom font size and color.
- Stamps: Overlay PNG images (e.g. signatures, watermarks) onto pages.
- Images: Embed raster images directly onto a page.
- Scans the PDF binary stream for embedded raster image assets.
- Displays found images in a downloadable thumbnail grid.
- Column switcher:
Cols: 1 | 2 | 5 | 10.
- Every "Apply & Save" action creates a snapshot in a Git-like temporal history tree.
- Quickly revert to any earlier version within the same session.
- All operations run inside the browser โ zero network requests for file processing.
- Works fully offline as a PWA after the initial page load.
| Feature / Criteria | ๐งฐ Offline PDF Editor | ๐ Online Cloud Tools | ๐ข Adobe Acrobat Pro |
|---|---|---|---|
| Privacy & Security | ๐ 100% Secure: Files never leave your browser. | ๐ข Local / Cloud: Handled locally or via Adobe Cloud. | |
| Offline Capability | ๐ถ Yes: Works fully offline as a PWA once loaded. | โ No: Requires active internet connection. | ๐ป Yes: Native desktop client. |
| Subscription Cost | ๐ 100% Free: No paywalls, ads, or usage limits. | ๐ณ Freemium: Limits on size/frequency; paid plans required. | ๐ฐ Expensive: High monthly recurring subscription cost. |
| Installation | ๐ Zero Install: Open instantly via web URL. | ๐ Zero Install: Web-based but bandwidth heavy. | ๐ฟ Heavy: Requires gigabytes of disk space. |
| Mobile Experience | ๐ฑ Mobile-First: Smooth touch layouts with drag-and-drop. | ๐ฑ Native App: Requires large app store downloads. | |
| Version History | ๐ชต Git-like version tree: Track and revert to past states. | โ None: Single-file outputs with no revert states. | ๐ Document History: Basic track-changes log. |
| Visual Page Selection | โ Click-to-select grid with live range sync. | โ Text-input only in most tools. | โ Available in Pro tier. |
The application translates instantly across 12 languages:
| Flag | Language (Local Name) | Language (English Name) | Code | Type |
|---|---|---|---|---|
| ๐ธ๐ฆ | ุงูุนุฑุจูุฉ | Arabic | ar |
Primary |
| ๐จ๐ณ | ไธญๆ | Chinese | zh |
Primary |
| ๐ฌ๐ง | English | English | en |
Primary |
| ๐ฎ๐ณ | เคนเคฟเคจเฅเคฆเฅ | Hindi | hi |
Primary |
| ๐ฎ๐ฉ | Bahasa Indonesia | Indonesian | id |
Primary |
| ๐ฎ๐ช | Gaeilge | Irish | ga |
Primary |
| ๐ฏ๐ต | ๆฅๆฌ่ช | Japanese | ja |
Primary |
| ๐ฎ๐ฉ > ๐พ | Basa Jawa | Javanese | jv |
Regional / Local |
| ๐ฒ๐พ | Bahasa Melayu | Malay | ms |
Primary |
| ๐ท๐บ | ะ ัััะบะธะน | Russian | ru |
Primary |
| ๐ช๐ธ | Espaรฑol | Spanish | es |
Primary |
| ๐ป๐ณ | Tiแบฟng Viแปt | Vietnamese | vi |
Primary |
Language can be switched instantly from the language selector in the top navigation bar.
- Desktop: Fixed sidebar layout. The left sidebar is frozen (non-scrolling) while the main content area scrolls independently.
- Mobile: Drawer-based navigation with a bottom sheet for tool parameters.
- Column Grid Toggle: All page/file grids support
Cols: 1 | 2 | 5 | 10to adjust density. - Fullscreen Page Preview: Tap any page thumbnail in Reorder mode to open a full-resolution preview modal with Previous/Next navigation.
- Unsaved Session Warning: Refreshing or closing the tab while a file is open prompts a browser confirmation dialog to prevent accidental data loss.
- Node.js (v18+)
- npm
# Clone the repository
git clone <repository-url>
# Install dependencies
npm install
# Start local development server
npm run dev
# Compile production bundle
npm run build| Layer | Library |
|---|---|
| UI Framework | React 18 + Vite |
| PDF Rendering | PDF.js (Mozilla) |
| PDF Manipulation | pdf-lib |
| Drag & Drop | dnd-kit |
| Styling | Tailwind CSS |
This project is open-source. Contributions and forks are welcome.