Own Product
PDFThor — Client-Side PDF Editor
PDFThor is a full PDF editor that runs directly in the browser. The PDF file stays on the user's computer and is not uploaded to an external server. Features like signing, encrypting, redacting or filling in forms run entirely locally in the browser. PDFThor can be embedded as a Web Component in React, Angular or plain HTML. The same principle applies to AI features: the customer decides which model is used, where it runs, and whether document content is passed to a model at all.

The Challenge
Contracts, personnel files, patient records or letters from public authorities often contain information nobody wants to hand to an external service. Until now that left two options. Either PDF editing runs through a hosted provider. Then questions about data processing agreements, storage location and data protection come up immediately. With particularly sensitive data or professional confidentiality, that can quickly rule the option out. Or the company builds the PDF editor itself. That gives full control, but it takes a lot of time and ties up its own development capacity for good. PDFThor sits in between: the editor runs directly in the user's browser and is integrated into the existing application. The document does not have to pass through an additional service.

The Approach
PDFThor is split into two packages. @pdfthor/core holds the actual PDF logic and works entirely independently of the browser: every operation takes bytes and returns bytes. @pdfthor/ui builds the user interface on top of it as Web Components, which is why it fits into React or Angular just as well as into a plain HTML application. PDFThor uses pdf.js for rendering and pdf-lib for changes to the document. Signatures, encryption and redaction are also processed directly in the browser. PKCS#12 certificates can be read in, PAdES B-B and PAdES B-T signatures including RFC 3161 timestamps can be created, and PDFs can be encrypted with AES-256. Permissions can be set individually. A redaction rewrites the actual content stream of the PDF, so the redacted content is not merely covered up visually. @pdfthor/ui already comes with the complete editor: menu and tool bars, page preview and the flow for splitting a document. Anyone integrating PDFThor does not have to assemble that interface themselves. The PDF file itself always stays on the user's computer. The only data that can leave it is data the embedding application explicitly releases: an exported DocumentState with form values, text fields and notes, or document text for an AI feature. The built-in AI panel currently uses Gemini. The request is made with the user's own API key, so the operator of the application controls which AI service is used.
The PDF file stays with the user and is not transferred to an external service.
Impact & Results
The core already covers the main PDF features completely: signing, encrypting, redacting and forms including XFDF import and export. On top of that come page operations such as splitting, merging, inserting, deleting, rotating, reordering and duplicating. Typical editing features are included as well, among them watermarks, headers and footers, bookmarks, search, text highlights, notes, stamps, freehand drawings, shapes and images. Metadata can be removed from a document too. Both packages are covered by unit tests. The end-to-end tests additionally run in Chromium, Firefox and WebKit. The demo comes with an eight-page sample contract containing form and signature fields. The screenshots on this page are not created by hand either, but generated automatically with Playwright against exactly that document. That way they always show the current state of the editor. PDFThor is still in development and is not yet used in production by customers.

My Role
Solo developer and architect. Responsible for the split into two packages and the rule that keeps the core free of browser APIs, for 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.





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