# What changed in jotai

> 26 changes in jotai 2 to 3 from its official release notes, upgrade guides and advisories: 5 breaking, 4 deprecations. Each one cited. Sources checked 2026-10-17. HTML: https://unstale.sh/npm/jotai/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## jotai 3

### Breaking changes

- Node 20 support is dropped in v3, so developers may need to use a newer Node.js version. (3.0.0) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v3.0.0)

### Fixes and other changes

- The store type is now exported for developers who need to reference it in type-level code. (3.0.1) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v3.0.1)
- Synchronous onMount updates are now delivered to React subscribers, fixing a regression introduced in v3.0.0. (3.0.1) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v3.0.1)

## jotai 2

### Breaking changes

- Performance improves in high-throughput scenarios. (2.20.0) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.20.0)
- The Babel preset and plugin moved to jotai-babel, so update configured package paths. (2.18.0) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.18.0)
- unstable_onInit was removed as a breaking change. (2.17.0) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.17.0)
- The API was renamed to INTERNAL_onInit. (2.16.0) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.16.0)

### Deprecations

- The React delay option is deprecated. (2.19.0) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.19.0)
- The loadable utility is deprecated and will be dropped in v3. (2.17.0) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.17.0)
- setSelf in the atom read function is deprecated and will be dropped in v3. (2.17.0) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.17.0)
- atomFamily in jotai/utils is deprecated; migrate to jotai-family. (2.16.0) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.16.0)

### Performance

- Core atom caching was enabled to improve performance in some cases. (2.19.0) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.19.0)
- store.get performance improved when atoms are not mutated. (2.19.0) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.19.0)

### Behavior and default changes

- Development builds now warn when unsupported store mutations or side effects are detected. (2.15.2) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.15.2)

### Fixes and other changes

- Prevents an infinite microtask loop when a rejected source is recomputed. (2.20.3) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.20.3)
- Fixes subscribers not being notified after nested store.set and sub/unsub operations inside a write. (2.20.2) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.20.2)
- Applies the reviver when parsing subscription updates from storage. (2.20.1) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.20.1)
- Stackoverflow errors are now thrown synchronously. (2.20.1) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.20.1)
- Uses a symbol index signature to avoid a Symbol.observable type reference. (2.19.1) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.19.1)
- ObservableLike now supports the Symbol.observable type. (2.18.1) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.18.1)
- Subscribers are notified when a derived read calls store.set, fixing a regression from v2.12.1. (2.18.1) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.18.1)
- Reactivity is preserved when get is called in a different atom. (2.18.0) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.18.0)
- Corrected the variance of the WritableAtom Result type parameter, improving TypeScript typing behavior. (2.17.1) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.17.1)
- Fixed a regression so unwrap no longer violates the store mutation rule. (2.16.2) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.16.2)
- Buildingblocks no longer invoke buildingblock definitions from top-scope, fixing an internal API issue affecting ecosystem libraries. (2.16.1) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.16.1)
- unwrap now recovers from errors. (2.15.1) — [release notes](https://github.com/pmndrs/jotai/releases/tag/v2.15.1)
