npm / jotai
jotai
What changed in jotai 2 to 3, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-17.
jotai 33 changes
Breaking changes 1
Node 20 support is dropped in v3, so developers may need to use a newer Node.js version.
Fixes and other changes 2
The store type is now exported for developers who need to reference it in type-level code.
Synchronous onMount updates are now delivered to React subscribers, fixing a regression introduced in v3.0.0.
jotai 223 changes
Breaking changes 4
Performance improves in high-throughput scenarios.
The Babel preset and plugin moved to jotai-babel, so update configured package paths.
unstable_onInit was removed as a breaking change.
The API was renamed to INTERNAL_onInit.
Deprecations 4
The React delay option is deprecated.
The loadable utility is deprecated and will be dropped in v3.
setSelf in the atom read function is deprecated and will be dropped in v3.
atomFamily in jotai/utils is deprecated; migrate to jotai-family.
Performance 2
Core atom caching was enabled to improve performance in some cases.
store.get performance improved when atoms are not mutated.
Behavior and default changes 1
Development builds now warn when unsupported store mutations or side effects are detected.
Fixes and other changes 12
Prevents an infinite microtask loop when a rejected source is recomputed.
Fixes subscribers not being notified after nested store.set and sub/unsub operations inside a write.
Applies the reviver when parsing subscription updates from storage.
Stackoverflow errors are now thrown synchronously.
Uses a symbol index signature to avoid a Symbol.observable type reference.
ObservableLike now supports the Symbol.observable type.
Subscribers are notified when a derived read calls store.set, fixing a regression from v2.12.1.
Reactivity is preserved when get is called in a different atom.
Corrected the variance of the WritableAtom Result type parameter, improving TypeScript typing behavior.
Fixed a regression so unwrap no longer violates the store mutation rule.
Buildingblocks no longer invoke buildingblock definitions from top-scope, fixing an internal API issue affecting ecosystem libraries.
unwrap now recovers from errors.