Skip to main content
Load the SDK from the uOS host. Call uOS.ready() when your UI is ready. That dismisses the loading splash.
The file is served from the uOS origin as /uos-app-sdk.js (for example https://www.uos.agency/uos-app-sdk.js). Your app still renders without the SDK. The splash also clears on the iframe load event, but you get no wallet, context, or window control through the bridge.

API

net.fetch allows public http:/https: URLs only (SSRF-guarded: no localhost, private, link-local, or userinfo URLs), does not follow redirects (redirect: 'error'), sends credentials: 'omit', times out after 10 seconds, and caps the response body at 256 KB. Only method: 'POST' is sent as POST; any other method (including omitted) is sent as GET. Filesystem paths are relative to the app’s private directory. Path segments of .. are rejected (-32602). entry.url must not resolve to the uOS shell origin — the host refuses to embed same-origin apps.

Wallet

When embedded in uOS, route wallet calls through the bridge so the user’s session is reused and every write gets a consent sheet above your iframe:
Read methods (need wallet:request only; no consent sheet):
  • eth_accounts
  • eth_requestAccounts
  • eth_chainId
  • net_version
eth_accounts and eth_requestAccounts are answered from the connected wagmi address (or [] if disconnected) without calling the provider. Everything else (including personal_sign, eth_sendTransaction, typed data) needs wallet:sign and per-request approval. Rejection rejects the promise with an Error whose .code is 4001.

Error codes

Runtime

Your app runs in:
on your origin. The host validates event.origin against your entry.url origin and event.source against your iframe. Wallet consent sheets render in the uOS window chrome above the iframe, so your app cannot cover them.

Next

Publish to the App Store when your manifest and SDK are ready.