application block you pass to createCrosslinkServer travels with each
pairing session, so the desktop page states none of it a second time.
With no source option, the card uses the Crosslink system endpoints your host
already exposes (/__crosslink/*). You do not write those routes. The old
source: true spelling remains a compatibility alias, but omission is the
canonical path.
Migration for older controlled integrations: omission now means the canonical
HTTP source. Add
source: false before continuing to drive the card with
update(). Existing source: true, custom base-path strings, and custom
PairingSource objects keep their behavior.Where the branding comes from
Configure it once, on the host:Overriding it in the page
Only when the pairing screen should differ from your host metadata. Options win over what the host reports, field by field — set the name and the colours still come from the host.
There is no option that replaces the card’s markup, swaps its renderer, or
removes the Crosslink mark. That is deliberate: the value of a recognisable
pairing screen is that it is the same screen in every Crosslink application.
The card carries the wordmark and no attribution footer, divider, link or
reserved footer space. The Crosslink attribution footer belongs to the
authorized mobile app shell — see
Mobile bootstrap.
While a setting is applied
Changing the connection mode is a round trip to the host: it re-derives which routes to advertise and may ask your router for a port mapping, which routinely takes seconds. The settings popover shows a spinner and refuses further changes until a session minted under the new mode is on screen, so a slow mode change never looks like a click that did nothing.Framework bindings
The card is plain DOM, so it works anywhere. React gets a thin wrapper that mounts the same implementation:createPairingCard directly. There is no
framework-specific reimplementation to keep in step.
Reacting to pairing
The card drives itself, so callbacks are for your UI, not for its behaviour.onError fires after the card has already rendered the failure and scheduled
a retry. You do not need to build recovery on top of it.
When your host is not reachable over HTTP
An Electron renderer behind a preload bridge, or any page that cannot call the host directly, supplies its own source:Controlled mode (advanced)
Setsource: false and the card renders only what you pass to update().
This explicit opt-out exists for hosts that already own a pairing loop; it is
not the normal integration path, and choosing it means writing the loop the
card would otherwise run for you.