DMITRY MELNIKOV
Project 09· Personal

CaxtonPDF

Local-first PDF manipulation. Fast, private desktop PDF viewer and editor with WASM and offline OCR.

Year2026
StatusDone
Stack
Electron · Vue · Vite · JavaScript · mupdf.js (WASM) · Tesseract.js
Backend
Web Workers · WebAssembly
Protocols
Electron IPC · Web Worker postMessage
One-liner
Full PDF editing without SaaS subscriptions.
Fig. 01

Main window

Overview01

A private PDF workstation built for speed and complete local sovereignty.

CaxtonPDF was created to replace proprietary PDF software like PDF Expert and Adobe Acrobat Pro for personal use without relying on recurring SaaS subscriptions or cloud document uploads.

Built as a native Electron desktop application for macOS and Linux, CaxtonPDF offloads all PDF operations—rendering, annotations, redactions, form filling, visual signature stamping, metadata editing, page grafting (merge/split/reorder), offline OCR, and in-place text editing—to WebAssembly running inside isolated Web Workers.

By using official Artifex bindings (mupdf.js), the application keeps rendering and document mutation consolidated inside a single engine, ensuring fast document rendering without UI stutter.

Timeline Q1 · 2026 Scope Desktop App Engineering
WASM Engine Integration
Worker Protocol Architecture Scale Single-engine (mupdf.js)
100% Offline & Zero Telemetry

Architecture02

Multi-threaded isolation with non-blocking WebAssembly execution.

CaxtonPDF architecture diagram showing Electron main process, renderer Vue UI, pdf.worker.js with mupdf.js WASM, and ocr.worker.js with Tesseract.js
Fig. 02 — System Topology · Electron process isolation, renderer Vue UI, and dual background Web Workers
Decisions03

Architectural choices for performance and privacy.

/01
Single mupdf.js WASM Engine

Rather than stitching together multiple libraries for rendering, annotations, and form filling, we consolidated all PDF manipulation inside official mupdf.js WebAssembly bindings. This eliminates inconsistencies between visual rendering and saved output.

Tradeoff · AGPL-3.0 licensing requirement, unified rendering & editing stack
/02
Dual Web Worker Architecture

To prevent heavy WebAssembly and OCR operations from locking the main thread, PDF parsing and Tesseract.js recognition run in dedicated background Web Workers. The Vue 3 UI remains responsive even during complex page rendering and multi-page grafts.

Tradeoff · postMessage serialization overhead, 60fps main UI painting
/03
100% Offline OCR & Unicode Embedding

Tesseract.js language packs (eng, rus, heb, por) and Noto Sans Unicode TTF fonts are bundled directly in the local application package. Scanned documents can be OCR’d into searchable PDFs without contacting external CDNs or servers.

Tradeoff · +11MB local asset bundle, complete privacy and offline usability
/04
Structured Text Run Redaction & Re-insertion

In-place text editing extracts bounding boxes via toStructuredText(), overlays editable text inputs, and on commit applies genuine PDF redaction before re-inserting glyphs with embedded font resources.

Tradeoff · position-sensitive glyph alignment, native PDF text editing

Outputting clean documents with clarity and speed.

— William Caxton
Outcome05

A powerful desktop utility built to last.

CaxtonPDF successfully replaced commercial subscription tools in daily usage. It delivers responsive document navigation, crisp HiDPI display scaling, and comprehensive PDF editing capabilities—all within a zero-telemetry, local-first desktop application.

Impact Zero subscription fees
Sub-100ms render times Cost Personal project Next Batch PDF processing
Keyboard navigation shortcuts

Fig. 02

Desktop app showing a collection of e-books and articles.

Fig. 03

Documents section with scanned docs, grouped

Fig. 04

Collection of music with ability to play

Fig. 05

Collection of music with ability to play

Fig. 06

Collection of music with ability to play

Fig. 07

Collection of music with ability to play

Fig. 08

Collection of music with ability to play