This doc describes `jotai/zustand` bundle.

Jotai's state resides in React, but sometimes it would be nice to interact with the world outside React.

Zustand provides a store interface that can be used to hold some values and sync with atoms in Jotai.

This only uses the vanilla api of zustand.


You have to install zustand to access this bundle and its functions.

npm install zustand
# or
yarn add zustand


atomWithStore creates a new atom with zustand store. It's two-way binding and you can change the value from both ends.

import { useAtom } from 'jotai'
import { atomWithStore } from 'jotai/zustand'
import create from 'zustand/vanilla'

const store = create(() => ({ count: 0 }))
const stateAtom = atomWithStore(store)
const Counter: React.FC = () => {
  const [state, setState] = useAtom(stateAtom)

  return (
      count: {state.count}
      <button onClick={() => setState((prev) => ({ ...prev, count: prev.count + 1 }))}>