MacCV icon

A fast, light,
private clipboard

Native macOS pasteboard fidelity, with a Rust engine — and the option to paste without the clipboard at all.

Universal binary · Requires macOS 15 or later · Apache-2.0

The MacCV panel: a rich-text entry, an image, a three-file copy, and an API key shown masked

Three commitments

Specific enough to be checked. Where macOS limits them, this page says so rather than implying otherwise.

Fast

Speed decided the architecture, not the other way round. The Rust engine is a static library linked into the app: no IPC, no serialization, no helper process.

  • Change detection in 0.53 µs
  • Polling, so no event tap and no Accessibility permission needed just to notice a copy
  • Direct Objective-C message sends underneath

Light

An idle clipboard manager should be invisible. The watcher polls at 400 µs right after a copy, then backs off toward 250 ms while nothing changes.

  • No timer in the UI layer
  • History in memory, bounded by your choice
  • 1.9 MB release bundle

Private

You can paste without the clipboard ever seeing the content, so no other process can observe it. That is a real guarantee — and it comes with real costs, listed below.

  • Concealed entries are never recorded
  • Sensitive values are masked when stored, not just drawn
  • Nothing leaves your Mac
0.53 µs
Change detection
9.9 µs
Read plain text
116 µs
Notice an external copy
1.9 MB
Release bundle

Measured on Apple silicon and asserted by the test suite, not measured once by hand.

What “private” can honestly mean

Most clipboard managers overstate this. Here is the accurate version.

The uncomfortable fact

Once content is on the system pasteboard, any application on the Mac can read it. That is not a missing feature — it is how macOS is designed. There is no API to write to the pasteboard privately.

NSPasteboardContentsOptionsCurrentHostOnly stops syncing to your other devices, not to other apps. AppKit has no concealed or transient flag; the org.nspasteboard.ConcealedType convention is honoured only voluntarily. And NSPasteboardAccessBehavior governs whether this process may read — never whether anyone else may.

So: paste without the clipboard

With the setting enabled, choosing “Paste Without Clipboard” sends the entry to the frontmost app as synthetic keystrokes. The content never enters a shared channel, so no other process can observe it. This is the only mechanism that actually delivers the guarantee.

Its honest costs

It needs the Accessibility permission, because injecting events into another app is exactly what that permission gates. It is slower — events arrive at typing pace. And it is text only: an image has no keystroke representation, so images still take the clipboard path.

ControlWhat it actually guarantees
History in the app containerOther applications cannot read your history. Only the pasteboard write is shared, never the log.
Skip concealed entriesEntries a password manager marked concealed are never recorded — honouring a stated intent rather than guessing.
Mask sensitive contentCard numbers, API keys, JWTs, private keys, credentialed URLs, emails and ID numbers are redacted when recorded, not only when displayed.
Confirm before replacing itselfA downloaded update is verified and then presented. MacCV never silently rewrites its own bundle.

MacCV cannot stop another app from reading the clipboard. Nothing can. If you need that, use Paste Without Clipboard — or don’t put the secret on the clipboard. This page says so plainly because a privacy claim you cannot verify is worse than no claim at all.

Everything the pasteboard holds, not just text

Most managers flatten to a string. Copy a table and you get tab-separated text; copy from a design tool and you get a bitmap. MacCV keeps every representation and replays it byte-for-byte.

CategoryTypes
Textpublic.utf8-plain-text, tab-separated values
Rich textpublic.rtf, com.apple.flat-rtfd, public.html
Imagespublic.png, public.tiff, com.adobe.pdf
Filespublic.file-url — multi-file copies stay multi-file
Linkspublic.url
Colourcom.apple.cocoa.pasteboard.color, resolved to sRGB
Soundcom.apple.cocoa.pasteboard.sound
Fonts, rulerscom.apple.cocoa.pasteboard.font, …ruler
Anything elseCustom UTIs, preserved and replayed verbatim

A single copy can carry several at once — a paragraph from Safari arrives as plain text, RTF and HTML — and MacCV keeps all of them, so it can paste into whichever the target app asks for.

Updates that do not say “damaged”

An app that replaces itself with a downloaded bundle inherits the quarantine attribute from its parent, and macOS refuses to launch a quarantined, non-notarized replacement. The usual result is the misleading “MacCV is damaged and can’t be opened” dialog. The order of operations is what prevents it.

  1. Download to a staging directory
  2. Verify the SHA-256 — a mismatch deletes the file and stops
  3. Verify the code signature with spctl
  4. Only then clear com.apple.quarantine
  5. Report which of those actually succeeded

Clearing the flag before verification would defeat the flag entirely — which is why an update whose signature does not validate is reported as such and left quarantined rather than silently installed. MacCV does not swap its own running bundle either: a half-completed replacement of a live app is worse than asking you to drag one file, so the verified bundle is revealed in Finder and you finish the job.

Build it yourself

Requires macOS 27, Xcode 27, Rust 1.85+ and XcodeGen. The engine builds and tests on its own; the Xcode project is generated from a single YAML file.

git clone https://github.com/yxxbc/Maccv.git
cd Maccv

cargo test                      # the Rust engine, 109 tests
cargo build --release -p maccv-ffi

cd apps/mac
xcodegen generate               # project.yml is the source of truth
xcodebuild -scheme MacCV -configuration Release build

Every layer can check itself, including the compiled app, which exercises Swift → C ABI → Rust end to end against a process-private pasteboard so it never touches your real clipboard.

Where it is going

Shipped

Full-type fidelity, adaptive watching, multi-item copies, the menu-bar panel, paste without the clipboard, sensitive masking, in-app updates with signature verification, and a bilingual interface.

Next

On-disk history that survives relaunch, a global hotkey, drag and drop, pinned entries and per-app rules.

Eventually

Notarization, so the app opens without a Gatekeeper prompt.