Simple, cross-platform OpenPGP encryption for your clipboard.
Copy. Encrypt. Paste. — Copy. Decrypt. Read.
Installation • Features • Quick Start • Build • Contributing
KeychainPGP brings the simplicity of OpenKeychain to the desktop. No command-line flags, no certificate managers, no configuration — just encryption that works.
| Platform | Formats | Portable | Requirements |
|---|---|---|---|
| Windows | .exe · .msi |
.zip |
Windows 10+ |
| macOS | .dmg |
— | macOS 10.15+ |
| Linux | .AppImage · .deb |
.tar.gz |
glibc 2.35+, WebKit2GTK 4.1 |
| Android | .apk (arm64, arm, x86_64) |
— | Android 7.0+ |
[!NOTE] Linux users: Pre-built binaries require glibc 2.35 or newer (Ubuntu 22.04+, Debian 12+, Fedora 36+, RHEL 9+). On older distributions, build from source.
[!TIP] Android users: Obtainium lets you install and update KeychainPGP directly from GitHub releases — no app store required.
.portable marker and run from a USB stickKeychainPGP is a Rust workspace with six crates:
keychainpgp/
├── crates/
│ ├── keychainpgp-core # OpenPGP crypto engine (Sequoia-PGP)
│ ├── keychainpgp-keys # Keyring: SQLite + OS credential store
│ ├── keychainpgp-clipboard # Clipboard monitoring, PGP detection, auto-clear
│ ├── keychainpgp-ui # Tauri v2 desktop + Android app (Svelte 5)
│ ├── keychainpgp-cli # CLI binary
│ └── keychainpgp-wasm # WASM bindings for the web app
└── web/ # Standalone Vite + Svelte 5 SPA (WASM)
| Crate | Purpose |
|---|---|
keychainpgp-core |
Pure-Rust OpenPGP operations — encrypt, decrypt, sign, verify. No I/O. |
keychainpgp-keys |
Key storage with SQLite and OS credential store (Keychain/DPAPI/Secret Service) |
keychainpgp-clipboard |
Clipboard watching, PGP message detection, timed auto-clear |
keychainpgp-ui |
Tauri v2 desktop & mobile app with Svelte 5 frontend |
keychainpgp-cli |
Command-line interface for scripting and headless use |
keychainpgp-wasm |
WebAssembly bindings — same crypto engine in the browser |
rust-toolchain.toml)# Clone the repository
git clone https://github.com/keychainpgp/keychainpgp.git
cd keychainpgp
# Install frontend dependencies
cd crates/keychainpgp-ui/frontend && npm install && cd ../../..
# Build the desktop app
cargo build --release -p keychainpgp-ui
# Or build the CLI only
cargo build --release -p keychainpgp-cli
# Install git hooks (pre-commit: fmt + clippy, pre-push: tests)
./scripts/install-hooks.sh # Linux / macOS / Git Bash
.\scripts\install-hooks.ps1 # PowerShell
# Run the desktop app in dev mode (hot-reload)
cd crates/keychainpgp-ui && cargo tauri dev
# Run all tests
cargo test --workspace
# Lint
cargo clippy --workspace -- -D warnings
cargo fmt --all -- --check
# Build the WASM package
wasm-pack build crates/keychainpgp-wasm --target web --out-dir ../../web/pkg
# Run the web app locally
cd web && npm install && npm run dev
# Requires JDK 17+ and Android NDK
cd crates/keychainpgp-ui
npx @tauri-apps/cli android build --debug
Contributions are welcome! Please read the Contributing Guide before submitting a PR.
TL;DR:
./scripts/install-hooks.sh to set up git hooksgit checkout -b feature/your-featurecargo test --workspace && cargo clippy --workspace -- -D warningsThis project follows the Contributor Covenant v2.1.
If you discover a security vulnerability, do NOT open a public issue. Please email keychainpgp@protonmail.com instead.
See SECURITY.md for full details.
If you find KeychainPGP useful, consider supporting its development:
Dual-licensed under MIT or Apache-2.0, at your option.
Made with care for journalists, activists, and anyone who needs simple encryption.