copy/paste,
everywhere.

Peer-to-peer clipboard sync over SSH. Copy anything on one machine, paste on another. Open source, and Written in Rust ackchyually.

then run ssh-clipboard to set up your machines

* native

Writes the real system clipboard: NSPasteboard on macOS, Wayland or X11 on Linux.

* private

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

* faithful

Ships every clipboard representation: rich text, images, files.

* invisible

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

* fast

Sends raw bytes over persistent connections through deduplicated, newest-value queues.

* self-updating

Daemons gossip verified versions and converge on the latest stable release. No central coordinator.

# Install

The npm package installs a native Rust binary and a per-user 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 for npm install; the daemon has no Node dependency
  • Tailscale SSH is recommended but passwordless ~/.ssh keys work too

# Quick start

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

  1. verifies the connection,
  2. installs the right binary over SSH,
  3. starts the per-user service on both ends.

Copy on one machine, paste on another. After setup it behaves like one clipboard.

$ 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.

Every command has a machine-readable twin: status --json for health checks, monitor --json for an NDJSON event stream you can pipe anywhere.

# 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. On change, it ships the raw bytes of every representation to its peers over persistent SSH and writes them back natively.

No relay, cloud account, additional port forwarding required. Values are deduplicated, and per-peer queues always deliver the newest value.

# Updates

Each daemon checks npm for the latest stable release and tells its peers what it found, so any machine that's online can update the whole mesh. There's no central update server.

Before installing anything, a daemon verifies the npm SHA-512 hash, the bundled SHA-256 manifest, the executable target, and the version the binary actually reports. Updates keep the old executable around, swap the new one in atomically, and let launchd or systemd restart the daemon.

$ ssh-clipboard update --check
current: 0.2.0
latest:  0.2.0
StandardAgents[ early access ]

Standard Agents is an open standard for domain-specific agents you can distribute and compose. From the team behind FormKit, Tempo, dmux, ArrowJS, AutoAnimate, and Drag and Drop. Join the early access waitlist below.