Skip to main content
Crosslink is a framework for securely connecting a web or mobile interface to an application running on another device. Any app on your computer can talk to any app on your phone or browser over an end-to-end encrypted channel — paired once by scanning a QR code, then reconnected automatically forever after.

What problem does it solve?

Every app reinvents device pairing: ad-hoc tokens, hand-copied keys, homegrown crypto, brittle sockets. Crosslink packages the hard parts once: Open-source developers also hit a distribution wall when a desktop project needs a mobile companion. Native iOS and Android apps bring store publishing fees, signing and review requirements, duplicated platform code, and sometimes proprietary licensing. Crosslink lets those projects ship an installable browser or PWA companion with a $0 app-store publishing fee, while keeping the host and companion open source. Crosslink is batteries-included on purpose. You do not write a pairing screen, a QR, an install flow, a service worker or a reconnect page — those are the framework’s, and they look and behave the same in every Crosslink application. A complete mobile integration is one config field and one callback:
  • You have an app on a desktop/server and want a phone to control it
  • You need a phone-as-remote pattern (remote desktop, presentation control, media remote)
  • You want to let users pair devices without accounts, OAuth, or cloud sync
  • You need encrypted RPC between processes on different devices
  • You’re building an Electron/Tauri app that needs a companion mobile interface

Real-world use cases

Architecture overview

In more detail:
The signaling service helps devices find each other and route pairing codes. The relay forwards encrypted traffic when a direct connection isn’t possible. Both services see zero plaintext.

What the services do

Security architecture

Services are untrusted by design:
  • Signaling sees only hashed codes and opaque signed blobs
  • Relay sees only ciphertext
  • Compromising either cannot forge, decrypt, or substitute identities
Crosslink provides the transport and authentication primitives. Your application is responsible for:
  • Validating input at the RPC layer (schema validation)
  • Rate limiting at the application level
  • Logging security-relevant events
  • Implementing proper error handling
  • Following the principle of least privilege in capability design

Key properties

  • No accounts required — devices pair by scanning a QR code
  • End-to-end encrypted — the relay and signaling servers never see your data
  • Forward secrecy — every session uses fresh ephemeral keys
  • Capability-based permissions — granular access control per device
  • Transport agnostic — works over LAN, relay, or WebRTC with automatic fallback
  • Cross-platform — Node.js, browsers, Electron, Tauri

How it differs from alternatives

Packages

Next steps

Quickstart

Get a working connection in under 5 minutes

Architecture

Understand how the pieces fit together

Security

Crypto choices, threat model, and security invariants

Self-Hosting

Deploy your own signaling and relay