Skip to content
Let's Talk

Own Product

PDFThor — Client-Side PDF Editor

Fully client-side PDF editor built as an embeddable library — documents never leave the browser. PKI digital signatures (PAdES), AES-256 encryption, and an AI document chat, shipped as framework-agnostic web components.

March 2026 - PresentWeb
0Server calls per document
PAdES B-TSignature profile with timestamp
3Browser engines under test

The Challenge

Legal and finance teams work on contracts every day, and uploading them to a hosted editor puts confidential documents on someone else’s server. The operations that matter for those documents are the ones that are hardest to get out of a data centre: PAdES signatures, AES-256 encryption, and redaction that actually removes the text instead of painting a black rectangle over it. Vendors such as Apryse solve this behind per-seat licences and server round trips. What was missing was an editor that runs entirely in the browser and can still be embedded into an existing product.

PAdES signature checked in the browser, no server involved
PAdES signature checked in the browser, no server involved

The Approach

PDFThor is split in two packages. @pdfthor/core holds every PDF operation as a pure function from bytes to bytes and is not allowed to touch a browser API; @pdfthor/ui ships the interface as Web Components, so it drops into React, Angular or plain HTML alike. Rendering runs on pdf.js, writing on pdf-lib. The cryptography runs in the browser as well: PKCS#12 certificates are parsed, CMS structures are assembled for PAdES B-B and B-T including an RFC 3161 timestamp, and AES-256 encryption is written with individual permission flags. Redaction rewrites the content stream, and the AI panel answers questions about the open document with the user’s own API key.

A document that never leaves the browser cannot leak on the way.

Impact & Results

The core carries 32 operation modules today: signatures, encryption, redaction, forms with XFDF import and export, page operations, watermarks, bookmarks, search and text markup. Behind them stand 2,839 unit tests and 952 end-to-end tests that run on Chromium, Firefox and WebKit. The demo ships an eight-page sample contract with form and signature fields, and every screenshot on this page comes from a scripted run against that document, so the images stay in step with the product. PDFThor is still in development and has no production users; the audit against Apryse records what is still open.

Contact data and bank details marked before the text is removed
Contact data and bank details marked before the text is removed

My Role

Solo developer and architect. Responsible for the package split and the rules that keep it clean, all PDF operations in the core, the crypto path for signatures and encryption, the Web Component layer with its controller pattern, the demo application, the unit and end-to-end test setup, and the screenshot pipeline behind the images on this page.

TypeScriptWeb ComponentsVitepdf.jspdf-libGemini APIPlaywrightVitest
Highlights and notes, listed alongside the document
Highlights and notes, listed alongside the document
AcroForm fields filled and exported as XFDF or JSON
AcroForm fields filled and exported as XFDF or JSON
Questions about the open document, answered from its text
Questions about the open document, answered from its text
AES-256 encryption with per-permission control
AES-256 encryption with per-permission control

Got a similar challenge?

Tell me about your challenge. I'll share how I'd approach it — and a realistic timeline.

This website uses third-party services (Google reCAPTCHA, Calendly) that may set cookies. See our Privacy Policy for details.