A Paste-style clipboard manager for macOS — horizontal card carousel at the bottom of the screen, built with SwiftUI + SwiftData.
Everything you copy becomes a card. Hit ⇧⌘V, arrow through history, press ⏎ to paste into the app you just came from.
- Bottom-of-screen carousel — full-width translucent panel, 220pt card grid, slides up on
⇧⌘V - Text, images, files, URLs, colors — each clip type gets a tailored card body
- Drag out — any card drags into Finder, editors, browsers, chat apps. Files drag as the original URL (no copy); text/images/colors serialize lazily to a temp file only on drop
- Multi-select + paste-stack —
Shift-click a range or⌘-click to toggle individual cards, then⏎pastes them in your click order - Pinboards — create named boards (Snippets / Code / Quotes…) with their own accent color.
⌘Pmoves the current item,⌘1-9jumps between tabs - Search — exact / contains / fuzzy modes, highlights matches inline
- OCR on images — screenshots become searchable by their contents (Vision framework, off-main)
- Scripts — user-defined JavaScript transforms (trim whitespace, format JSON, URL-decode…) exposed in the card right-click menu
- Ignore rules — per-app, per-pasteboard-type, or per-regex patterns keep passwords and secrets out of history
clipocliCLI — installed alongside the app, lets you query/paste from scripts and shell
- macOS 14 Sonoma or later
- Accessibility permission (needed to inject
⌘Vinto the frontmost app)
Grab the latest Clipo-*-arm64.dmg from Releases, drag Clipo.app into /Applications, and launch it. Grant Accessibility permission when prompted.
# Generate the Xcode project (uses XcodeGen; install via brew if missing)
brew install xcodegen
xcodegen
# Debug build
xcodebuild -project Clipo.xcodeproj -scheme Clipo -configuration Debug build
# Release DMG in one shot (clean → build → package → open in Finder)
bash scripts/package.sh
# Apple-Silicon-only build (matches the CI workflow output)
ARCHS=arm64 bash scripts/package.sh| Shortcut | Action |
|---|---|
⇧⌘V |
Open / close the panel |
← → |
Navigate cards |
⏎ |
Paste selected card into the frontmost app |
Space |
Open preview |
⌥1–⌥9 |
Quick-paste the Nth visible card |
⌘1–⌘9 |
Switch filter / pinboard tab |
Shift-click / ⌘-click |
Extend / toggle multi-selection |
⌘A |
Select all visible cards |
⌫ |
Delete current (or multi-selection) |
Esc |
Close panel (or clear multi-selection first) |
⌘, |
Open Settings |
⇧⏎ |
Paste as plain text |
⌥⏎ |
Copy selected card back to system clipboard |
⌥⇧⏎ |
Paste with formatting preserved |
Everything user-facing is configurable via the ⌘, Settings window — split across seven panes: General (hotkeys, paste defaults, search mode), Appearance (menu bar icon, accent color, panel dimensions), Storage (history size, per-type toggles, sort order), Pinboards, Scripts, Ignore (apps / pasteboard types / regex patterns), and Advanced (pause monitoring, accessibility status, diagnostics).
- UI: 100% SwiftUI inside a borderless
NSPanelanchored to the bottom edge - Storage: SwiftData with a single
ModelContainerunder~/Library/Application Support/Clipo/Storage.sqlite - Clipboard engine:
NSPasteboard.changeCountpolling at 0.5s (configurable), type whitelist, internal marker to prevent paste loops - Paste:
CGEvent-injected⌘Vinto the frontmost app (Maccy's approach) - Scripts:
JavaScriptCoresandbox, 500ms timeout per invocation, oneJSContextper script for isolation - Drag-out: SwiftUI
.onDragwithNSItemProvider.registerDataRepresentationlazy file-URL loader, panel fades during drag to keep compositing cost off the critical path - Search: Fuse-swift for fuzzy matching; debounced per-keystroke
Clipo/
├── App/ # AppDelegate, status bar, drag lifecycle
├── Clipboard/ # ClipboardEngine, Paster, Accessibility prompt
├── Hotkeys/ # Global + window-local shortcut registration
├── IPC/ # clipocli bridge (Unix-socket server)
├── Models/ # ClipItem, ClipContent, Pinboard (SwiftData)
├── Scripts/ # JS script runtime + built-in examples
├── Settings/ # 7 preference panes
├── State/ # AppState (@Observable, MainActor-bound)
├── Storage/ # SwiftData ModelContainer
└── UI/ # Panels, carousel, cards, design tokens
Defaults— type-safeUserDefaultsKeyboardShortcuts— user-rebindable hotkeysSettings— preferences window toolbarLaunchAtLogin— login-item toggleFuse— fuzzy search
- Everything stays local. No network calls, no telemetry, no iCloud.
~/Library/Application Support/Clipo/Storage.sqliteholds all history.- Sensitive items marked
.concealedor.autoGenerated(password managers, Keychain, etc.) are skipped automatically. - Apple's Passwords.app and Keychain Access are ignored by bundle ID out of the box; add more apps or regex patterns in Settings → Ignore to exclude other sources.

