A native macOS clipboard manager built with SwiftUI and SwiftData.
Lightweight, fast, and private — everything stays on your device.
Clipyy is a clipboard manager for macOS that runs quietly in your menu bar. It captures everything you copy — text, images, URLs, files, and colors — and keeps a searchable, persistent history so you never lose anything from your clipboard again.
Inspired by Paste, Clipyy is built entirely with native Apple frameworks, requires no external dependencies, and stores all data locally on your machine.
Clipboard Monitoring
- Automatic capture of text, images, URLs, file references, and colors
- Intelligent content type detection with priority-based extraction
- SHA-256 deduplication — re-copying the same content moves it to the top instead of creating duplicates
- Source app tracking — see which app each item was copied from
Smart Categorization
- Automatic content categorization into Text, Code, Links, Images, Sensitive, and Files
- Detects API keys, JWT tokens, PEM certificates, passwords, and other secrets as Sensitive
- Code detection via keyword scoring (functions, classes, brackets, indentation patterns)
- Category tab bar for filtering — all tabs always visible, dimmed when empty
- Right-click context menu to manually reassign categories
- Sensitive items are auto-masked with a reveal toggle
Floating Panel
- Global keyboard shortcut (
Cmd + Shift + Z) opens a floating panel from any app - Non-activating panel design — the panel does not steal focus from your current app
- Auto-paste — selecting an item copies it and automatically pastes into the active field
- Arrow key navigation with accent-colored selection border
- Press Enter to paste the selected item
- Pagination with configurable page size (25 items per page)
- Expandable rows for long content with full text view and character count
- Vertical list grouped by date (Today, Yesterday, This Week, older)
- Visual previews: text snippets, image thumbnails, URL breakdowns, file icons, color swatches
- Inline pin button on each row
Search and Organization
- Real-time search across your entire clipboard history
- Pin frequently used items so they are never automatically deleted
- Filter by category or show only pinned items
Menu Bar Integration
- Lives in the menu bar — no Dock icon, no window clutter
- Quick-access dropdown showing the 10 most recent items
- One-click copy from the menu bar
Performance
- Efficient image thumbnails via ImageIO (
CGImageSourceCreateThumbnailAtIndex) — no full-size decoding for previews - Paginated display to keep the panel responsive with large histories
- Optimized dedup queries with
fetchLimit - Timer tolerance for energy-efficient polling
Settings
- Configurable history limit (50 to 5,000 items)
- Launch at login via
SMAppService - Exclude specific apps from clipboard monitoring
- Persistent storage with SwiftData and automatic external storage for images
Privacy
- Fully offline — no network access, no telemetry, no cloud sync
- All data stored locally in the app's SwiftData container
- Sandboxed with hardened runtime
| Requirement | Version |
|---|---|
| macOS | 26.0 or later |
| Xcode | 26.0 or later |
| Swift | 6 |
No third-party dependencies. The project uses only Apple frameworks: SwiftUI, SwiftData, AppKit, CoreGraphics, CryptoKit, ImageIO, Carbon, ServiceManagement.
git clone https://github.com/sshssn/clipyy.git
cd clipyy
open Clipyy.xcodeproj- Open the project in Xcode
- Select your development team under Signing & Capabilities
- Build and run (
Cmd + R) - Clipyy will appear as a clipboard icon in your menu bar
On first launch, macOS will prompt for Accessibility access (required for the global keyboard shortcut). Grant access in:
System Settings > Privacy & Security > Accessibility
| Action | How |
|---|---|
| Open floating panel | Cmd + Shift + Z |
| Open menu bar dropdown | Click the clipboard icon in the menu bar |
| Paste an item | Click any row or press Enter — copies and auto-pastes into the active app |
| Navigate items | Up / Down arrow keys |
| Pin / unpin an item | Click the pin icon on any row |
| Search history | Type in the search bar at the top of the panel |
| Filter by category | Click a category tab (Text, Code, Links, Images, Sensitive, Files) |
| Change item category | Right-click an item > Set Category |
| Reveal sensitive item | Click the eye icon or right-click > Reveal Content |
| Expand long content | Click the chevron icon on items with 100+ characters |
| Navigate pages | Use the prev/next arrows in the pagination footer |
| Filter pinned items | Click the pin icon in the panel toolbar |
| Clear history | Click the trash icon in the panel toolbar |
| Open settings | Menu bar dropdown > Settings... |
| Close panel | Escape or click outside |
| Quit | Menu bar dropdown > Quit Clipyy |
Clipyy/
├── ClipyyApp.swift App entry point, MenuBarExtra scene, SwiftData container
│
├── Models/
│ ├── ClipboardItem.swift Core SwiftData model with external image storage
│ ├── ClipboardItemType.swift Content type enum (text, image, URL, file, color, RTF)
│ ├── ContentCategory.swift Smart content categorization with auto-detection
│ └── Pinboard.swift Pinboard model with inverse relationship to items
│
├── Services/
│ ├── ClipboardManager.swift NSPasteboard polling, content extraction, dedup, thumbnails, auto-paste
│ └── HotkeyManager.swift System-wide Carbon hotkey for Cmd+Shift+Z
│
├── Views/
│ ├── Panel/
│ │ ├── ClipboardPanelView.swift Main panel: search, categories, pagination, expandable rows
│ │ ├── SearchBarView.swift Search field with clear button
│ │ └── DateSectionHeader.swift Date group labels
│ │
│ ├── MenuBar/
│ │ └── MenuBarView.swift Menu bar dropdown with recent items
│ │
│ └── Settings/
│ ├── SettingsView.swift Tab-based preferences window
│ ├── GeneralSettingsView.swift History limit, launch at login
│ └── ExcludedAppsView.swift App exclusion list with file picker
│
└── Utilities/
├── Constants.swift App-wide configuration values
├── DateFormatting.swift Date grouping and relative time formatting
├── PanelWindow.swift NSPanel subclass (non-activating, floating)
└── PanelWindowController.swift Panel lifecycle, positioning, click-outside dismiss
NSPanel instead of SwiftUI Window — The floating panel uses a custom NSPanel with the .nonactivatingPanel style mask. This is critical: without it, clicking the panel would steal focus from the user's current app, breaking the copy-paste workflow.
Timer-based polling — macOS does not provide push notifications for clipboard changes. Clipyy polls NSPasteboard.general.changeCount every 1 second with timer tolerance for energy efficiency, which is fast enough to feel instantaneous while using negligible CPU.
SwiftData with external storage — Images copied to the clipboard (screenshots, etc.) can be several megabytes each. The @Attribute(.externalStorage) annotation on imageData tells SwiftData to write large blobs to disk rather than inline in the SQLite database, preventing database bloat.
SHA-256 deduplication — Every clipboard item is hashed. When the same content is copied again, the existing entry's timestamp is updated rather than creating a duplicate.
Self-copy detection — After Clipyy writes to the pasteboard (when the user selects an item), it updates its internal changeCount tracker so the polling timer does not re-capture the item as a new entry.
| Component | Technology |
|---|---|
| Language | Swift 6 with strict concurrency |
| UI Framework | SwiftUI with Liquid Glass |
| Persistence | SwiftData (@Model, @Query, external storage) |
| Clipboard Access | AppKit (NSPasteboard) |
| Hashing | CryptoKit (SHA256) |
| Thumbnails | ImageIO (CGImageSource) |
| Window Management | AppKit (NSPanel, non-activating) |
| Keyboard Navigation | AppKit (NSEvent local monitors) |
| Auto-Paste | CoreGraphics (CGEvent key simulation) |
| Login Item | ServiceManagement (SMAppService) |
| Global Hotkey | Carbon (RegisterEventHotKey) |
This project is open source. See the LICENSE file for details.
Built with Swift and SwiftUI for macOS.