Documentation

Everything Pastiche can do.

Install it in about a minute, learn nine keystrokes, and your clipboard stops forgetting. Every command, path, and permission step below matches the shipping app.

macOS 13 or laterFree & open source (MIT)Everything stays on your Mac

Install

From download to first paste

Pastiche ships as a disk image on GitHub Releases. There is no installer, no account, and no license key — drag it in and press the hotkey.

  1. 1

    Download the disk image

    Grab the latest Pastiche-<version>.dmg from GitHub Releases. Every release also carries a .zip of the same build — that one is what the auto-updater downloads.

  2. 2

    Drag Pastiche into Applications

    Open the DMG and drag Pastiche onto the Applications shortcut inside the window. Then eject the disk image.

  3. 3

    Launch it and press the hotkey

    Pastiche is a menu-bar app — there is no Dock icon and no main window. A clipboard glyph appears in the menu bar; press V and the shelf slides up from the bottom of whichever screen your mouse is on.

Gatekeeper on first launch

Release builds are ad-hoc signed rather than Developer ID notarized, so macOS refuses the first double-click with “Pastiche cannot be opened because the developer cannot be verified.” Do either of these once:

  • Right-click (or Control-click) Pastiche.app Open Open in the dialog, or
  • open System Settings Privacy & Security, scroll to the message about Pastiche, and click Open Anyway.

You only need to do this once per installed version.

Accessibility permission

Pastiche pastes by synthesizing a V keystroke into the app you were last using, and macOS only lets trusted apps post keyboard events. On first launch Pastiche asks for Accessibility access — approve it in System Settings Privacy & Security Accessibility.

Without it Pastiche still works: selecting a card copies it to the system clipboard, you just press V yourself. Nothing else in the app reads other applications’ contents.

Declined the prompt by accident? The request re-arms — flip Pastiche off and on in the Accessibility list, or trigger a paste again, and direct paste recovers.

Using Pastiche

The shelf, end to end

Copy the way you always have. Pastiche records every clipping in the background and hands it back when you summon the shelf.

Open the shelf

Press V from any app, or choose Open Pastiche from the menu-bar icon. The panel appears on the screen holding the mouse and closes again with the same hotkey, Esc, or by switching apps.

Pick and paste

Move with , then Return to paste into the app you came from. Return pastes as plain text, and 19 fire the numbered cards without moving the selection.

Right-click any card for Paste, Paste as Plain Text, Copy, Add to Pinboard, and Delete.

Pinboards

The tabs across the top of the shelf are Clipboard plus your pinboards — named, color-coded boards for the snippets you reuse. Hit + to create one, then drag a card onto a tab, or use Add to Pinboard.

Adding an item to a board saves a copy, so your history is untouched. Right-click a tab to rename, recolor, or delete it — deleting a board removes only the copies saved on it.

Previews

Press Space to toggle the large preview of the selected card: full text, images fitted to the panel, openable links, file lists, and color swatches. Space or Esc closes it again.

Drag and drop

Drag any card straight out of the shelf and into another app — a document, a Finder window, a chat box. Files and images carry their real contents, not just a text stand-in.

Pause capture

Choose Pause Clipboard History from the menu-bar icon to stop recording entirely until you turn it back on — useful when you are about to move something you would rather not keep.

What Pastiche captures

Each kind of clipping gets its own card layout, a source-app badge, and a relative timestamp. Rich text keeps its RTF and HTML styling; images are stored as PNGs with thumbnails alongside.

  • Plain text
  • Rich text
  • Links
  • Images
  • Files
  • Colors

Keyboard reference

Everything below works while the shelf is open, except the global toggle.

Pastiche keyboard shortcuts
ShortcutAction
VToggle the shelf — works anywhere, and is re-bindable in Settings
/Move the selection
ReturnPaste the selected item into the app you came from
ReturnPaste the selected item as plain text
SpaceToggle the large preview
19Paste the 1st … 9th visible card
FFocus the search field — typing anywhere also focuses it
DeleteDelete the selected item
EscClose the preview → clear the search → hide the shelf

Settings

Four tabs, no surprises

Open Settings… from the menu-bar icon in the top-right of the screen. Every preference is stored locally, alongside your history.

