ReadyNative

State

State for an Expo app, compared: Zustand, Jotai, or none - Expo Go support and what each option installs.

Hey - here's how state works in ReadyNative. This category is about state shared between screens. Local useState is always fine, and the built-in stores (src/stores/create-store.ts, a tiny useSyncExternalStore helper) already back theme mode and onboarding - they never depend on your choice here.

What stays the same: persistence goes through the storage adapter you picked in the storage category, under readynative:* keys, and with --with-examples every option ships src/stores/example-store.ts plus the /examples/store route as the shape to copy. Swap with bun run setup --state <option>.

  • zustand - the default. Pick it when you think in stores and selectors; persist is already wired to your storage adapter.
  • jotai - pick it when your state is lots of small independent values and you want derived state for free.
  • none - keep the built-in stores and nothing else.

Options

One option per category - --state <option> picks it:

bun run setup --state zustand
OptionLabelExpo GoHint
zustandZustand (default)yestiny stores, persisted on the storage adapter · Expo Go OK
jotaiJotaiyesatomic state, persisted on the storage adapter · Expo Go OK
noneNo state libraryyesbuilt-in useSyncExternalStore stores only

On this page

Get ReadyNative