LAN clipboard sync for Windows, macOS, and Linux.
- Text clipboard sync only.
- Manual file sending is available through the CLI, and the tray UI can send a selected file to an online trusted device.
- Automatic peer discovery over UDP broadcast on the local network.
- Encrypted transport with self-signed TLS certificates.
- Pairing trust persisted locally after confirmation.
- Local control plane for status, pause, resume, and stop.
ca runStart the tray app instead of the plain CLI service:
ca trayOn Windows, the default build already includes tray support. On Linux and macOS, build with --features desktop-ui when you want tray/dialog support.
Useful flags:
ca run --pairing prompt
ca run --pairing auto-acceptQuery the running service:
ca status
ca configPause or resume sync without stopping the process:
ca pause
ca resumeAsk the running service to exit:
ca stopManually test file transfer to an already paired peer:
ca send-file t480 ./example.txt
ca send-file dd7b1e4a-2bd9-4a4c-a7d7-92f134863ef1 ./example.txt
ca send-file 192.168.1.10:37848 ./example.txt
ca send-files t480 ./a.txt ./b.txt
ca received-files
ca copy-received
ca copy-received 1
ca copy-received example.txt
ca open-received
ca open-received 1
ca reveal-received
ca reveal-received example.txt
ca open-inbox
ca prune-received-history
ca clear-received-history
ca transfers
ca retry-failed-transfer
ca retry-failed-transfer 1
ca clear-transfer-historyList trusted peers:
ca trustRemove one trusted peer:
ca unpair <device-id>Clear all trusted peers:
ca reset-trust
ca set-device-name my-laptop
ca set-pairing prompt
ca set-pairing auto-accept
ca autostart
ca enable-autostart
ca disable-autostart
ca set-listen-port 37848
ca set-discovery-port 37847
ca set-control-port 37849
ca reload-config
ca doctor
ca self-test
ca regression-test
ca export-diagnosticsBuild release artifacts:
pwsh ./packaging/package-windows.ps1
sh ./packaging/package-macos.sh
sh ./packaging/package-linux.shWindows packaging details:
build.rsembeds Windows version metadata intoca.exe.packaging/package-windows.ps1produces:dist/windows/portable/dist/windows/ca-windows-portable.zipdist/windows/installer/ca-setup.exewhen Inno Setupisccis installed
packaging/ca.issis the Inno Setup script used for the installer build.- When you bump the app version, update both
Cargo.tomlandpackaging/ca.iss.
- Each machine must run CopyAnywhere in the foreground or as a background process.
- Pairing confirmation now prefers a desktop dialog; terminal input is only used as a fallback when no GUI dialog is available.
- Clipboard sync uses the system clipboard, so users still paste with the native
Ctrl+Vor platform equivalent. - The default config directory is the
conf/directory next to thecaexecutable unless--config-diris provided. runalso starts a local control socket on127.0.0.1:37849by default;status,pause,resume, andstoptalk to that control plane.configprints the persisted device settings, config directory, and autostart entry path.set-device-nameupdates the stored device name. Restart the service afterward so discovery broadcasts and TLS identity metadata reflect the new name everywhere.set-pairingswitches betweenpromptandauto-accept. This takes effect immediately when the service is already running.autostart,enable-autostart, anddisable-autostartmanage per-user startup entries:- Windows:
%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\ca-tray.cmd - macOS:
~/Library/LaunchAgents/com.copyanywhere.ca.plist - Linux:
~/.config/autostart/ca.desktop
- Windows:
reload-configreloads mutable settings fromconfig.jsoninto the running service. Port changes still require a restart because listeners are already bound.set-listen-portandset-discovery-portupdate the stored ports. If the service is running, the change is saved immediately but takes effect only after a restart.set-control-portupdates the stored control port for the next launch. Change it while the service is stopped, or restart immediately after changing it.doctorprints a diagnostic summary including config, runtime status, active transfers, recent warnings/errors, and Linux clipboard environment variables.self-testperforms executable local checks for config/inbox writability, clipboard availability, autostart entry resolution, and control-plane reachability.regression-testcreates a temporary isolated config, starts a localcaservice instance, verifies control-plane operations, config reload, history read/write, file chunking, diagnostics export, and graceful shutdown, then removes the temp workspace.export-diagnosticswrites a JSON report under the active config directory'sdiagnostics/subdirectory.trayshows online devices and trusted devices in submenus, can forget trusted peers, exposes a Settings submenu for device name, listen/discovery ports, pairing policy, autostart,Open Config File, andReload Config, and uses desktop dialogs for pair requests plus key runtime errors and pause/resume feedback.send-fileandsend-filesaccept a device name, device id, or rawip:port. In tray mode,Send Fileshows online trusted devices and opens a native multi-file picker before sending.- Batch sends now report per-file progress in the CLI and show start/completion notifications in tray mode.
- The tray now shows live
Active Transferswith progress percentages and aRecent Diagnosticssubmenu with the latest warnings/errors. - The tray also shows a compact top-level health summary derived from runtime failure counters.
regression-testis intentionally single-machine. It does not prove LAN discovery, cross-machine pairing, or real remote clipboard/file transfer.- In tray mode, incoming file transfers ask for confirmation first and let the user choose a save location. In plain CLI mode, incoming files continue to land in the default inbox automatically.
- Received files are tracked in an inbox manifest with file name, size, source device, timestamp, and stored path metadata.
- On macOS, a newly received file is also published to the local file clipboard automatically, so the user can paste it into Finder or another file target immediately after receipt.
- On Linux, file clipboard publishing now works as a best-effort bridge through
wl-copyorxclipwhen one of those tools is available in the desktop session. - On Windows, file clipboard publishing now works through a PowerShell/STA clipboard bridge, so received files can be pasted into Explorer or another file target in a normal desktop session.
copy-receivedpublishes a received file back to the local file clipboard by latest item, 1-based index, transfer id, file name, or stored path.open-receivedopens a received file locally by latest item, 1-based index, transfer id, file name, or stored path.reveal-receivedreveals a received file in the local file manager.open-inboxopens the local inbox directory.prune-received-historyremoves manifest entries whose files no longer exist on disk.clear-received-historyclears the received-file manifest history without deleting the files themselves.transferslists recent send/receive outcomes from the transfer history.retry-failed-transferretries a recent failed send by latest item, 1-based index, transfer id, file name, peer id, peer name, or source path.clear-transfer-historyclears the transfer-history log.- The tray can also prune missing history entries, clear received history, and open, reveal, or copy recent received files directly.
- The tray also shows a recent transfer summary submenu, can clear transfer history, and offers
Retry ...for recent failed sends. - The tray can open the active config directory directly. Device-name editing is still CLI-driven because the current desktop dependency set does not include a cross-platform text-input dialog.
- From the tray, changing the device name is immediate in config but still requires a service restart before other peers see the new identity everywhere.
- From the tray, changing the listen or discovery port saves the new value and reminds you to restart the service. The control port remains a CLI/config-file setting because the live control socket cannot move transparently.
- Local file clipboard publishing is implemented on macOS, as a best-effort bridge on Linux, and through PowerShell on Windows.
- Desktop UI is enabled by default on Windows builds. On Linux and macOS, default builds stay CLI-only; use
--features desktop-uiwhen you want tray dialogs and are willing to satisfy the platform GUI dependencies. - The packaging scripts create simple
dist/<platform>/folders with the built binary andREADME.md; they do not yet perform code signing or produce native installers. - Windows packaging now includes a native Inno Setup installer script, but code signing is still not configured.