Skip to main content

Lightweight clipboard history manager for macOS

Project description

Clipsy

PyPI CI codecov Python 3.10+ Platform: macOS License: MIT

A lightweight clipboard history manager for macOS. Runs as a menu bar icon — no admin privileges, no code signing, no App Store required.

Features

  • Clipboard history — Automatically captures text, images, and file copies
  • Image thumbnails — Visual previews for copied images in the menu
  • Sensitive data masking — Auto-detects API keys, passwords, SSNs, credit cards, private keys, and tokens; displays masked previews with 🔒 icon
  • Search — Full-text search across all clipboard entries (SQLite FTS5)
  • Click to re-copy — Click any entry in the menu to put it back on your clipboard
  • Deduplication — Copying the same content twice bumps it to the top instead of creating a duplicate
  • Auto-purge — Keeps the most recent 500 entries, automatically cleans up old ones
  • Persistent storage — History survives app restarts (SQLite database)
  • Corporate IT friendly — Runs as a plain Python process, no .app bundle or Gatekeeper issues

Requirements

  • macOS
  • Python 3.10+ (Homebrew recommended: brew install python3)

Installation

Via pipx (recommended)

brew install pipx
pipx install clipsy
clipsy install

Via pip

pip install clipsy
clipsy install

From source

git clone https://github.com/brencon/clipsy.git
cd clipsy
python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/clipsy install

Usage

After running clipsy install, the app runs in the background and starts automatically on login. A scissors icon (✂️) appears in your menu bar.

Then just use your Mac normally. Every time you copy something, it shows up in the Clipsy menu:

[✂️ Icon]
├── Clipsy - Clipboard History
├── ──────────────────
├── Search...
├── ──────────────────
├── "Meeting notes for Q3 plan..."
├── "https://github.com/example..."
├── 🔒 "password=••••••••"
├── [thumbnail] "[Image: 1920x1080]"
├── ... (up to 10 items)
├── ──────────────────
├── Clear History
├── ──────────────────
├── Support Clipsy
├── ──────────────────
└── Quit Clipsy

Commands

clipsy install    # Install as background service (starts on login)
clipsy uninstall  # Remove from login items
clipsy status     # Check if running
clipsy            # Run in foreground (for debugging)

Data Storage

All data is stored in ~/.local/share/clipsy/:

File Purpose
clipsy.db SQLite database with clipboard entries
images/ Saved clipboard images (PNG files)
clipsy.log Application log

Development

# Install with dev dependencies
.venv/bin/pip install -e ".[dev]"

# Run tests
.venv/bin/python -m pytest tests/ -v

# Run with coverage
.venv/bin/python -m pytest tests/ --cov=clipsy --cov-report=term-missing

Architecture

NSPasteboard → monitor.py → redact.py → storage.py (SQLite) → app.py (menu bar UI)
  • app.pyrumps.App subclass; renders the menu bar dropdown, handles clicks and search
  • monitor.py — Polls NSPasteboard.changeCount() every 0.5s; detects text, images, and file copies
  • storage.py — SQLite with FTS5 full-text search, SHA-256 deduplication, auto-purge
  • redact.py — Sensitive data detection and masking (API keys, passwords, SSN, credit cards, tokens)
  • config.py — Constants, paths, limits
  • models.pyClipboardEntry dataclass, ContentType enum
  • utils.py — Hashing, text truncation, PNG dimension parsing, thumbnail generation

Dependencies

Only one external dependency:

  • rumps — macOS menu bar app framework (brings pyobjc-framework-Cocoa transitively)
  • sqlite3 — Built into Python

License

MIT License — see LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

clipsy-1.6.0.tar.gz (26.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

clipsy-1.6.0-py3-none-any.whl (17.2 kB view details)

Uploaded Python 3

File details

Details for the file clipsy-1.6.0.tar.gz.

File metadata

  • Download URL: clipsy-1.6.0.tar.gz
  • Upload date:
  • Size: 26.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for clipsy-1.6.0.tar.gz
Algorithm Hash digest
SHA256 7bfb40c123563bc1471081045b77bb2fb7611c0a48fef0ddcafdf47ca5b12a6c
MD5 9a8409d9f21e9c9db06f789c6b8eb910
BLAKE2b-256 60bce30e17a5113e5aec30cb6292ecfdef4484f35b2cbfdc85b9af5a08011759

See more details on using hashes here.

Provenance

The following attestation bundles were made for clipsy-1.6.0.tar.gz:

Publisher: release.yml on brencon/clipsy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file clipsy-1.6.0-py3-none-any.whl.

File metadata

  • Download URL: clipsy-1.6.0-py3-none-any.whl
  • Upload date:
  • Size: 17.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for clipsy-1.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 eede24ac2cd97b9912e80a6d32259ca99a8972fe938f22aeb1cb9fc1a62ca38c
MD5 6101e2df41dbd384f3676bb707ffc207
BLAKE2b-256 de8d5ec08bae7c327abd53a13654894b333f31bf70e8f84a5be0fb4b3d8a582a

See more details on using hashes here.

Provenance

The following attestation bundles were made for clipsy-1.6.0-py3-none-any.whl:

Publisher: release.yml on brencon/clipsy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page