CrossPaste: LAN Clipboard Sync in Kotlin, With an OCR and MCP Twist
Cross-device clipboard sync for macOS, Windows & Linux — end-to-end encrypted, LAN-only, no cloud. OCR, CLI and MCP server built in.
At a glance
- What is it?
- CrossPaste syncs your pasteboard across macOS, Windows and Linux over the local network, with no cloud relay and an AGPL-3.0 licence. The interesting parts are the built-in OCR, the CLI, and an MCP server that hands your clipboard history to an AI assistant.
- Who is it for?
- Adopt CrossPaste if you move a lot of text, images or files between machines on the same network and you want the clipboard history to stay on your own hardware. Skip it if your devices are rarely on the same LAN, or if you need a hosted sync service with an SLA.
- Can I use it commercially?
- Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Kotlin, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What CrossPaste Solves, and for Whom
The clipboard is the one piece of state that every operating system keeps local. Copy a link on a laptop, walk to a desktop, and the paste fails. Cloud clipboard services exist, but they route your text through someone else's servers, which is a hard sell for passwords, tokens and internal documents. CrossPaste takes the other position: the README describes a LAN-only, serverless architecture with local storage, so the data path is your own network and your own disk. The README lists text, colour, URL, HTML, RTF, image and file as supported pasteboard types, which matters because most sync tools stop at plain text. The target user is a developer or power user with two or three machines on one desk or one office network, who wants clipboard history and cross-device paste without a subscription and without a vendor holding the payload.
How the Sync Actually Works
The README describes end-to-end encryption using asymmetric encryption, and a serverless architecture where each device stores its own data. That combination implies a peer-to-peer model: devices discover each other on the local network, and content is encrypted so that even a device that relays traffic cannot read it. The README does not spell out the discovery protocol, the key exchange, or how devices are paired, so those details cannot be confirmed from the supplied material. What is visible is the storage layer: the repository badges list SQLite as the database, and the README mentions auto-cleanup options for pasteboard storage, which suggests a local history table with a retention policy rather than an in-memory buffer. The UI is Compose Multiplatform, which is why the same interface appears on macOS, Windows and Linux. The Chrome extension follows the same pattern: the README states it auto-discovers a CrossPaste desktop app running on the same machine and syncs clipboard content with it, and that it imports a Kotlin/JS core library built from the same repository.
Building and Running From Source
The README gives a short path. Clone the repository, then run ./gradlew app:run from the project root. The first start downloads JetBrains Runtime and Gradle dependencies, so expect a slow initial build and a network connection. If the download fails with java.net.SocketException: Connection reset, the README says a VPN may be needed, and it shows how to configure a Gradle proxy by adding systemProp.https.proxyHost, systemProp.https.proxyPort, systemProp.https.proxyUser, systemProp.https.proxyPassword and systemProp.http.nonProxyHosts to gradle.properties. The Chrome extension is a separate build: ./gradlew :web:build emits an unpacked extension into web/dist/, which you load via chrome://extensions/ with Developer mode enabled. Node.js 18 or newer is required, and the npmInstall task fetches dependencies on first build. For extension iteration, npm run dev inside web/ gives a Vite dev loop, but any change under core/ requires re-running ./gradlew :core:jsBrowserProductionLibraryDistribution.
The OCR and MCP Features Change the Calculus
Two features separate CrossPaste from a plain clipboard sync tool. The first is built-in OCR: the README says text is extracted from images locally, with no network calls, so screenshots never leave the device. That is a meaningful constraint on where the OCR model runs, and it means the feature works offline. The second is an MCP server, which the README describes as exposing pasteboard history to AI assistants such as Claude through the Model Context Protocol. This is an unusual design choice. Instead of building a chat interface, CrossPaste acts as a data source that an external assistant queries. The practical effect is that an AI tool can read what you copied earlier without you pasting it manually. The README does not document the MCP server's transport, authentication or scope, so anyone evaluating it for a shared machine should treat those as open questions. There is also a CLI, documented separately in doc/en/CLI.md, for copying, pasting and searching history from the terminal.
Where CrossPaste Is the Wrong Tool
The LAN-only design is the source of its main limitation. If your laptop is on a coffee shop network and your desktop is at home, there is no path between them, because the README describes no cloud relay and no account-based sync. Cross-device paste then degrades to local clipboard history, which is useful but not the headline feature. The second constraint is platform coverage: the README lists Windows, macOS and Linux, so mobile devices are out of scope. Anyone who expects to copy on a phone and paste on a desktop will not find that here. The third is build friction. The first ./gradlew app:run downloads JetBrains Runtime and dependencies, and the README explicitly warns that a connection reset during that download may require a VPN. In restricted corporate networks, that alone can stall an evaluation. Finally, the AGPL-3.0 licence is a real consideration: it is a strong copyleft licence, and the repository does not present an alternative commercial licence in the supplied material. If you plan to embed CrossPaste in a product, read the licence text rather than assuming permissive terms.
How It Compares to KDE Connect and Syncthing
KDE Connect is the closest well-known alternative for cross-device clipboard sharing, and the difference is scope. KDE Connect is a general device-integration layer: notifications, media control, file transfer, remote input, and clipboard sync as one feature among many. CrossPaste is narrower and deeper on the clipboard itself. It keeps a searchable history, handles rich pasteboard types including HTML and RTF, runs OCR on images, and exposes the history through a CLI and an MCP server. Syncthing is a different comparison again: it synchronises files between devices with no central server, and you could in principle sync a clipboard file, but it has no notion of pasteboard types, no OCR, and no history UI. The trade-off is that CrossPaste asks you to trust its own peer discovery and pairing, while KDE Connect and Syncthing have longer track records in that area. The README does not describe the pairing or discovery mechanism, so that trust is not something this material can verify.
Maintenance, Releases and Licence Cost
The release cadence visible in the repository is roughly monthly: 2.1.6.2390 in mid July 2026, 2.1.7.2461 in early August, and 2.2.0.2544 on 1 September 2026, with the last push to main on 10 September 2026. That is a project under active development, not an abandoned one, and the version numbering suggests frequent patch releases rather than long-lived stable branches. The README points to a roadmap document and states that a plugin system for custom paste types and integrations is planned but not yet shipped, so anyone who needs extensibility should treat it as future work rather than a current capability. The licence is AGPL-3.0. In plain terms, that is a copyleft licence with a network clause: if you modify the software and let users interact with it over a network, the source of your modified version generally has to be offered to those users. That is a summary, not legal advice, and the obligations depend on how you deploy it. For individual desktop use, the licence is unlikely to create obligations. For a hosted or embedded product, it likely does.
Editorial conclusion
Adopt CrossPaste if you move a lot of text, images or files between machines on the same network and you want the clipboard history to stay on your own hardware. Skip it if your devices are rarely on the same LAN, or if you need a hosted sync service with an SLA. Before installing, verify two things: that your machines can reach each other over the local network, and that the AGPL-3.0 terms are acceptable for how you intend to use the software. Then run ./gradlew app:run from the repository, or download the 2.2.0.2544 build from crosspaste.com, and confirm that the first-run pairing flow completes on each device.
Community notes