# Extension points — mobxjs/mobx

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

# Extension points — mobxjs/mobx

Scanned commit 60be47cab0926d12f22449ec6c809fb5ec6601c4 (2026-09-30). Generated by codevetter codevetter 1.15.0 on 2026-10-02.

Source inspection; upstream code and tests were not executed.

Extension mechanisms are explicit interfaces and callback factories rather than a central runtime plugin loader. Observable annotations, enhancers, comparers, scheduling callbacks, and lifecycle hooks allow targeted customization. Package-level registries and shared configuration factories provide corresponding extension boundaries for lint rules and builds.
- Annotation defines make_ and extend_ contracts with MakeResult control flow; annotation maps accept an Annotation, true for the default, or false to skip a property. — [packages/mobx/src/api/annotation.ts#L3-L35](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/api/annotation.ts#L3-L35) [packages/mobx/src/api/makeObservable.ts#L90-L114](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/api/makeObservable.ts#L90-L114)
- CreateObservableOptions supplies deep, equals, autoBind, name, and defaultDecorator controls; factory creation translates these into enhancer and default-annotation choices. — [packages/mobx/src/api/observable.ts#L41-L47](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/api/observable.ts#L41-L47) [packages/mobx/src/api/observable.ts#L79-L94](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/api/observable.ts#L79-L94) [packages/mobx/src/api/observable.ts#L187-L201](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/api/observable.ts#L187-L201)
- createAtom exposes reportObserved/reportChanged and optional observation lifecycle callbacks, allowing custom resources to participate in dependency tracking without adopting an observable container. — [packages/mobx/src/core/atom.ts#L19-L22](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/core/atom.ts#L19-L22) [packages/mobx/src/core/atom.ts#L87-L98](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/core/atom.ts#L87-L98) [packages/mobx/src/core/atom.ts#L107-L121](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/core/atom.ts#L107-L121)
- Interceptors form a disposable ordered handler chain; interceptChange snapshots handlers, runs untracked, accepts transformed changes, and stops when a handler cancels with a falsy return. — [packages/mobx/src/types/intercept-utils.ts#L13-L29](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/types/intercept-utils.ts#L13-L29) [packages/mobx/src/types/intercept-utils.ts#L32-L51](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/types/intercept-utils.ts#L32-L51)
- Scheduling can be customized per autorun/reaction with scheduler or delay, or globally through configure.reactionScheduler; global replacement composes with the previous scheduler. — [packages/mobx/src/api/autorun.ts#L19-L29](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/api/autorun.ts#L19-L29) [packages/mobx/src/api/autorun.ts#L106-L111](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/api/autorun.ts#L106-L111) [packages/mobx/src/api/configure.ts#L48-L49](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/api/configure.ts#L48-L49) [packages/mobx/src/core/reaction.ts#L308-L311](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/core/reaction.ts#L308-L311)
- Reaction error handling supports a local constructor handler and a disposable global onReactionError registry; the development tools hook receives spy, getDebugName, and $mobx. — [packages/mobx/src/core/reaction.ts#L191-L218](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/core/reaction.ts#L191-L218) [packages/mobx/src/core/reaction.ts#L253-L260](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/core/reaction.ts#L253-L260) [packages/mobx/src/mobx.ts#L157-L167](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/mobx.ts#L157-L167)
- New ESLint rules plug into the named rules table, with recommended severity configured separately; individual modules expose ESLint create visitors, metadata, diagnostics, and optional fixes. — [packages/eslint-plugin-mobx/src/index.ts#L19-L50](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/eslint-plugin-mobx/src/index.ts#L19-L50) [packages/eslint-plugin-mobx/src/missing-observer.ts#L6-L15](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/eslint-plugin-mobx/src/missing-observer.ts#L6-L15) [packages/eslint-plugin-mobx/src/missing-observer.ts#L59-L96](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/eslint-plugin-mobx/src/missing-observer.ts#L59-L96)
- Build packages reuse createRollupConfig with input, packageName, packageBase, and globals; the codemod separately exposes a parser and transform with configurable import/decorator/TS parsing behavior. — [scripts/create-rollup-config.mjs#L213-L222](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/scripts/create-rollup-config.mjs#L213-L222) [packages/mobx/rollup.config.mjs#L1-L10](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/rollup.config.mjs#L1-L10) [packages/mobx-undecorate/src/undecorate.ts#L14-L18](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx-undecorate/src/undecorate.ts#L14-L18) [packages/mobx-undecorate/src/undecorate.ts#L81-L103](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx-undecorate/src/undecorate.ts#L81-L103)

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)
