UniClipboard UniClipboard
winget install --id=UniClipboard.UniClipboard -e Real-time clipboard sync across all your devices — local-first, peer-to-peer, and end-to-end encrypted. No account. No cloud dependency. No central server.
winget install --id=UniClipboard.UniClipboard -e Real-time clipboard sync across all your devices — local-first, peer-to-peer, and end-to-end encrypted. No account. No cloud dependency. No central server.
English | 简体中文
Who maintains this project? (About & Trust)
> Copy on one device. Paste on another — even across the internet. > > No cloud account. No third-party servers. Your clipboard never leaves your devices in a form anyone else can read.
UniClipboard is a privacy-first, cross-device clipboard synchronization tool. It enables seamless and secure syncing of text, images, and files across multiple devices, whether on the same Wi-Fi or across different networks. Data is encrypted both in transit and at rest, and decrypted only on the user’s devices—neither servers nor the network layer can ever access plaintext data.
Desktop ↔ desktop — real-time, bidirectional clipboard sync between two computers.
Mobile companion — share a screenshot from your phone to your desktop. (click to expand)
> [!WARNING] > UniClipboard is currently under active development and may have unstable or missing features. Feel free to try it out and provide feedback!
uniclip CLI mirrors the GUI flow and works headlessly — built for terminals, SSH sessions, scripts, and tmux workflows.Visit the GitHub Releases page to download the installation package for your operating system.
Don't want to pick a package by hand? One command does it:
curl -fsSL https://uniclipboard.app/install.sh | bash
The script detects OS and CPU automatically:
.app.tar.gz, extracts it, and moves UniClipboard.app into /Applications (escalates with sudo if the directory isn't writable; pass --prefix "$HOME/Applications" for a user-level install)..deb via apt or .rpm via dnf/yum; otherwise falls back to AppImage in ~/.local/bin with a .desktop entry (no root needed).Common flags:
# Pin a specific version
curl -fsSL https://uniclipboard.app/install.sh | bash -s -- --version v0.9.0
# Force AppImage (rootless even when sudo is available)
curl -fsSL https://uniclipboard.app/install.sh | bash -s -- --format appimage
Uninstall with the matching script:
# Remove the app only, keep data and config
curl -fsSL https://raw.githubusercontent.com/UniClipboard/UniClipboard/main/scripts/uninstall.sh | bash
# Full wipe — also removes data directories, config, and cache
curl -fsSL https://raw.githubusercontent.com/UniClipboard/UniClipboard/main/scripts/uninstall.sh | bash -s -- --purge
# Preview what would be removed without deleting anything
curl -fsSL https://raw.githubusercontent.com/UniClipboard/UniClipboard/main/scripts/uninstall.sh | bash -s -- --dry-run
> Update behavior matches the manual download paths below: .deb / .rpm installs are not picked up by the in-app updater — re-run the script or use your system package manager. AppImage on Linux and .app on macOS continue to update from inside the app.
Each release ships .deb, .rpm, and .AppImage artifacts for both x86_64 and aarch64 (where supported).
Fedora / RHEL / openSUSE — via COPR (recommended, auto-updating)
sudo dnf copr enable mkdir700/uniclipboard-alpha # alpha channel; or mkdir700/uniclipboard for stable
sudo dnf install uniclipboard
After enabling, sudo dnf upgrade will pick up new releases automatically.
Or download a single .rpm / .deb / AppImage from the Releases page:
# Debian / Ubuntu
sudo dpkg -i uniclipboard__amd64.deb
sudo apt-get install -f # resolve missing deps if any
# Fedora / RHEL / openSUSE (one-shot, no COPR)
sudo dnf install ./UniClipboard--1.x86_64.rpm
# AppImage (any distro)
chmod +x UniClipboard__amd64.AppImage
./UniClipboard__amd64.AppImage
> Packaged installs (COPR / one-shot rpm / deb) do not auto-update from inside the app — use dnf upgrade / apt upgrade against your package source. The AppImage is what the in-app updater uses on Linux.
On macOS, install via the official tap UniClipboard/homebrew-tap:
brew tap UniClipboard/tap
# Homebrew 6.0+ requires you to trust third-party taps before it will load
# their formulae/casks. Skip this and you'll hit
# "Refusing to load ... from untrusted tap". It only needs to run once.
brew trust UniClipboard/tap
# Desktop app (.app bundle)
brew install --cask uniclipboard
# CLI only — installs the `uniclip` command
brew install uniclipboard
Or install in a single command without tapping first (still trust the tap once):
brew trust UniClipboard/tap # Homebrew 6.0+, one-time
brew install --cask UniClipboard/tap/uniclipboard # GUI
brew install UniClipboard/tap/uniclipboard # CLI
The cask and the formula can coexist — install both if you want the GUI plus the uniclip command.
# Clone the repository (`--recurse-submodules` pulls the iroh-blobs fork
# under src-tauri/vendor/iroh-blobs/; without it `cargo build` fails).
git clone --recurse-submodules https://github.com/UniClipboard/UniClipboard.git
cd UniClipboard
# Install dependencies
bun install
# Start development mode
bun tauri dev
# Build application
bun tauri build
> Already set up and want to move to another space? Use Switch space from the Devices page (or run uniclip join --switch from the CLI) — your local clipboard history is re-encrypted and migrated. Without --switch, uniclip join takes the non-destructive redeem / re-pair path and does not switch spaces.
The UniClipboard iOS App is now in TestFlight public beta. On Android, install the UniClipboard Android client — a fork of SyncClipboard that ships APKs in releases; any other SyncClipboard-compatible client also works. Either way, the phone joins as an HTTP companion — the desktop daemon exposes a small SyncClipboard-compatible HTTP service, and the phone reads/writes the clipboard against it (on the LAN by default, or across networks via a server node or Tailscale).
0.0.0.0 / Auto onto a phone screen).https://testflight.apple.com/join/nyNQ8dQe to accept the invite and install the UniClipboard iOS App; enter the desktop's URL + credentials in the app. The bundled iOS Shortcut (installed by scanning the QR) still works as a fallback.
> ⚠️ If TestFlight shows a certificate error, or the Install button spins because TestFlight can't reach App Store Connect, temporarily disable your proxy / VPN client (Loon, Surge, Clash, etc. — including global rules, TUN, HTTPS decryption / MitM) so TestFlight goes direct. Re-enable it after the app is installed.Limitations (today):
See the Mobile sync guide for the full setup flow, or the headless server node guide to reach your phone over HTTPS from any network.
flowchart LR
subgraph A["Device A (your laptop)"]
direction TB
CC["Ctrl+C"] --> EA["encrypt(your key)"]
end
subgraph B["Device B (your desktop)"]
direction TB
DB["decrypt(your key)"] --> CV["Ctrl+V"]
end
EA -->|"P2P hole-punch"| DB
EA -.->|"falls back"| R["Relay(sees onlyencrypted bytes)"]
R -.-> DB
The uniclip CLI mirrors the GUI flow and works headlessly (e.g. on servers):
uniclip init # Create a new encrypted space on this device
uniclip invite # Generate a short-lived invitation code
uniclip join # Join a space (re-pair, non-destructive)
uniclip join --switch # Switch to another space (re-encrypts local history)
uniclip members # List paired devices and presence
uniclip send "hello" # Send clipboard content to other devices
uniclip watch # Stream incoming clipboard events
uniclip status / start / stop # Daemon lifecycle
What we collect — Anonymous telemetry to help improve the app — never your clipboard content or any of your personal data. You can turn it off anytime in Settings, and we fully respect that choice.
What a relay can see — Encrypted bytes and connection metadata (source / destination peer IDs). It can't decrypt your content, ever.
What's stored on disk — An encrypted SQLite database, plus a search index designed so full-text search works without exposing plaintext.
If you lose a device — Revoke it from any other paired device. Future syncs will exclude it immediately.
You can audit it — Every line, including the cryptography, lives on GitHub. Trust the code, not the marketing.
Why not just use iCloud Universal Clipboard?
If you only use Apple devices, don't need history, and fully trust Apple's closed-source end-to-end encryption — iCloud is fine. The moment you add a Windows or Linux machine, want a searchable history, or want to verify the encryption yourself, you need something else.
Why not a self-hosted clipboard sync (e.g. ClipCascade)?
Self-hosted means you have to run a server. UniClipboard works out of the box — direct P2P first, encrypted relay only as a fallback. You never have to operate any infrastructure.
Does it work fully offline / LAN-only?
Yes. Devices on the same Wi-Fi connect directly without going through the relay. Even if the relay is unreachable, devices on the same network keep syncing.
Where does my clipboard history actually live?
Only on your devices. Local storage is encrypted at rest with a key that never leaves the device's system keyring. No UniClipboard server ever receives or stores your clipboard content.
Is there a mobile app?
On iOS, yes — the UniClipboard iOS App is now in TestFlight public beta. Install TestFlight from the App Store, then open testflight.apple.com/join/nyNQ8dQe to accept the invite and install the build. On Android, install the UniClipboard Android client — a fork of SyncClipboard with APKs in releases; any other SyncClipboard-compatible client also works. Either way, mobile runs as an HTTP companion: the desktop daemon exposes a SyncClipboard-compatible HTTP endpoint and the phone talks to it with a base URL + Basic Auth. It's bidirectional; on the LAN out of the box, or across networks via a server node (public HTTPS) or Tailscale. Mobile itself does no NAT traversal or relay. The bundled iOS Shortcut still works as a fallback. See the Pair a Mobile Device section above.
Contributions of all kinds are welcome! Please read CONTRIBUTING.md for the full development setup, branching strategy, commit conventions, and PR process.
Quick start:
git checkout -b feature/amazing-feature)git push origin feature/amazing-feature)main branchThis project is licensed under the AGPL-3.0 License - see the LICENSE file for details.
Join us to chat with other users and the dev team:
<strong>QQ Group</strong>
<strong>WeChat Group</strong>
<img src="./assets/qq-group-qrcode.jpg" width="250" />
<img src="./assets/wechat-group-qrcode.png" width="250" />
Have questions or suggestions? Create an Issue or contact us to discuss!