> For AI agents: the documentation index is at https://sdk.nimbusprivacy.xyz/llms.txt, and every page is available as Markdown at its URL with .md appended.

# Browser support (/production/browser-support)

**Only Chrome is tested.** The SDK's browser tests run in headless Chrome, on a cross-origin
isolated page. No other browser runs them, so no other browser is known to work. If your app
supports another browser, test it there yourself.

Phones are not tested either. Proving uses every core and a lot of memory. A phone may also pause a
tab in the background, which stops a proof that is running.

## What a browser must offer

`loadNimbusSdk` checks for most of these before it loads. If one is missing, it throws a
`NimbusSdkError` with reason `unsupported-browser` that names each one.

| Feature                            | What the SDK uses it for                                                      | Checked when it loads |
| ---------------------------------- | ----------------------------------------------------------------------------- | --------------------- |
| Cross-origin isolation             | Shared memory, so the prover runs on every core                               | Yes                   |
| `WebAssembly`                      | The SDK's cryptography and the prover                                         | Yes                   |
| `fetch`                            | Every request to Solana, the services and your site                           | Yes                   |
| `crypto.getRandomValues`           | Fresh randomness for each payment                                             | Yes                   |
| `crypto.subtle`                    | Checking the SHA-256 of the SDK's files                                       | Yes                   |
| `indexedDB` and `IDBKeyRange`      | The private balance on the device, and the cached circuit files               | Yes                   |
| `navigator.locks`                  | Stopping two tabs registering at once, and marking which payments are running | Yes                   |
| `navigator.storage`                | Asking the browser to keep the private balance, and reading its quota         | Yes                   |
| Module Web Workers                 | Running proofs off the page's main thread                                     | No                    |
| `sessionStorage` or `localStorage` | Remembering the sign-in, if you keep it for the tab or the browser            | No                    |
| `navigator.locks.query`            | Telling a stopped payment from a running one                                  | No                    |

## When a feature is missing

Without module workers, the SDK loads, but the first proof fails.

Without Web Storage, opening a session throws `unsupported-browser`. This applies only to the tab
and browser stores. The memory store needs no storage.

Without `navigator.locks.query`, every payment still runs. A sync then cannot tell which stopped
payments to release, so their funds stay reserved until you release them.

Some private windows refuse IndexedDB or Web Storage. The SDK then throws `unsupported-browser`,
and its message names what the browser refused.

## Next

- [Production checklist](https://sdk.nimbusprivacy.xyz/production/checklist): What to check before real users arrive.
- [Troubleshooting](https://sdk.nimbusprivacy.xyz/production/troubleshooting): Symptoms, causes and fixes.


Last updated 21 October 2026
