# Data flow — mobxjs/mobx

> Canonical page: https://codevetter.com/unpack/mobx/data-flow

# Data flow — 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.

Inputs enter through observable factories, annotation maps, setters, and user-supplied callbacks. Enhancers transform values, administrations retain them, and synchronous reads build dependency edges. Mutations invalidate those edges and schedule effects or React updates; conversion and transport examples define the boundary toward external storage.
- observable factory options select an enhancer; deepEnhancer recursively wraps supported containers and converts previously unwrapped functions into autoAction or flow. — [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/types/modifiers.ts#L24-L55](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/types/modifiers.ts#L24-L55)
- Object creation captures property descriptors before administration attachment, then initObservable batches annotation application; observable properties receive shared accessors backed by administration entries. — [packages/mobx/src/api/extendobservable.ts#L39-L52](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/api/extendobservable.ts#L39-L52) [packages/mobx/src/types/type-utils.ts#L112-L124](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/types/type-utils.ts#L112-L124) [packages/mobx/src/types/observableobject.ts#L389-L418](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/types/observableobject.ts#L389-L418) [packages/mobx/src/types/observableobject.ts#L676-L685](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/types/observableobject.ts#L676-L685)
- ObservableValue.get reports observation; reportObserved records each observable once per derivation run, and bindDependencies removes obsolete edges and adds newly read dependencies. — [packages/mobx/src/types/observablevalue.ts#L148-L150](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/types/observablevalue.ts#L148-L150) [packages/mobx/src/core/observable.ts#L177-L195](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/core/observable.ts#L177-L195) [packages/mobx/src/core/derivation.ts#L257-L277](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/core/derivation.ts#L257-L277)
- Boxed writes pass mutation diagnostics, optional interceptors, enhancement, and equality suppression before storing the value; accepted changes report invalidation and notify listeners. — [packages/mobx/src/types/observablevalue.ts#L94-L109](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/types/observablevalue.ts#L94-L109) [packages/mobx/src/types/observablevalue.ts#L116-L145](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/types/observablevalue.ts#L116-L145)
- Arrays retain enhanced items behind a Proxy and report reads through one atom; Maps distinguish key existence from value observation and notify the keys atom when inserting new entries. — [packages/mobx/src/types/observablearray.ts#L309-L311](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/types/observablearray.ts#L309-L311) [packages/mobx/src/types/observablearray.ts#L349-L364](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/types/observablearray.ts#L349-L364) [packages/mobx/src/types/observablemap.ts#L117-L134](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/types/observablemap.ts#L117-L134) [packages/mobx/src/types/observablemap.ts#L238-L251](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/types/observablemap.ts#L238-L251)
- ComputedValue.get branches between unobserved computation and tracked caching; trackAndCompute confirms propagation only for suspension, exceptions, or comparer-detected changes. — [packages/mobx/src/core/computedvalue.ts#L198-L240](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/core/computedvalue.ts#L198-L240) [packages/mobx/src/core/computedvalue.ts#L259-L287](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/core/computedvalue.ts#L259-L287)
- React observation converts Reaction invalidation into a new Symbol snapshot and an onStoreChange callback; useSyncExternalStore consumes stable subscription functions, and unsubscribe disposes the Reaction. — [packages/mobx-react-lite/src/useObserver.ts#L23-L30](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx-react-lite/src/useObserver.ts#L23-L30) [packages/mobx-react-lite/src/useObserver.ts#L42-L73](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx-react-lite/src/useObserver.ts#L42-L73) [packages/mobx-react-lite/src/useObserver.ts#L101-L119](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx-react-lite/src/useObserver.ts#L101-L119)
- toJS caches converted observable containers to preserve cycles and leaves non-observable branches unchanged; the documented persistence example instead derives asJson and hands it to an application-provided transportLayer.saveTodo. — [packages/mobx/src/api/tojs.ts#L18-L61](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/packages/mobx/src/api/tojs.ts#L18-L61) [docs/defining-data-stores.md#L157-L180](https://github.com/mobxjs/mobx/blob/60be47cab0926d12f22449ec6c809fb5ec6601c4/docs/defining-data-stores.md#L157-L180)

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)
