Platform limits
What the native bridge deliberately does not pretend to own.
Prefer the web API when the host has one. Cross the bridge only when the embedded web view cannot. Background location, store billing, and home-screen widgets sit outside that contract — helpers exist so feature-detection stays honest.
Background location
if (soli.nativeBridge.supports("background_location")) {
await soli.nativeBridge.startBackgroundLocation({ distanceFilter: 25 })
} else {
// navigator.geolocation while the page is open only
}
| Host | Status |
|---|---|
| Browser / PWA | Foreground geolocation only |
| Generated shells (default) | Not in capabilities — NotSupportedError |
| Custom shell | Declare background_location and implement bridge methods |
In-app purchases
try {
await soli.nativeBridge.purchase("sku.premium.monthly")
} catch (err) {
if (err.name === "NotSupportedError") { /* web checkout */ }
}
Soli does not ship StoreKit or Play Billing. A shell may list iap; until then purchase rejects.
Widgets / Live Activities
Not part of the WebView thesis. Ship a native extension beside the generated shell if you need a home-screen glance.