A free, source-available clipboard history manager for macOS and Windows.
Every copy you make, always within reach.
English | 中文
brew install --cask shiqkuangsan/recopy/recopy
# update to latest version
brew upgrade --cask recopyDownload the latest .dmg or .exe from the Releases page.
Important
macOS users: Recopy is not code-signed yet. macOS will show "app is damaged" or "cannot be opened" on first launch. This is normal — just run this command in Terminal to fix it:
xattr -d com.apple.quarantine /Applications/Recopy.appOr right-click the app → Open → click "Open" in the dialog. You only need to do this once.
See the full macOS installation guide for more details.
- Full-type support — Plain text, rich text, images, files, and links
- Instant recall —
Cmd+Shift+Vto summon, arrow keys to navigate, Enter to paste - Quick Look preview — Press Space to preview any item with Finder-style zoom animation
- Flexible layout — Panel docks to any screen edge (bottom/top/left/right), adapts to your workflow
- Smart dedup — SHA-256 hash prevents duplicate entries, bumps latest to top
- Full-text search — FTS5 with trigram tokenizer, multi-keyword AND matching, Chinese/English fuzzy search
- Link detection — URLs auto-recognized with dedicated cards,
Cmd+Clickto open in browser - IME friendly — Search works correctly with Chinese input methods (composition-aware)
- Favorites — Pin frequently used items for quick access
- Non-activating panel — NSPanel on macOS, keyboard hook on Windows — never steals focus from your active app
- Copy HUD — Frosted glass feedback overlay when copying to clipboard
- Auto-update — Built-in update checker with in-app download and one-click restart
- Configurable — Theme, language, shortcut, panel position, auto-start, retention policy
- Privacy first — All data stored locally in SQLite, nothing leaves your machine
| Key | Action |
|---|---|
Cmd+Shift+V |
Toggle Recopy panel (customizable in settings) |
← → |
Navigate between items |
↑ ↓ |
Jump between date groups |
Enter |
Paste selected item |
Space |
Quick Look preview |
Cmd+C |
Copy to clipboard (with HUD feedback) |
Cmd+F |
Focus search |
Cmd+, |
Open settings |
Delete / Backspace |
Delete selected item |
Escape |
Close panel / blur search |
Open settings via the gear icon in the panel header, tray menu, or Cmd+,.
- General — Theme (dark/light/system), language (en/zh/system), global shortcut, panel position (bottom/top/left/right), auto-start, close-on-blur
- History — Retention policy (unlimited/days/count), max item size (1–100 MB), clear history
- Privacy — Accessibility permission guide, app exclusion list (coming soon)
- About — Version, license, tech stack
| Layer | Technology |
|---|---|
| Framework | Tauri v2 |
| Frontend | React 19 + TypeScript + Tailwind CSS v4 |
| Backend | Rust |
| Database | SQLite (SQLx, WAL mode) |
| State | Zustand |
| UI | Radix UI + Lucide Icons |
| i18n | react-i18next |
| Platform | NSPanel (macOS), keyboard hook (Windows), virtual scrolling (@tanstack/react-virtual) |
- Node.js 22+
- pnpm 10+
- Rust 1.77+
- Xcode Command Line Tools (macOS) or Visual Studio Build Tools (Windows)
# Install dependencies
pnpm install
# Start dev server (Vite + Rust hot-reload)
pnpm tauri dev
# Run tests
npx vitest run # Frontend
cd src-tauri && cargo test # Backend
# Type check
npx tsc --noEmit
# Production build
pnpm tauri build| Platform | Format |
|---|---|
| macOS | .dmg |
| Windows | NSIS installer |
Recopy
├── src/ # React frontend
│ ├── components/ # UI components (cards, search, filters, settings)
│ ├── stores/ # Zustand state management
│ ├── hooks/ # Keyboard navigation, thumbnail lazy-loading
│ └── i18n/ # Locale files (zh, en)
├── src-tauri/
│ └── src/
│ ├── lib.rs # App setup, tray (i18n), shortcuts, clipboard monitor
│ ├── commands/ # Tauri IPC commands (CRUD, paste, settings, shortcuts)
│ ├── db/ # SQLite models, queries, migrations
│ ├── clipboard/ # Hashing, thumbnails (async), image storage
│ └── platform/ # macOS NSPanel + HUD / Windows non-activating window + keyboard hook
└── website/ # Landing page
macOS:
- User presses Enter on a clipboard item
- Rust writes content to system clipboard
- NSPanel resigns key window (returns focus to previous app)
osascriptsimulates Cmd+V with 50ms delay- Panel hides — user sees content pasted seamlessly
Windows:
- User presses Enter on a clipboard item
- Rust writes content to system clipboard
- Window hides and restores previous foreground app
SendInputsimulates Ctrl+V with 50ms delay- Content pasted into the still-focused app


