Skip to content

Research 0001 — Shell and bridge technology choice ​

Status: Decided — see ADR 0001 and ADR 0004.

Question ​

What native shell technology should sovereign-mobile use, and how should it expose device capabilities to plugin authors without forking the platform into a second implementation?

Options considered ​

Shell framework ​

OptionNotes
CapacitorTypeScript-first; WKWebView / Android System WebView; plugin bridge model built for exactly this shape of app. Matches sovereign-desktop's Tauri model conceptually (thin native wrapper, WebView content).
Hotwire NativeRequires separate native bridge code per platform (Swift + Kotlin), working against the goal of one shared TypeScript shell logic layer.
React NativeRebuilds the UI as a second native client rendered outside the WebView — the opposite of "load the user's instance unchanged." Appropriate for sovereign-edge (a genuinely native, standalone app with its own UI) but not for a thin instance-loading shell.

Device capability exposure ​

OptionNotes
Shared bridge contract, designed once, consumed by both native shellsOne capability registry, one negotiation protocol, one place a new capability is added. Chosen — see sovereign RFC 0083.
Bridge designed independently per shell repoCheaper short-term per repo, but the two shells diverge the first time a capability ships to only one of them, and plugin authors lose the "write once, run everywhere" guarantee sdk.device.* exists to provide.
Plugins call Capacitor plugins directlyBreaks plugin portability outright — a plugin written against Capacitor cannot run in a browser or PWA at all. Rejected outright, not seriously considered.

Recommendation (decided) ​

Capacitor as the shell framework; the device bridge is not designed in this repo at all — it's a shared, versioned contract (@sovereignfs/bridge + @sovereignfs/sdk/device-client) owned in the sovereign monorepo per RFC 0083, and this repo implements only its Capacitor transport.

See ADR 0001 and ADR 0004 for the binding decision and its consequences.

Open source under AGPL-3.0. Each Sovereign instance is independently operated.