# Extension points — pmndrs/jotai

> Canonical page: https://codevetter.com/unpack/jotai/extension-points

# Extension points — pmndrs/jotai

Scanned commit 6abd0ae3365e02ab432fba4b6e8e6f00aafbf508 (2026-09-29). Generated by codevetter codevetter 1.15.0 on 2026-10-02.

Source inspection; upstream code and tests were not executed.

Atoms and store adapters are the principal composition interfaces. Public utilities accept application-supplied selectors, equality functions, storage implementations, observables, and callbacks. Internal store hooks and replaceable building blocks offer deeper instrumentation but explicitly carry compatibility warnings. Website documentation extends through MDX content and a shared component map.
- New state abstractions can be implemented as atom(read, write): read receives dependency get and an AbortSignal option, while write receives get/set plus arbitrary typed arguments and can return an application-defined result. — [src/vanilla/atom.ts#L14-L23](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/vanilla/atom.ts#L14-L23) [src/vanilla/atom.ts#L55-L62](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/vanilla/atom.ts#L55-L62) [src/vanilla/atom.ts#L74-L87](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/vanilla/atom.ts#L74-L87)
- Writable atoms support onMount(setAtom) returning cleanup; INTERNAL_onInit receives the store on first reference. The latter is explicitly internal and unstable. — [src/vanilla/atom.ts#L31-L61](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/vanilla/atom.ts#L31-L61) [src/vanilla/internals.ts#L515-L533](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/vanilla/internals.ts#L515-L533) [src/vanilla/internals.ts#L1009-L1038](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/vanilla/internals.ts#L1009-L1038)
- createStore provides independently owned state, Provider accepts an existing store, and INTERNAL_overrideCreateStore receives the previous override to replace store construction. — [src/vanilla/store.ts#L6-L19](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/vanilla/store.ts#L6-L19) [src/react/Provider.ts#L23-L38](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/react/Provider.ts#L23-L38)
- SyncStorage/AsyncStorage define getItem/setItem/removeItem plus optional subscribe; createJSONStorage accepts string-storage factories and JSON reviver/replacer functions, enabling sessionStorage or custom async backends. — [src/vanilla/utils/atomWithStorage.ts#L24-L49](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/vanilla/utils/atomWithStorage.ts#L24-L49) [src/vanilla/utils/atomWithStorage.ts#L83-L115](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/vanilla/utils/atomWithStorage.ts#L83-L115)
- selectAtom accepts selector and equality callbacks, splitAtom accepts a keyExtractor, and unwrap accepts a fallback using the previously resolved value; memoization depends on these function/object identities. — [src/vanilla/utils/selectAtom.ts#L18-L55](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/vanilla/utils/selectAtom.ts#L18-L55) [src/vanilla/utils/splitAtom.ts#L51-L79](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/vanilla/utils/splitAtom.ts#L51-L79) [src/vanilla/utils/splitAtom.ts#L213-L215](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/vanilla/utils/splitAtom.ts#L213-L215) [src/vanilla/utils/unwrap.ts#L35-L50](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/vanilla/utils/unwrap.ts#L35-L50)
- atomWithObservable accepts a dependency-aware getObservable factory and subscribable or Symbol.observable-style sources; subject-like sources additionally expose writes through next(data). useAtomCallback adapts arbitrary get/set callbacks to a memoized write-only atom. — [src/vanilla/utils/atomWithObservable.ts#L20-L46](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/vanilla/utils/atomWithObservable.ts#L20-L46) [src/vanilla/utils/atomWithObservable.ts#L86-L91](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/vanilla/utils/atomWithObservable.ts#L86-L91) [src/vanilla/utils/atomWithObservable.ts#L182-L193](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/vanilla/utils/atomWithObservable.ts#L182-L193) [src/react/utils/useAtomCallback.ts#L10-L18](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/react/utils/useAtomCallback.ts#L10-L18)
- INTERNAL_buildStoreRev4 merges Partial<BuildingBlocks> into defaults, freezes the block table, and exports keyed accessors; experimental store hooks provide creation/read/change/mount/unmount/flush listeners. Internal consumers are told to pin versions. — [src/vanilla/internals.ts#L1-L2](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/vanilla/internals.ts#L1-L2) [src/vanilla/internals.ts#L410-L483](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/vanilla/internals.ts#L410-L483) [src/vanilla/internals.ts#L1259-L1276](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/src/vanilla/internals.ts#L1259-L1276)
- Adding MDX under docs feeds Gatsby's filesystem source and slug-based page template; frontmatter.nav controls navigation sorting, while gatsby-shared.js maps MDX elements and embedded demo components to website renderers. — [website/gatsby-config.js#L101-L112](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/website/gatsby-config.js#L101-L112) [website/src/pages/docs/{Mdx.slug}.js#L31-L42](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/website/src/pages/docs/%7BMdx.slug%7D.js#L31-L42) [website/src/components/docs.js#L73-L122](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/website/src/components/docs.js#L73-L122) [website/gatsby-shared.js#L19-L35](https://github.com/pmndrs/jotai/blob/6abd0ae3365e02ab432fba4b6e8e6f00aafbf508/website/gatsby-shared.js#L19-L35)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
