TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻译准备中
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.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Normal mode keeps the tray, Quick Panel, and global shortcuts available. Lightweight mode keeps only the synchronization daemon running after you close its temporary main window. Background startup controls whether automatic login launch opens the main window; opening the app manually always lets you access history and settings. Closing the main window releases its WebView; an active fallback Quick Panel can retain its own resources.
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 clipboard tool. It keeps a searchable, encrypted history of everything you copy, brings it back instantly through the Quick Panel, and syncs text, images, and files across your devices, whether they are on the same Wi-Fi or on different networks. Clipboard content is end-to-end encrypted in transit and stays encrypted at rest; it is decrypted only on your own devices, so relays and the network in between only ever see ciphertext.
[!IMPORTANT] Upgrading from 0.19.x? 1.0 is a breaking upgrade: local data is converted to a new format (you cannot downgrade to 0.19 afterwards), and every device must run 1.0 and be paired again before syncing resumes. Read the 0.19 → 1.0 upgrade guide before upgrading.
uniclip CLI.uniclip covers setup, pairing, sending, receiving, and member management headlessly — built for terminals, SSH sessions, scripts, and servers.Install through your preferred package manager, or choose a download option below. Version badges link to the published packages.
Scoop requires the Extras bucket (scoop bucket add extras). AUR tracks the main branch. Flathub is not published yet.
COPR and the experimental Nix flake are covered in the Linux instructions; the Homebrew section also includes the project tap and CLI. See the full channel status snapshot for prerelease versions and other package sources. Shields.io badges may lag behind a publication because of caching.
Download the latest version from GitHub Releases:
| Platform | Packages |
|---|---|
| macOS | .dmg for Apple Silicon and Intel |
| Windows | Installer (-setup.exe) and portable .zip, for x86_64 and ARM64 |
| Linux | .deb, .rpm, and .AppImage, for x86_64 and aarch64 |
| CLI only | uniclipboard-cli-* archives for macOS, Linux (musl), and Windows x86_64 |
Every release ships .sig signature files and a signed SHA256SUMS.txt for verification.
Don't want to pick a package by hand? One command does it:
curl -fsSL https://uniclipboard.app/install.sh | bash
The script installs the latest stable release and 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 on apt-based systems or uses the COPR repository on dnf-based systems (Ubuntu 20.04 uses the Snap package); 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 v1.0.1
# 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/ COPR / Snap installs are updated by your system package manager, not the in-app updater. AppImage on Linux and.appon macOS update from inside the app.
Each release ships .deb, .rpm, and .AppImage artifacts for both x86_64 and aarch64.
Fedora / RHEL / openSUSE — via COPR (recommended, auto-updating)
sudo dnf copr enable mkdir700/uniclipboard # stable; mkdir700/uniclipboard-alpha for pre-releases
sudo dnf install uniclipboard
After enabling, sudo dnf upgrade will pick up new releases automatically.
Snap
sudo snap install uniclipboard
Nix (x86_64 and aarch64, experimental)
nix run github:UniClipboard/UniClipboard # try it
nix profile add github:UniClipboard/UniClipboard # install (older Nix: nix profile install)
These commands need the nix-command and flakes experimental features. The flake repackages the released .deb and currently pins a pre-release (see packaging/nix/README.md for the NixOS setup, known gaps and the validation status). Update through Nix, not the in-app updater, and do not use the in-app launch-at-login switch on a Nix install.
Or download a single .rpm / .deb / AppImage from the Releases page:
# Debian / Ubuntu
sudo dpkg -i UniClipboard_<version>_amd64.deb
sudo apt-get install -f # resolve missing deps if any
# Fedora / RHEL / openSUSE (one-shot, no COPR)
sudo dnf install ./UniClipboard-<version>-1.x86_64.rpm
# AppImage (any distro)
chmod +x UniClipboard_<version>_amd64.AppImage
./UniClipboard_<version>_amd64.AppImage
Packaged installs (COPR / Snap / rpm / deb) do not auto-update from inside the app — use your package manager. 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.
1.0 converts local data to a new storage and protection format and uses a new pairing scheme:
Follow the 0.19 → 1.0 upgrade guide for the recommended order, backup locations, and recovery steps.
Prerequisites: the Rust toolchain (pinned by rust-toolchain.toml), Bun, Go (version in apps/gui-go/go.mod), and the Wails v3 prerequisites for your OS. The development command bun wails:dev supports macOS and Windows.
git clone https://github.com/UniClipboard/UniClipboard.git
cd UniClipboard
# Install dependencies
bun install
# Start development mode (isolated `dev` profile, so it doesn't touch an installed app's data)
bun wails:dev
# Build a local macOS app bundle
apps/gui-go/build.sh
The bundle layout is described in apps/gui-go/README.md. See CONTRIBUTING.md for multi-peer development, tests, and project conventions.
Already set up and want to move to another space? Use Join another space on the Devices page (or run
uniclip space join --switchfrom the CLI); your local clipboard history is migrated to the new space. Without--switch,uniclip space jointakes the non-destructive re-pair path and does not switch spaces.
The UniClipboard mobile app covers iOS (TestFlight public beta) and Android (APK downloads). On the desktop, open Devices and click the phone icon to open Connect phone, which offers two methods:
Regular sync limitations:
⚠️ If TestFlight shows a certificate error or the Install button keeps spinning, temporarily disable your proxy / VPN client (including global rules, TUN, HTTPS decryption / MitM) so TestFlight connects directly, then re-enable it after installing.
See the mobile app guide and the desktop mobile sync guide for the full setup flow.
flowchart LR
subgraph A["Device A (your laptop)"]
direction TB
CC["Ctrl+C"] --> EA["encrypt<br/>(your key)"]
end
subgraph B["Device B (your desktop)"]
direction TB
DB["decrypt<br/>(your key)"] --> CV["Ctrl+V"]
end
EA -->|"P2P hole-punch"| DB
EA -.->|"falls back"| R["Relay<br/>(sees only<br/>encrypted bytes)"]
R -.-> DB
Components. The desktop app has three parts: the GUI (Go/Wails + React), the background daemon uniclipd that syncs and stores your clipboard, and the uniclip CLI. The GUI and CLI talk to the same local daemon over a loopback HTTP / WebSocket API, so they always show the same state. Sync, encryption, and storage are implemented in the separate UniClipboard Engine repository, which this repository pins to a fixed revision in Cargo.toml.
The uniclip CLI works with or without the GUI (e.g. on servers). Common commands:
uniclip space init # Create a new encrypted space on this device
uniclip space invite # Generate a short-lived invitation code
uniclip space change-passphrase # Change the space passphrase (unlocked, single-device space)
uniclip space join --code <code> # Join a space (re-pair, non-destructive)
uniclip space join --switch --code <code> # Switch to another space
uniclip space status # Inspect the active space and daemon
uniclip member list # List paired devices and presence
uniclip send "hello" # Send text to other devices
uniclip send ./report.pdf # Send an existing file
printf '%s\n' ./a.png './b c.pdf' | uniclip send --file # Send paths from stdin
uniclip send --text report.pdf # Force an existing filename to be sent as text
uniclip get # Fetch the latest entry
uniclip get --wait # Wait for the next synced entry
uniclip get --copy # Copy the latest entry to this computer's clipboard
uniclip search "invoice" # Search clipboard history
uniclip run # Foreground daemon lifecycle
uniclip service start / restart / status / stop # User service lifecycle
Run uniclip --help for the full list, or see the CLI reference.
What we collect — Two separate, anonymous channels: diagnostics (crashes, errors, and redacted logs) and usage analytics (product events such as setup and sync outcomes). They never include clipboard content, file names or paths, passphrases or keys, or search queries. Both are on by default; the first-start notice lets you turn both off, and you can control each one under Settings → General → Privacy. See Privacy & data collection for the exact fields.
What a relay can see — Encrypted bytes and connection metadata (source / destination peer IDs). It can't decrypt your content.
What's stored on disk — An encrypted SQLite database and an encrypted search index; clipboard text, titles, previews, tags, and file names are encrypted before they are written.
If you lose a device — Remove it from any other paired device. Other devices stop sending it new content.
You can audit it — The desktop app and the Engine, including the cryptography, are open source on GitHub.
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.
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.
Devices that can reach each other on the same network connect directly without going through the relay. Settings → Network → LAN-only Mode turns off relay fallback entirely; with it on, devices on different networks cannot reach each other. See the FAQ for what still reaches the internet in this mode.
Only on your devices, encrypted at rest. No UniClipboard server ever receives or stores your clipboard content.
Yes — the UniClipboard mobile app covers both iOS and Android. It connects through Regular sync by default, with an experimental Device connection mode that joins your space by invitation code. See Connect a Phone.
This is expected: 1.0 uses a new pairing scheme, so old pairings are cleared and a 0.19 device cannot pair with a 1.0 device. Upgrade every device to 1.0, then pair them again. See the upgrade guide.
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:
Have questions or suggestions? Create an Issue or contact us to discuss!