Klippy is a macOS-first clipboard manager built with Tauri v2, Rust, SolidJS, Vite, Tailwind, and Bun.
It watches clipboard changes, stores them locally, and gives you a fast searchable UI with pin/copy/delete actions.
- Clipboard history for
text,url,code, andimageclips. - Global shortcut
Cmd + Shift + Vto show/hide the app window. - Tray icon click toggles the app window.
- Full-card click to copy a clip back to clipboard.
- Image clips are shown with compact thumbnails and metadata.
- Supported image clipboard formats:
PNG,JPEG,TIFF,WEBP. - Debounced search with keyboard selection (
↑/↓). - Pin/unpin clips.
- Delete single clip or
Clear All. - Auto-pruning with pinned protection.
- Starts at login (autostart enabled).
- Auto-minimizes when focus moves to another app.
- Close button minimizes to background (does not quit).
- Local-only storage in SQLite (WAL mode).
- Clipboard content from Klippy itself is ignored.
- No cloud sync.
- No clipboard content logging.
- Default denylist for known password manager app bundle IDs.
- Max stored clip payload:
10 MBper clip. - Default history limit:
200clips.
- Frontend: SolidJS + Vite + Tailwind + TypeScript
- Backend: Rust 2021 + Tauri v2
- DB: SQLite via
rusqlite - Package manager: Bun
- macOS 12.0+
- Bun
- Rust toolchain (stable, Rust 1.78+ recommended)
- Xcode Command Line Tools
Install Xcode CLT if needed:
xcode-select --installInstall dependencies:
bun installRun in development:
bun run tauri:devIf tauri command is not found:
bunx tauri devCreate a release build:
bun run tauri:buildCommon output paths:
- App bundle:
src-tauri/target/release/bundle/macos/Klippy.app - Other bundles (for example DMG/PKG):
src-tauri/target/release/bundle/
Target for optimization: Klippy main process idle memory <= 45 MB.
Measure in release mode only:
- Build release with
bun run tauri:build. - Launch
Klippy.appfrom/Applications(or the release bundle output). - Let it idle for ~30 seconds with the window hidden/minimized.
- Check Activity Monitor and measure the
Klippymain process.
Notes:
tauri dev(tauri://localhost) includes development overhead and is not the memory optimization target.- WebKit helper processes may appear separately; use the main
Klippyprocess for this baseline target.
- Build with
bun run tauri:build. - Move
Klippy.appto/Applications. - Launch Klippy from Applications.
Frontend checks:
bun run lint
bun run test
bun run buildRust checks:
cd src-tauri
cargo test
cargo clippy --all-targets -- -D warningssrc/: SolidJS app (UI, state, components)src-tauri/: Rust backend, clipboard watcher, DB, and Tauri runtime
- Smart Paste is not exposed in the current UI.
Stopbutton exits the app.
MIT