GitHub - Brumbelow/clipd: Clipboard history manager written in rust

5 min read Original article ↗

clipd

Local-first clipboard history manager for Windows 11.

clipd is a single-binary clipboard manager that captures everything you copy, indexes it for fuzzy search, and pastes any past entry back with full format preservation — without ever leaving your machine.

Why clipd

Win+V has a 25-item cap, no real search, no filtering, and cloud-syncs by default with no clear opt-out. ClipboardFusion / ArsClip / Ditto are aging Win32/.NET UIs without fuzzy search or developer affordances.

clipd:

  1. Fast fuzzy search — nucleo-ranked fuzzy matching over your whole history, filtered live as you type. The picker window cold-spawns in a few hundred milliseconds; once open, search is effectively instant.
  2. Local-only by default — no cloud sync, ever.
  3. Encrypted at rest — DPAPI-wrapped AES-GCM, per-user keying.
  4. Password-manager-aware — respects ExcludeClipboardContentFromMonitoring, detects high-entropy secrets, refuses to store sensitive content.
  5. Dev-friendly — auto-classifies entries (URL / JSON / hash / base64 / code), preserves all formats on paste-back, search syntax for date filters.
  6. Single static binary — no runtime, no installer required.

Install

  1. Download the latest clipd-vX.Y.Z-x86_64-pc-windows-msvc.zip from Releases.

  2. Unzip anywhere — %LOCALAPPDATA%\Programs\clipd\ is a sensible choice but anywhere works; the autostart entry records whatever path you unzip to.

  3. Open a terminal in the unzipped folder and run:

    .\clipd.exe install --autostart
    

    This writes HKCU\Software\Microsoft\Windows\CurrentVersion\Run\clipd pointing at clipd.exe --daemon.

  4. Reboot (or start the daemon manually with .\clipd.exe --daemon).

  5. Press Win+Alt+C — the picker opens.

To remove autostart: .\clipd.exe uninstall.

Building from source

Requirements: Rust 1.78+ (rustup default stable), Windows 10+ with the x86_64-pc-windows-msvc target.

The binary lands at target/release/clipd.exe. cargo test runs the unit suite — the DPAPI paths in store::crypto only execute on Windows, but the rest of the tree builds and tests on Linux dev hosts via the identity-wrap stub in src/platform/keyring.rs.

The release flow (signing, zipping, uploading) is documented in RELEASING.md.

First-run SmartScreen warning

clipd.exe is signed via Microsoft Trusted Signing. SmartScreen also weighs application reputation, which builds with download volume; until reputation accumulates, the first time you run the binary you may still see "Windows protected your PC."

If that happens:

  1. Click More info.
  2. Click Run anyway.

Once SmartScreen has seen the signature on enough machines, the warning goes away on its own — you do not need to take any action to make that happen.

Usage

Picker (default)

Press Win+Alt+C to open the picker.

Key Action
Type Live fuzzy filter
↑ / ↓ Navigate results (list follows the selection)
Enter Restore selection to clipboard, close picker
Esc Close picker
Ctrl+P Pin / unpin selected entry
Delete Delete selected entry
Click Select row
Double-click Restore row to clipboard, close picker

Search syntax

Prefixed tokens filter the results (in the picker query or clipd search):

  • :pinned — pinned entries only
  • :today, :yesterday
  • :Nd — last N days, e.g. :7d
  • >YYYY-MM-DD — entries after that date
  • <YYYY-MM-DD — entries before that date
  • YYYY-MM-DD..YYYY-MM-DD — range

Combine with text: :7d kubectl matches "kubectl" entries from the last week. Text matching in the picker is fuzzy (kgp finds kubectl get pods); the CLI matches substrings.

CLI

Command Effect
clipd pick Open picker (default if no subcommand)
clipd list [--limit N] Print recent entries
clipd search <query> [--limit N] Substring search; accepts filter tokens: clipd search :7d kubectl
clipd delete <id> Delete entry by id
clipd pin <id> [--unpin] Pin / unpin entry
clipd pause / clipd resume Pause / resume capture (daemon stays up)
clipd doctor Diagnostics: config, key file, DB integrity, pipe, hotkey (works even when config.toml is malformed)
clipd config [--path] Print effective config as TOML (default, aka --show), or the file path with --path
clipd install --autostart Add HKCU Run entry
clipd uninstall Remove HKCU Run entry
clipd --daemon Run the daemon directly (autostart calls this)
clipd --config <path> <cmd> Use an alternate config file (global flag, works with every command)

Configuration

Config lives at %APPDATA%\clipd\config.toml. The file is created on demand — defaults apply if it's absent. See config.example.toml for every section, with defaults and one-line descriptions:

  • [hotkey] — chord (default win+alt+c)
  • [retention] — days + max entries (default 30 days, 5000 entries)
  • [picker] — result limit
  • [secrets] — entropy heuristics tuning
  • [capture] — exe-name exclusions, sensitive-content policy (skip | mark)
  • [paths] — override data dir (default %APPDATA%\clipd\)

Run clipd config --show to print the effective merged config, or clipd config --path for the resolved file path.

Security

What clipd defends against

  • Encryption at rest — every clipboard payload is encrypted with AES-GCM using a per-install 32-byte key. The key is wrapped with Windows DPAPI (CryptProtectData), tied to your user account, and stored at %APPDATA%\clipd\key.dpapi. Another Windows user on the same machine cannot decrypt your clipboard history. A stolen disk image without your Windows credentials is unreadable.
  • Password-manager exclusion — clipd refuses to store payloads tagged with the ExcludeClipboardContentFromMonitoring clipboard format (Bitwarden, 1Password, KeePass, modern browsers all set this). It also detects browser-extension password-manager copies that don't surface the format flag.
  • Secret-pattern heuristics — OpenAI / GitHub / Slack / AWS keys, JWTs, PEM blocks, and high-entropy short tokens are recognized and dropped (or marked sensitive, see config).
  • No cloud sync, ever — clipd is a local-only tool. There is no opt-in sync, no telemetry, no network code.

What clipd does NOT defend against

  • Malware running as the same Windows user. DPAPI cannot defend against this — the malware can call CryptUnprotectData itself. This is a fundamental limit of any user-mode clipboard tool.
  • Cold-boot / disk-image attacks where the attacker has your Windows password. BitLocker is the answer here, not clipd.

For full triage info while running, clipd doctor prints config paths, key file status, DB integrity (PRAGMA integrity_check), pipe reachability, hotkey registration, and autostart status.

Logs

clipd writes a daily-rotated log at %APPDATA%\clipd\logs\clipd.<YYYY-MM-DD>.log. Last 14 days kept. Panics are captured with location, thread, and a forced backtrace.

Screenshot

image

License

Licensed under the Apache License, Version 2.0.