Skip to main content

What the user sees

An installed Crosslink app that is opened while the desktop host is off does not show the browser’s cannot connect to server page. Crosslink caches its own shell, so the app opens to a Crosslink screen naming your application:
You do not build or register this screen. It is rendered by the mobile bootstrap from your application metadata, carries your colours and icon, and shows the Crosslink mark and attribution. It retries on its own, and when the host comes back it verifies the existing device identity and hands your app a fresh session — no new pairing code. Re-pairing is required only when the trust relationship is genuinely gone: revoked from the desktop, deleted, or unreadable. Not when the desktop was closed, the machine slept or restarted, the Wi-Fi changed, or the phone moved networks.
This depends on a cached service worker, which a browser only registers on a secure origin. Served from a plain-HTTP LAN address there is no cached shell and an offline launch falls back to the browser’s error page. See Durable Origins — and check host.describeMobileDelivery() before assuming you have this.

Client offline

When the client loses connectivity:

Host offline

When the host goes offline:

Host unreachable but running

If the host is running but unreachable (network partition):

Offline call queueing

Only idempotent methods are queued during disconnection:

What makes a method idempotent?

A method is idempotent if calling it multiple times with the same input produces the same result:
  • Read operations (get, list, search) — naturally idempotent
  • Write operations (create, update, delete) — generally not idempotent
  • Conditional writes (update if current == X) — idempotent
Mark methods as idempotent in the RPC options:

Subscription restore

After reconnection, subscriptions are automatically restored:

Identity persistence

Both host and client persist their identity across restarts:
  • Host: .crosslink-data/<appId>/identity.json (or OS keychain)
  • Client: IndexedDB (encrypted) or localStorage (fallback)
Restarting the host preserves all paired devices and their capabilities.

Storage cleanup

Relay channels expire after 24 hours. The host automatically re-allocates and re-publishes. Pairing codes expire after 2 minutes. Expired codes are cleaned up automatically. Client transport hints are persisted locally for faster reconnection after network changes.