Native macOS menu bar clipboard manager. Open source, MIT-licensed.
- Lives in the menu bar — no Dock icon, no
⌘Tabclutter (LSUIElement). - Tracks the last 50 clipboard entries (text, URLs, and images).
- Search with live filtering, case-insensitive.
- Keyboard navigation: arrows to move,
↩to copy,⌫to delete,escto close. - Global hotkey
⌥Spaceto toggle the popover from anywhere. - Right-click the status bar icon for quick actions (Open, Clear, Quit).
- Launches at login (
SMAppService). - Persists history metadata in
UserDefaultsand image payloads in Application Support.
brew tap PinnLabs/tap
brew install --cask copyit-
Grab the latest
CopyIT-x.y.z.zipfrom Releases. -
Unzip and drag
ClipboardManager.appto/Applications. -
First launch — right-click → Open to bypass Gatekeeper (the app is ad-hoc signed), or run:
xattr -dr com.apple.quarantine /Applications/ClipboardManager.app
-
Grant Input Monitoring permission when prompted (System Settings → Privacy & Security → Input Monitoring) so
⌥Spaceworks.
See CONTRIBUTING.md.
- macOS 14.0 (Sonoma) or later
- Xcode 15+ (Swift 5.9+) — only needed if building from source
- XcodeGen — only needed if building from source
brew install xcodegen
make setup # generates Xcode project
make run # build + launch
make test # run unit testsOr open in Xcode after make generate and use ⌘R / ⌘U.
The global hotkey relies on CGEventTap, which requires Input Monitoring permission. On first launch macOS prompts to grant access — open System Settings → Privacy & Security → Input Monitoring and enable ClipboardManager.
ClipboardManager/
├── App/ # Entry point + AppDelegate (composition root)
├── Core/
│ ├── Protocols/ # ClipboardMonitoring, ClipboardStoring,
│ │ # HotkeyRegistering, LaunchAtLoginManaging
│ ├── Models/ # ClipboardItem, ClipboardItemType
│ ├── Services/ # ClipboardMonitor, HotkeyManager,
│ │ # LaunchAtLoginService, AppLogger
│ └── UseCases/ # Fetch, Copy, Delete, Clear
├── UI/
│ ├── StatusBar/ # NSStatusItem + NSPopover + right-click menu
│ └── Popover/ # SwiftUI views + @Observable PopoverViewModel
├── Infrastructure/
│ └── Persistence/ # UserDefaultsStore (concrete ClipboardStoring)
└── Resources/ # Info.plist, Assets.xcassets, entitlements
Tests/
├── CoreTests/ # Store, monitor, use cases, hotkey, launch-at-login
│ └── Mocks/ # Protocol-conforming mocks
└── UITests/ # PopoverViewModel
Clean Architecture + SOLID. The composition root is AppDelegate.applicationDidFinishLaunching(_:) — the only place that wires concrete implementations. UI never touches NSPasteboard or UserDefaults directly.
[ClipboardMonitor] --onNewItem--> [AppDelegate] --save--> [Store]
|
v
[ViewModel] --refresh--> SwiftUI
^
[HotkeyManager] --⌥Space--> [StatusBar] --togglePopover-->|
Logging uses OSLog.Logger exposed via AppLogger.<category>.
See CONTRIBUTING.md.
MIT — see LICENSE.