Sign PDFs locally — drop in your handwritten signature, done.
A lean desktop app for Windows 11 and macOS that places your signature (saved as a PNG) onto any PDF. No cloud, no account, no upload. Your documents never leave your machine.
Signing a PDF should not mean printing it, scanning it again, or uploading a contract to some online service. Most "free" PDF signers either live in the cloud or come bundled in heavyweight office suites.
ECpdfSign does one thing well:
Open a PDF → insert your signature → place it → save a signed copy.
It is small (a native Tauri app, typically a few MB), fast, and works completely offline.
| Feature | Status | |
|---|---|---|
| 📄 | Open a PDF and preview it. Multi-page documents get a thumbnail strip, like a print dialog | ✅ done |
| ✍️ | Insert your signature as a PNG with transparency. The page shows through, in the preview and in the saved PDF | ✅ done |
| 🖱️ | Move, scale and rotate signatures with the mouse. Place as many as you like, on any page | ✅ done |
| 📅 | Add place/date texts such as München, 17.10.2026: edited on the page, date from a calendar, any number of them | ✅ done |
| 🔤 | Full Unicode text (ä, ö, ü, ß, Ł, ø, …) with an embedded Noto Sans subset | ✅ done |
| 💾 | Save as a new PDF (suggested name <Name>_signiert.pdf). The original stays untouched unless you explicitly overwrite it |
✅ done |
| 🎯 | WYSIWYG: the saved PDF matches the preview, including rotated pages and offset crop boxes | ✅ done |
| A warning before saving would invalidate existing digital signatures in the PDF | ✅ done | |
| 🛟 | A prompt before opening another PDF discards unsaved work | ✅ done |
| 🔒 | 100 % local processing: no network access, strict content security policy | ✅ by design |
Version 0.1.0: every v1 feature is implemented, tested and working on Windows 11 and macOS.
- Downloads: a portable Windows EXE and a universal macOS DMG (Apple silicon and Intel) on the Releases page.
- About 400 automated tests, Vitest for the frontend and PDF output and
cargo testfor the backend. They run on Windows and, for every release, on macOS. - Tested by hand on Windows 11 and macOS.
- Installers are not code-signed yet. On first start, Windows SmartScreen and macOS Gatekeeper will warn. Code signing is planned (see Roadmap).
- Password-protected or encrypted PDFs cannot be opened yet; the app shows a message. Support is planned.
- Characters that Noto Sans does not have (e.g. CJK, emoji) appear as empty boxes in the saved PDF.
- Opaque annotations in the source PDF can cover a placed signature.
- Some special PNGs (interlaced, animated APNG, …) are rejected. Support is planned.
The toolbar has four buttons, usable in any order:
| Button | What it does |
|---|---|
| PDF Öffnen | Opens a PDF. Pick a page in the thumbnail strip on the left. |
| Ort/Datum einfügen | Adds a place/date text next to the selected signature, or centered on the page. Type the place, pick the date. |
| PNG Unterschrift einfügen | Adds your signature PNG to the current page. |
| Speichern | Saves a signed copy through a "Save as" dialog. |
Working with placed elements:
- Move: drag with the left mouse button held down.
- Scale: corner handles keep the aspect ratio; edge handles stretch a signature. A text only scales, so its glyphs are never distorted.
- Rotate: drag the handle above the frame. It snaps at 0°/90°/180°/270°, and Shift rotates in 15° steps. Double-click the handle to reset to 0°.
- Edit a text: double-click it. Enter applies the edit, Esc discards it. The text can be moved, scaled and rotated while you edit.
- Remove: the × on the frame, or Entf / Backspace.
ECpdfSign adds a visible image signature, just like signing a printout by hand and scanning it. This is fine for most everyday documents.
It is not a cryptographic digital signature (PAdES / advanced or qualified electronic signature under eIDAS). If a document legally requires one, use a certificate-based signing tool. Saving also invalidates digital signatures that are already in the PDF. ECpdfSign warns you before that happens.
| Layer | Technology |
|---|---|
| App shell | Tauri 2, using the OS webview (WebView2 / WebKit) |
| Backend | Rust: file dialogs, reading, atomic writing |
| Frontend | Vanilla TypeScript + Vite, no UI framework |
| PDF rendering | pdf.js |
| PDF writing | pdf-lib + @pdf-lib/fontkit |
| Font | Noto Sans (SIL Open Font License 1.1) |
- Rust (stable)
- Node.js LTS
- Windows: Microsoft C++ Build Tools and WebView2 (preinstalled on Windows 11)
- macOS: Xcode Command Line Tools (
xcode-select --install)
npm install
npm run tauri devnpm test # frontend and PDF output (Vitest)
cd src-tauri && cargo test # backendnpm run tauri buildThe installers end up in src-tauri/target/release/bundle/ (.msi / .exe on Windows, .app / .dmg on macOS).
ECpdfSign/
├── src/ # Frontend (TypeScript, HTML, CSS)
│ ├── pdf/ # pdf.js rendering and pdf-lib saving
│ ├── placeDate/ # Place/date formatting and font metrics
│ ├── signature/ # PNG checks and embedding
│ ├── ui/ # Toolbar, thumbnails, page view, overlay, editor
│ └── assets/fonts/ # Bundled Noto Sans (see its README)
├── src-tauri/ # Rust backend and Tauri configuration
│ └── icons/ # App icons (generated from app-icon.png)
├── _bmad/ # BMAD method configuration
├── _bmad-output/ # Spec, stories and implementation notes
├── app-icon.png # Source icon (1024×1024)
└── app-icon.svg # Editable vector source of the icon
To regenerate the app icons after changing app-icon.png, run npm run tauri icon app-icon.png.
ECpdfSign is a slim BMAD Spec → Build project, developed with Claude Code.
The spec and its six stories live in _bmad-output/specs/spec-ecpdfsign.
Every story went through a spec review, implementation, and a three-layer code review.
- Open and preview PDF, with a thumbnail strip
- Insert PNG signature
- Place, scale and rotate signatures
- Save signed PDF
- Optional place / date texts
- Warning before invalidating existing digital signatures
- Windows (portable EXE) and macOS (universal DMG) releases
- Remember the last used signature
- Code-signed app: a signed Windows installer and a signed and notarized macOS app, so there are no SmartScreen or Gatekeeper warnings
- Password-protected PDFs: open encrypted PDFs after asking for the password, and save the signed copy
- Special PNGs: accept interlaced, animated (APNG, first frame) and other unusual PNG variants as signatures
Bug reports, ideas and pull requests are welcome. See CONTRIBUTING.md. Before a first pull request can be merged, contributors sign the Contributor License Agreement with a single comment.
Copyright (C) 2026 Matthis
ECpdfSign is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License v3.0 as published by the Free Software Foundation. It is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose.
For use under other terms, for example in proprietary software, commercial licenses are available on request.
Third-party components keep their own licenses (Tauri, pdf-lib and fontkit: MIT/Apache-2.0; pdf.js: Apache-2.0; Noto Sans: SIL Open Font License 1.1).