macOSLinuxarm64 · x64MIT

Your clipboard,
everywhere.

Peer-to-peer clipboard sync over encrypted SSH. Copy here, paste there — text, images, files, rich content, native formats intact. Written in Rust ackchyually.

then run ssh-clipboard — that's the whole setup

0 relays·0 accounts·0 open ports· machines

* native

macOS pasteboard plus Linux Wayland and X11 — real system clipboards, not terminal escape tricks.

* private

Persistent peer-to-peer SSH. No relay, no account, no open port, no new encryption key to manage.

* faithful

Preserves every available clipboard representation — rich text, images, files — not just text or PNG.

* invisible

Raycast and other clipboard managers see ordinary system clipboard writes. Nothing to configure.

* fast

Raw bytes over persistent connections, with deduplication and newest-value queues.

* self-updating

Daemons gossip verified versions peer-to-peer and converge on the latest stable release — no coordinator.

# Install

One package, two commands. The npm package is just the installer — the thing that runs is a native Rust binary with a per-user background service (launchd on macOS, systemd on Linux).

$ npm i -g ssh-clipboard
$ ssh-clipboard

You'll need:

  • macOS or Linux (Wayland or X11), on arm64 or x64
  • Node ≥ 18 — only for npm install; the daemon has no Node dependency
  • Passwordless SSH between your machines — Tailscale SSH is perfect, plain old ~/.ssh keys work too

# Quick start

Run ssh-clipboard with no arguments. The first-run TUI offers compatible online machines from Tailscale when it's installed, or accepts any passwordless SSH destination. For each peer it:

  1. verifies the connection actually works,
  2. installs the right native binary for that platform over SSH,
  3. starts the per-user background service on both ends.

That's it. Copy on one machine, paste on another. After setup it just feels like one clipboard — there is no step two.

$ ssh-clipboard status
running as macbook (node-a1, pasteboard, version 0.2.0)
connected: fedora
connected: macbookserver

# Commands

ssh-clipboard
First run: setup TUI. After that: the live monitor dashboard.
ssh-clipboard setup
Add, verify, or repair peers. Re-runs installation where needed.
ssh-clipboard monitor
Watch clipboard values and peer health in a Ratatui dashboard. --plain streams readable lines, --json streams NDJSON.
ssh-clipboard status
Daemon and connection status. --json for automation.
ssh-clipboard update
Install the latest stable release. --check compares versions without installing.
ssh-clipboard service
Manage the per-user background service: install, start, stop, restart.

Everything human-readable has a machine-readable twin: status --json for health checks, monitor --json for a newline-delimited event stream you can pipe into whatever you're building.

# How it works

┌──────────────┐         encrypted SSH         ┌──────────────┐
│    macbook   │ ◀═══════════════════════════▶ │    fedora    │
│  pasteboard  │    persistent · deduplicated  │ wayland/x11  │
└──────────────┘         newest-wins           └──────────────┘

A small Rust daemon on each machine watches the system clipboard through native backends — the macOS pasteboard, or Wayland/X11 on Linux. When the clipboard changes, it ships the raw bytes of every available representation to its peers over persistent SSH connections and writes them back natively on the other side.

There's no relay server, no cloud account, and no new cryptography — transport security is exactly the SSH trust you already have between your machines. Values are deduplicated, and per-peer queues always deliver the newest value rather than replaying history.

# Updates

Every daemon independently checks npm for the latest stable release and gossips its verified desired version to connected peers, so any online machine can trigger the whole mesh to converge — there is no permanent update coordinator.

Packages are accepted only after the npm SHA-512 integrity hash, the bundled SHA-256 manifest, the executable target, and the reported binary version all agree. Updates keep the previous executable around, swap the live binary atomically, and let launchd/systemd restart the daemon.

$ ssh-clipboard update --check
current: 0.2.0
latest:  0.2.0
StandardAgentsEARLY ACCESS

From the team behind FormKit, Tempo, dmux, AutoAnimate, and Drag and Drop — Standard Agents is an open standard for creating domain-specific agents you can distribute and compose together to form safe, efficient, and effective agents. Join the early access waitlist below.