Skip to content
Production

Browser support

Which browser the SDK is tested in, and what each browser feature it uses is for.

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.

FeatureWhat the SDK uses it forChecked when it loads
Cross-origin isolationShared memory, so the prover runs on every coreYes
WebAssemblyThe SDK's cryptography and the proverYes
fetchEvery request to Solana, the services and your siteYes
crypto.getRandomValuesFresh randomness for each paymentYes
crypto.subtleChecking the SHA-256 of the SDK's filesYes
indexedDB and IDBKeyRangeThe private balance on the device, and the cached circuit filesYes
navigator.locksStopping two tabs registering at once, and marking which payments are runningYes
navigator.storageAsking the browser to keep the private balance, and reading its quotaYes
Module Web WorkersRunning proofs off the page's main threadNo
sessionStorage or localStorageRemembering the sign-in, if you keep it for the tab or the browserNo
navigator.locks.queryTelling a stopped payment from a running oneNo

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

Last updated

On this page