General

  • Launch Pastiche at login — backed by SMAppService; the toggle verifies the real system state and reverts if registration fails.
  • Global shortcut — record a new combination for the shelf. It needs at least one of ; a combination the system rejects reverts to the previous one.
  • Keep history — Unlimited (the default), or cap at 100 / 500 / 1,000 / 5,000 items. Lowering the cap prunes immediately.
  • Paste as plain text by default — flips the meaning of Return and Return.
  • Panel height — 280 pt to 520 pt.

Privacy

  • Ignore concealed and transient clipboard content — on by default. Password managers mark their copies as concealed, and Pastiche never records them.
  • Ignored Apps — anything copied while one of these apps is frontmost is skipped entirely.
  • Clear History — removes every item from the Clipboard tab and scrubs the content from the database file on disk. Pinboards are left untouched.

Updates

Automatically check for updates reflects Sparkle’s real setting, and Check Now runs a check on demand. The current version is listed underneath.

About

Version, license, and links back to the repository — plus the only promise the app makes: everything you copy stays on this Mac.

Where your data lives

Clippings live only on your Mac, in ~/Library/Application Support/Pastiche pastiche.sqlite3 plus an Images/ folder. Nothing is uploaded anywhere, and deleting an item deletes its row and any image files it owned.

The only network request Pastiche makes is fetching appcast.xml to check for updates.

Updates

Signed updates, straight from the repo

Pastiche ships with Sparkle 2. Each release is a .zip of the app signed with an EdDSA (Ed25519) key that never leaves the maintainer’s machine; the matching public key is baked into the app’s Info.plist.

How a check works

The app fetches appcast.xml from the repository in the background, verifies the signature on the archive, and installs the update on relaunch. The feed is the same file you can read on GitHub — nothing is served from a private endpoint.

Checking manually

Choose Check for Updates… from the menu-bar icon, or open Settings → Updates and press Check Now. Automatic checks can be turned off in the same place.

Updates are only available in the packaged Pastiche.app. A binary run with swift run has no bundle identifier, so Sparkle and launch-at-login are both disabled there.

Every release is written up in the changelog.

Building from source

A plain SwiftPM package

Requirements: macOS 13 or later and the Xcode Command Line Tools (xcode-select --install). A full Xcode install is not needed.

Clone and build
git clone https://github.com/Prestongramberg/Pastiche.git
cd Pastiche

# Debug build / run straight out of the package
swift build

# Build the real, signed .app bundle (icon, Info.plist, Sparkle framework)
bash Scripts/build_app.sh            # add --universal for arm64 + x86_64

What you get

The finished bundle lands at dist/Pastiche.app. Drag it to /Applications and launch it as usual — the same Gatekeeper step applies the first time.

Running the binary directly with swift run works for quick iteration, but there is no bundle identifier in that mode, so updates and launch-at-login are disabled.

Packaging a disk image of your own build is one more command: bash Scripts/make_dmg.sh <version>, which writes dist/Pastiche-<version>.dmg.

Uninstall

Two paths, both complete

Pastiche installs nothing outside the app bundle and its own support folder — no daemons, no kernel extensions, no receipts.

  1. 1

    Quit the app

    Click the menu-bar icon and choose Quit Pastiche (Q). If you had launch-at-login on, turn it off in Settings → General before quitting so the login-item registration is cleaned up.

  2. 2

    Remove the app, and optionally the data

    Deleting Pastiche.app alone leaves your history and pinboards in place, so reinstalling picks up where you left off. Delete the support folder too for a clean slate.

Terminal
# Remove the app
rm -rf /Applications/Pastiche.app

# Remove clipboard history, pinboards, and cached images
rm -rf "$HOME/Library/Application Support/Pastiche"

# Optional: forget the app's preferences
defaults delete com.prestongramberg.pastiche

The second command is permanent — it deletes pastiche.sqlite3 and the Images/ folder with it. Finally, remove the stale entry under System Settings → Privacy & Security → Accessibility by selecting Pastiche and clicking the minus button.

Get help

Something off?

Pastiche is a one-person open-source project. Bug reports with the macOS version and a short repro are genuinely useful.