A lightweight clipboard manager for desktop. It keeps track of text you copy so you can recall it later without redoing the work.
- Background presence - Lives in your system tray / menu bar while you work.
- Global hotkey - Summon the history popup instantly with a keyboard shortcut (near your mouse cursor).
- Quick dismiss - Press Escape to hide the popup. When the search box is focused, the first Escape clears focus and a second Escape hides the popup.
- Tray menu - Open the app, change settings, or quit from the tray icon.
- Configurable hotkey - Record your own keyboard shortcut to summon the popup via Settings.
- Pin items - Pin frequently used entries so they stay at the top, reorder them, and give each one a custom label. Hide sensitive content with the eye toggle.
- Sessions - Group pinned items into named sessions and switch between them. The Pinned tab shows only the active session's items. The default "Favorites" session is permanent.
- Search - Filter both pinned items and clipboard history instantly with the search box. Press
Command+F(configurable) to jump to the search box from anywhere in the popup. - Context menus - Right-click a history or pinned item to pin it directly to a specific session.
- Quick copy keys - Press
1through9to copy the Nth item in the current tab (or activate a session in the Sessions tab) without touching the mouse. - App switcher - A separate global hotkey (default
Control+Option+Esc, configurable in Settings) opens a list of currently open apps, each with its icon. Search by name, then press Enter or1through9, or click, to focus an app. - Hold to switch - Keep the app switcher hotkey held down, move the mouse over a row, and release: that app is focused straight away. Release with the cursor anywhere else and the list simply stays open.
- Windows of the app you are in - A third hotkey (default
Option+Shift+Z, configurable in Settings) opens the same list limited to the windows of the app in front, so three Visual Studio Code windows can be told apart without scrolling past everything else you have open. Search, Enter,1through9and hold-to-switch all work the same way. - Most-used apps first - The app list is ordered by frecency, so apps you switch to often and recently sit at the top and stay within reach of the
1through9keys. Usage counts are stored locally alongside the rest of your data. - Cycle an app's windows (Windows only) - Takes over
Alt+Escto step through the windows of the app you are already in, instead of every window on the desktop the way Windows does. Nothing is shown and focus is never taken: each press just moves to the next window, andAlt+Shift+Escsteps back through them. Turn it off in Settings to handAlt+Escback to Windows, or record a different shortcut for it; the reverse chord follows whatever you record. - Configurable history size - Choose how many entries to keep (up to 50) in Settings.
- Tab shortcuts - Switch between Pinned, History, and Sessions tabs with configurable keyboard shortcuts (default Command+1 / Command+2 / Command+3).
- Resizable window - Adjust the popup width and height in Settings.
- Update notifications - Checks the GitHub Releases page for a newer version and shows a title-bar badge; check manually from Settings or the tray menu. No auto-download, no clipboard data sent.
- Local only - All clipboard history stays on your machine.
Pre-built installers for macOS, Windows, and Linux are available on the Releases page.
macOS note: If you see "ClipX is damaged and can't be opened", run this in Terminal after installing:
xattr -cr /Applications/ClipX.appThis removes the quarantine flag macOS adds to downloaded apps that aren't signed with an Apple Developer certificate.
macOS Accessibility permission: The app switcher lists every window of every open app by reading them through the macOS Accessibility API, which requires ClipX itself to be granted Accessibility. Grant it under System Settings > Privacy & Security > Accessibility, then quit and relaunch ClipX. Without the grant, the switcher still lists the apps but shows a single row for each one, with no window titles.
The grant is tied to the binary, not to the app name, so it does not carry across builds:
- The development binary (
pnpm tauri dev) and the installed/Applications/ClipX.appare separate identities. Granting one does nothing for the other, which is why window lists can work in development and not in the installed app.- Release builds are ad-hoc signed (no Apple Developer ID), so macOS identifies them by their code hash. That hash changes with every release, which invalidates the grant on each update even though the toggle in System Settings can still look enabled.
After installing a new version, remove the existing ClipX entry from the Accessibility list, add
/Applications/ClipX.appagain, and relaunch. Signing releases with an Apple Developer ID would give the app a stable identity and remove this step, and is the intended fix once a certificate is available.
Run frontend unit tests:
pnpm testRun tests in watch mode:
pnpm test:watchRun Rust backend tests:
cd src-tauri && cargo testLint JavaScript and JSX:
pnpm lintFormat code with Prettier:
pnpm formatIf something goes wrong, check the log file for details.
Log file location:
- macOS:
~/Library/Application Support/com.adriano.clipx/logs/clipx.log - Windows:
%APPDATA%/ClipX/logs/clipx.log - Linux:
~/.config/ClipX/logs/clipx.log
What gets logged:
- App startup and shutdown
- Database errors
- Clipboard monitor failures
- Settings load/save errors
- Shortcut registration failures
What is NOT logged:
- Clipboard content itself (privacy protection)
- Normal day-to-day operations
The app switcher shows only one row per app:
ClipX is not trusted for Accessibility. The log records it once per run:
[WARN] list_open_apps: ClipX is not trusted for Accessibility, so no window titles can be read and every app collapses to one row.
See the macOS Accessibility permission note under Download for how to grant it and why the grant is lost on every update.
See RELEASING.md for the release checklist, including the mandatory step of publishing the draft release that the workflow creates.
pnpm tauri devThis starts the app with live reload for both the frontend and the Rust backend.
pnpm tauri buildThe compiled app will be available under src-tauri/target/release/.
- Tauri v2
- React + Vite
- SQLite (local storage)
Built for keeping things simple and local.


