# Extension points — motiondivision/motion

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

# Extension points — motiondivision/motion

Scanned commit f5838ce47b323ce2713cb2effc5afaa5b6120a44 (2026-10-02). Generated by codevetter codevetter 1.15.0 on 2026-10-02.

Source inspection; upstream code and tests were not executed.

Extension mechanisms exist at subject dispatch, renderer construction, feature loading, and animation scheduling boundaries. The effect API is the clearest public adapter mechanism and already supports GPU integrations. React features are enabled through a shared definition table and supplied as bundles. Development fixture discovery and package export maps provide separate extension surfaces for tests and distribution.
- animate.addEffect/removeEffect expose a subject registry; registration requires test() and read(), removes duplicate registration, and puts the newest effect first in dispatch order. — [packages/framer-motion/src/animation/animate/index.ts#L163-L172](https://github.com/motiondivision/motion/blob/f5838ce47b323ce2713cb2effc5afaa5b6120a44/packages/framer-motion/src/animation/animate/index.ts#L163-L172) [packages/motion-dom/src/animation/animate/effects.ts#L18-L36](https://github.com/motiondivision/motion/blob/f5838ce47b323ce2713cb2effc5afaa5b6120a44/packages/motion-dom/src/animation/animate/effects.ts#L18-L36)
- createEffect accepts an addValue callback plus optional test/read/step options and returns a callable binding API with get(), flush(), state(), and per-call cleanup. — [packages/motion-dom/src/effects/utils/create-effect.ts#L30-L59](https://github.com/motiondivision/motion/blob/f5838ce47b323ce2713cb2effc5afaa5b6120a44/packages/motion-dom/src/effects/utils/create-effect.ts#L30-L59) [packages/motion-dom/src/effects/utils/create-effect.ts#L71-L121](https://github.com/motiondivision/motion/blob/f5838ce47b323ce2713cb2effc5afaa5b6120a44/packages/motion-dom/src/effects/utils/create-effect.ts#L71-L121)
- threeEffect and vgpuEffect demonstrate adapters that claim subjects, read initial values, and schedule writes in frame.preRender; their implementations are exposed through dedicated motion subpaths. — [packages/motion/src/three.ts#L36-L47](https://github.com/motiondivision/motion/blob/f5838ce47b323ce2713cb2effc5afaa5b6120a44/packages/motion/src/three.ts#L36-L47) [packages/motion/src/vgpu.ts#L55-L85](https://github.com/motiondivision/motion/blob/f5838ce47b323ce2713cb2effc5afaa5b6120a44/packages/motion/src/vgpu.ts#L55-L85) [packages/motion/package.json#L26-L36](https://github.com/motiondivision/motion/blob/f5838ce47b323ce2713cb2effc5afaa5b6120a44/packages/motion/package.json#L26-L36)
- React feature extension uses featureProps to derive isEnabled checks; loadFeatures merges supplied feature packages into the existing shared table and writes it back through setFeatureDefinitions. — [packages/framer-motion/src/motion/features/definitions.ts#L5-L24](https://github.com/motiondivision/motion/blob/f5838ce47b323ce2713cb2effc5afaa5b6120a44/packages/framer-motion/src/motion/features/definitions.ts#L5-L24) [packages/framer-motion/src/motion/features/definitions.ts#L32-L49](https://github.com/motiondivision/motion/blob/f5838ce47b323ce2713cb2effc5afaa5b6120a44/packages/framer-motion/src/motion/features/definitions.ts#L32-L49) [packages/framer-motion/src/motion/features/load-features.ts#L5-L15](https://github.com/motiondivision/motion/blob/f5838ce47b323ce2713cb2effc5afaa5b6120a44/packages/framer-motion/src/motion/features/load-features.ts#L5-L15)
- createMotionComponent accepts preloaded features, a CreateVisualElement factory, forwardMotionProps, and explicit HTML/SVG type; createDomVisualElement selects HTMLVisualElement or SVGVisualElement. — [packages/framer-motion/src/motion/index.tsx#L50-L59](https://github.com/motiondivision/motion/blob/f5838ce47b323ce2713cb2effc5afaa5b6120a44/packages/framer-motion/src/motion/index.tsx#L50-L59) [packages/framer-motion/src/motion/index.tsx#L71-L88](https://github.com/motiondivision/motion/blob/f5838ce47b323ce2713cb2effc5afaa5b6120a44/packages/framer-motion/src/motion/index.tsx#L71-L88) [packages/framer-motion/src/render/dom/create-visual-element.ts#L6-L19](https://github.com/motiondivision/motion/blob/f5838ce47b323ce2713cb2effc5afaa5b6120a44/packages/framer-motion/src/render/dom/create-visual-element.ts#L6-L19)
- LazyMotion supports a direct feature bundle or a promise-returning loader, separates renderer from loaded features, and publishes the renderer and strict flag through LazyContext. — [packages/framer-motion/src/components/LazyMotion/index.tsx#L45-L80](https://github.com/motiondivision/motion/blob/f5838ce47b323ce2713cb2effc5afaa5b6120a44/packages/framer-motion/src/components/LazyMotion/index.tsx#L45-L80)
- createProjectionNode injects resize-listener, parent, scroll-measurement, scroll-root, and transform-reset behavior; AsyncMotionValueAnimation separately accepts an element-specific KeyframeResolver. — [packages/motion-dom/src/projection/node/create-projection-node.ts#L150-L157](https://github.com/motiondivision/motion/blob/f5838ce47b323ce2713cb2effc5afaa5b6120a44/packages/motion-dom/src/projection/node/create-projection-node.ts#L150-L157) [packages/motion-dom/src/animation/AsyncMotionValueAnimation.ts#L73-L93](https://github.com/motiondivision/motion/blob/f5838ce47b323ce2713cb2effc5afaa5b6120a44/packages/motion-dom/src/animation/AsyncMotionValueAnimation.ts#L73-L93)
- New React fixtures plug into eager import.meta.glob discovery by exporting App; React 19 reuses React fixture files, while new public package APIs also require the appropriate export-map targets. — [dev/react/src/App.tsx#L3-L7](https://github.com/motiondivision/motion/blob/f5838ce47b323ce2713cb2effc5afaa5b6120a44/dev/react/src/App.tsx#L3-L7) [dev/react-19/src/App.tsx#L3-L10](https://github.com/motiondivision/motion/blob/f5838ce47b323ce2713cb2effc5afaa5b6120a44/dev/react-19/src/App.tsx#L3-L10) [packages/motion/package.json#L7-L25](https://github.com/motiondivision/motion/blob/f5838ce47b323ce2713cb2effc5afaa5b6120a44/packages/motion/package.json#L7-L25) [packages/motion/package.json#L38-L68](https://github.com/motiondivision/motion/blob/f5838ce47b323ce2713cb2effc5afaa5b6120a44/packages/motion/package.json#L38-L68)

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)
