A clipboard manager for macOS, built with Liquid Glass.
Native, tiny, and completely private.
Install · Features · Design · Performance · Privacy · Contributing
Copy anything, anywhere. Press ⌘⇧V and it's all there — searchable, pinnable, rendered in Apple's Liquid Glass design language on macOS Tahoe.
| 📋 Keeps everything | Text, links, images, and files — with thumbnails and previews |
| ⌨️ ⌘⇧V anywhere | Global hotkey via Carbon, so it needs no Accessibility permission |
| 🔍 Search & filters | Type to search, or flick between All · Text · Links · Images · Files |
| 📌 Pinning | Pinned clips survive history limits and "clear" |
| 🏷 Source attribution | Every clip remembers the app it came from |
| ⚡️ Keyboard-first | ↑↓ navigate · ⏎ copy · ⌘P pin · ⌘⌫ delete · Esc dismiss |
| 🪄 Paste-on-select (optional) | iCopy presses ⌘V into the app you came from |
| 🔒 Private by design | 100% local, sandboxed, skips password-manager content |
| 🚀 Weightless | 0% idle CPU, ~16 MB footprint, zero leaks — measured, see below |
Homebrew:
brew install --cask codewithinferno/tap/icopyDownload: grab iCopy.zip from Releases and drop iCopy.app into /Applications. Builds aren't notarized yet — on first launch, right-click iCopy.app → Open.
Build from source — requires macOS 26 (Tahoe) and Xcode 26:
git clone <this-repo>
cd iCopy
xcodebuild -project iCopy.xcodeproj -scheme iCopy -configuration Release buildiCopy lives in your menu bar — there's no Dock icon. Enable Launch at login in Settings.
| Key | Action |
|---|---|
| ⌘⇧V | Open iCopy from anywhere |
| type | Search |
| ↑ ↓ | Move selection |
| ⏎ | Copy selected clip (and optionally paste) |
| ⌘P | Pin / unpin |
| ⌘⌫ | Delete |
| Esc | Dismiss |
Right-click the menu bar icon for pause, settings, and quit.
iCopy is a small showcase of the Liquid Glass design language introduced with macOS Tahoe:
- The search field and filter chips are real
glassEffectsurfaces inside aGlassEffectContainer, so neighboring glass merges and morphs as the selection moves - Footer controls use the native
.glassbutton style - Content stays content: rows highlight with plain materials, keeping glass for the controls layer, per the HIG
- Motion uses SwiftUI spring animations (
.snappy) throughout
No fake blurs, no screenshots of glass — it's the real API, which also means it adapts automatically to light/dark, accent color, and Reduce Transparency.
The mark is 写 — to copy, to transcribe — hand-brushed. The app icon sets it on a plain paper tile so it reads in both light and dark Docks; Tools/make-brand.swift derives the icon, the dark-mode logo, and the social preview from the same ink.
Measured on an Apple Silicon Mac running macOS 26.2, Release build:
| Metric | Value |
|---|---|
| Idle CPU | 0.0% (30 ms of CPU over a 60 s sample) |
| Memory footprint at launch | ~16 MB (footprint) |
| After 40 captures + 16 popover cycles | ~41 MB, returns to 0.0% CPU |
leaks after that stress |
0 leaks, 0 bytes |
How it stays that way:
- The pasteboard has no change-notification API, so iCopy polls
changeCount— a single integer compare — on aDispatchSourceTimerwith 150 ms leeway so the kernel can coalesce wakeups - Images are stored on disk as PNG; the UI only ever decodes an ImageIO-downsampled thumbnail (≤512 px), cached in an
NSCache - History is a JSON index written atomically with a debounce, off the main thread
- Rows are
LazyVStack-rendered; thumbnails load asynchronously
- Everything stays on your Mac:
~/Library/Containers/com.pratham.iCopy— nothing is ever sent anywhere - Content that password managers mark as concealed (
org.nspasteboard.ConcealedType) is never recorded, and transient content is skipped - Copies larger than 1 MB of text are ignored rather than truncated, so a re-paste can never hand you corrupted data
- The app is sandboxed
iCopy/
├── iCopyApp.swift App entry point
├── AppDelegate.swift Status item, popover, settings window, auto-paste
├── ClipboardStore.swift Capture pipeline, dedupe, pinning, eviction, persistence
├── PasteboardWatcher.swift changeCount polling with timer coalescing
├── HistoryStorage.swift JSON index, image originals + thumbnails, RTF sidecars
├── HotKey.swift Carbon ⌘⇧V hotkey (no Accessibility needed)
├── ClipboardItem.swift Model
├── HistoryView.swift Liquid Glass popover UI
├── HistoryRowView.swift Rows, thumbnails, hover actions
├── SettingsView.swift Launch at login, limits, auto-paste
└── TestHooks.swift Distributed-notification hooks (only with --test-hooks)
Duplicate detection hashes content with SHA-256, so re-copying something old just promotes it to the top — including images. History from the pre-rewrite version of iCopy is migrated automatically on first launch.
See CONTRIBUTING.md. Keep it lean: the whole app is ~1,500 lines with zero dependencies, and we'd like it to stay that way.
MIT © Pratham Patel
