You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The mobile app can't be used without first going through the desktop app.
The desktop app is a first-class client — it creates its own identity and
connects directly to a relay. The mobile app is not: it has no independent
identity path. It must receive an identity via NIP-AB pairing from a
desktop app that already has one.
This means anyone running the relay and agents on a headless server has no
way to onboard a mobile device. The mobile app already has the full client
surface — channels, threads, search, forum, agents, reactions, profiles —
but there is no path to reach it.
Workaround (what it takes today)
To get a phone connected without a desktop app, we had to:
Run buzz-pairing-cli source on the server to act as a headless
pairing source.
Fix a payload format incompatibility — the CLI sends PayloadType::Nsec
(raw nsec) but the mobile app expects PayloadType::Custom with {"relayUrl","pubkey","nsec"}, the format the desktop app produces.
Copy-paste the nostrpair:// URI from a terminal to the phone.
Confirm the SAS code on both sides.
After these fixes, pairing succeeded and the mobile app connected. But this
is not a realistic path for users — it requires building from source,
patching the CLI, and juggling a terminal and a phone.
What would help
Two reasonable approaches, neither available today:
Mobile creates its own identity (keypair) and connects directly, the
same way the desktop app does.
Mobile pairs with a headless identity source — the CLI already has a
relay URL and nsec, but has no pair command to transfer them.
Either would make the mobile app usable without a desktop app.
Related: #2324 (pairing docs assume desktop), #2682 (same deadlock —
proposed a web client to avoid the desktop dependency entirely).
Problem
The mobile app can't be used without first going through the desktop app.
The desktop app is a first-class client — it creates its own identity and
connects directly to a relay. The mobile app is not: it has no independent
identity path. It must receive an identity via NIP-AB pairing from a
desktop app that already has one.
This means anyone running the relay and agents on a headless server has no
way to onboard a mobile device. The mobile app already has the full client
surface — channels, threads, search, forum, agents, reactions, profiles —
but there is no path to reach it.
Workaround (what it takes today)
To get a phone connected without a desktop app, we had to:
buzz-pairing-cli sourceon the server to act as a headlesspairing source.
PayloadType::Nsec(raw nsec) but the mobile app expects
PayloadType::Customwith{"relayUrl","pubkey","nsec"}, the format the desktop app produces.CryptoProviderpanic (buzz-cli panics on agents draft-create because rustls CryptoProvider is not installed #2308) when connecting overwss://.nostrpair://URI from a terminal to the phone.After these fixes, pairing succeeded and the mobile app connected. But this
is not a realistic path for users — it requires building from source,
patching the CLI, and juggling a terminal and a phone.
What would help
Two reasonable approaches, neither available today:
same way the desktop app does.
relay URL and nsec, but has no
paircommand to transfer them.Either would make the mobile app usable without a desktop app.
Related: #2324 (pairing docs assume desktop), #2682 (same deadlock —
proposed a web client to avoid the desktop dependency entirely).