FAQ

Frequently asked questions about Jazz.

Reset permanently deletes unsynced writes and local-only data in the selected namespace. Before resetting a cache you intend to resync, confirm that the required data is already on the configured server and that the same account can still access it. Reconnect to that server with the same account after resetting; app queries and subscriptions can then fetch the data permitted by current access rules. Local durability and ordinary shutdown do not prove server sync completed.

In browser apps using the React, Vue, Svelte, or Solid Jazz clients, keep the client open and run this in the devtools console:

await window.__jazz.clearStorage();

If the page has more than one live Jazz storage context, inspect the available namespaces and then choose one explicitly:

window.__jazz.listLiveStorageNamespaces();
await window.__jazz.clearStorage("my-app::alice");

The helper requires a live registered client on this page. Do not shut it down before calling the helper. If the client never finishes opening or no live namespace is listed, this helper cannot perform the reset.

If you're working directly with a Db handle instead of the window helper, await db.deleteClientStorage() is the underlying API. See Auth Lifecycle for how this differs from logout and local-first identity storage.

  • Browser persistent storage only.
  • If exactly one live namespace exists, clearStorage() uses it automatically.
  • If multiple live namespaces exist, Jazz throws and lists the available namespaces until you choose one.
  • Can be initiated from either leader or follower tabs; Jazz coordinates the reset across tabs for that namespace.
  • Deletes only the selected IndexedDB namespace. Preserve localStorage, sessionStorage, cookies, and other databases; default local-first credentials are stored outside this data database. Apps with custom credential stores must check those separately.
  • Reopens a clean worker/runtime so the same live client remains usable after the wipe.

This is useful when iterating on your schema during development.

useAll and QuerySubscription return undefined until the first response arrives from the requested tier. After that, the value is an array — empty ([]) if no rows match, or populated. See The loading state for details.

Yes. Omit serverUrl from your config. Jazz will not try to sync: browser clients keep their data in local persistent storage, while other runtimes use their configured local driver.

Yes. When a user signs up with an external provider, their identity carries over. See Signing up with BetterAuth.

No. Define and publish migrations with the TypeScript tooling. The server stores the compiled migrations that the Rust runtime uses. See Migrations for details.

Keep the result of the write and call wait() when your app needs to know whether the server accepted it. A rejected write throws PersistedWriteRejectedError, which provides the server's code, reason, and transactionId.

Use db.onMutationError() as a fallback for rejected writes that do not have an active wait() call. The callback receives the rejection code, reason, and local transaction record. See Writing data for an example and Permissions for how the server decides whether to accept a write.