# Extension points — reduxjs/redux

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

# Extension points — reduxjs/redux

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

Source inspection; upstream code and tests were not executed.

Core extensibility comes from function interfaces rather than a named plugin registry. Reducers define state transitions, middleware wraps dispatch, and enhancers wrap store creation. Runtime reducer replacement and observable interoperability expose additional integration seams. Website extensibility uses explicit library metadata, Docusaurus plugin instances, navbar component registration, and configurable Markdown transformation hooks.
- A custom root reducer plugs directly into createStore; the Reducer type separates returned state, accepted actions, and optional preloaded-state input shape. — [src/createStore.ts#L86-L96](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/src/createStore.ts#L86-L96) [src/types/reducers.ts#L30-L34](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/src/types/reducers.ts#L30-L34)
- Reducer maps plug into combineReducers, whose mapped types infer combined state, action unions, and partial preloaded state; only function-valued entries participate at runtime. — [src/combineReducers.ts#L114-L141](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/src/combineReducers.ts#L114-L141) [src/types/reducers.ts#L62-L68](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/src/types/reducers.ts#L62-L68) [src/types/reducers.ts#L94-L114](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/src/types/reducers.ts#L94-L114)
- Middleware plugins implement api => next => action with unknown action inputs and outputs; applyMiddleware overloads accumulate middleware dispatch extensions into the enhanced store type. — [src/types/middleware.ts#L22-L29](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/src/types/middleware.ts#L22-L29) [src/applyMiddleware.ts#L24-L52](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/src/applyMiddleware.ts#L24-L52)
- StoreEnhancer wraps a StoreEnhancerStoreCreator and combines store/state extensions; createStore delegates to the enhancer before allocating its own base store. — [src/types/store.ts#L220-L232](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/src/types/store.ts#L220-L232) [src/createStore.ts#L121-L134](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/src/createStore.ts#L121-L134)
- replaceReducer supports dynamic reducer loading and hot replacement, while the observable method provides reactive-library integration using Symbol.observable or the @@observable fallback. — [src/createStore.ts#L311-L335](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/src/createStore.ts#L311-L335) [src/createStore.ts#L344-L378](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/src/createStore.ts#L344-L378) [src/utils/symbol-observable.ts#L7-L10](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/src/utils/symbol-observable.ts#L7-L10)
- Adding an external documentation library involves the sources acquisition table, libraries navigation metadata, and a Docusaurus docs-plugin instance; these are separate explicit configuration seams. — [website/scripts/fetch-external-docs.mts#L32-L78](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/website/scripts/fetch-external-docs.mts#L32-L78) [website/docusaurus.config.ts#L27-L104](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/website/docusaurus.config.ts#L27-L104) [website/docusaurus.config.ts#L311-L330](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/website/docusaurus.config.ts#L311-L330)
- Navbar ComponentTypes registers custom-libraryDropdown and custom-libraryLinks; useCurrentLibrary chooses a non-root route prefix match, then root metadata, then the first library. — [website/src/theme/NavbarItem/ComponentTypes.tsx#L1-L9](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/website/src/theme/NavbarItem/ComponentTypes.tsx#L1-L9) [website/src/components/useCurrentLibrary.ts#L50-L66](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/website/src/components/useCurrentLibrary.ts#L50-L66)
- transpileCodeblocks accepts custom compiler settings, TypeScript/JavaScript post-processors, replacement-node assembly, and file extensions; code-block metadata can explicitly opt out with no-transpile. — [website/plugins/remark-typescript-tools/transpileCodeblocks/plugin.ts#L30-L57](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/website/plugins/remark-typescript-tools/transpileCodeblocks/plugin.ts#L30-L57) [website/plugins/remark-typescript-tools/transpileCodeblocks/plugin.ts#L159-L171](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/website/plugins/remark-typescript-tools/transpileCodeblocks/plugin.ts#L159-L171)

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)
