A lightweight macOS menu bar app for clipboard history management. Built with Swift and SwiftUI.
- Clipboard History — automatically stores copied texts (configurable limit: 20 / 50 / 100)
- Search & Filter — quickly find items in your history
- Pin / Favorites — pin important items so they stay at the top and never get removed
- Snippets — save frequently used texts as permanent snippets
- Content Type Detection — auto-detects URLs, emails, phone numbers, and color codes with distinct icons
- Source App Tracking — shows which app each item was copied from
- Text Transformations — right-click to transform text (uppercase, lowercase, capitalized, trimmed, URL encode/decode)
- Merge Items — select multiple items and merge them with a separator (newline, space, or comma)
- Export — export clipboard history as JSON or CSV
- Sensitive Content Protection — automatically skips passwords from password managers
- Global Keyboard Shortcut — customizable hotkey to open the panel from anywhere
- Persists history across app restarts
- macOS 13 (Ventura) or later
- Xcode 15+ (for building)
-
Clone the repo
git clone <repo-url> cd ClipboardManager
-
Install xcodegen (if not installed)
brew install xcodegen
-
Generate Xcode project
xcodegen generate
-
Open in Xcode
open ClipboardManager.xcodeproj
-
Set signing
- Click ClipboardManager project in the sidebar
- Go to Signing & Capabilities
- Select your Team (your Apple ID)
-
Build & Run
- Press
Cmd+Ror click ▶ Run - Xcode will build and launch the app
- Press
-
Grant permissions (first launch)
- macOS will ask for Accessibility permission — enable it in System Settings
- To set a global shortcut: click the menu bar icon, then Settings → Change → press your keys
-
Install to Applications (optional)
- In Xcode menu: Product → Archive or build with Release config
- Or simply copy from build output:
BUILT=$(xcodebuild -scheme ClipboardManager -configuration Release -showBuildSettings | grep "BUILT_PRODUCTS_DIR" | awk '{print $3}') cp -r "$BUILT/ClipboardManager.app" /Applications/
| Action | How |
|---|---|
| Open history | Click the clipboard icon in menu bar (or use your global shortcut) |
| Copy from history | Click any item in the list |
| Pin an item | Right-click → Pin |
| Delete an item | Right-click → Delete |
| Transform text | Right-click → Transform → choose format |
| Save as snippet | Right-click → Save as Snippet |
| Search history | Type in the search bar at the top |
| Merge items | Click Select → choose 2+ items → Merge |
| Switch tabs | Click History / Snippets in the tab bar |
| Change shortcut | Settings → Change → press key combo |
| Change history limit | Settings → History Limit (20 / 50 / 100) |
| Export history | Settings → Export JSON or Export CSV |
| Clear all history | Click "Clear" in header |
| Quit app | Settings → Quit App |
System Settings → General → Login Items → add ClipboardManager.app
ClipboardManager/
├── main.swift # App entry point
├── AppDelegate.swift # Status bar, panel, hotkey wiring
├── ClipboardStore.swift # Data model + UserDefaults persistence
├── ClipboardMonitor.swift # NSPasteboard polling (0.5s timer)
├── HotkeyManager.swift # CGEventTap global shortcut
├── ContentView.swift # SwiftUI main UI (history list, search, merge)
├── SettingsView.swift # Shortcut, history limit, export settings
├── SnippetStore.swift # Snippet data model + persistence
├── SnippetView.swift # Snippets tab UI
├── ContentTypeDetector.swift # URL, email, phone, color detection
├── TextTransformations.swift # Text transform operations
├── ExportManager.swift # JSON / CSV export with NSSavePanel
└── Info.plist # LSUIElement=true (no dock icon)
MIT