Limitations

What this alpha does not do, and where each limitation is documented.

On this page
  1. Browsers and platforms
  2. What can be observed
  3. Engines
  4. Format and API

MotionPR is in alpha (0.1.0-alpha). Everything below is a known limitation of this release, not a hidden one.

Browsers and platforms

  • Chromium only. Firefox and WebKit are not supported yet (browser.name accepts only chromium).
  • Verified on macOS and Linux CI. Windows paths are handled in code, but no CI job runs on Windows.
  • Pixels depend on the platform. Visual comparison is a warning by default for this reason; capture baselines where CI runs (Baseline management).

What can be observed

  • Motion drawn by your own requestAnimationFrame loop with inline styles, on <canvas> or in WebGL, is not visible without a custom adapter.
  • Scroll is never replayed. Scroll motion is recorded live; filmstrip frames of scroll windows show the final scroll position, and the scroll graph is the source of truth.
  • Scroll-linked tween values (GSAP ScrollTrigger) are not sampled. Their progress is compared against scroll position, so a changed start/end is found but a changed parallax distance alone is not.
  • CSS scroll-driven animations are recorded as metadata only.
  • Nested scroll containers: native scroll motion is recorded for the document scroller only. Containers scrolled by Lenis (wrapper) are recorded through the Lenis adapter but not covered by browser tests, and steps do not drive them.
  • Shadow DOM: animations inside shadow roots are discovered, but selectors do not pierce shadow roots, so replayed shadow elements cannot always be re-found. Not covered by tests yet.

Engines

  • GSAP: Draggable, Observer and Flip are not observed; new gsap.core.Timeline() needs track(); ScrollTrigger is metadata plus live progress. See GSAP.
  • Anime.js: v3 is not supported; composition: "blend" is metadata only; per-keyframe timing of keyframes is not reconstructed; createTimer(), createAnimatable(), createDraggable() and onScroll() are not instrumented. See Anime.js.
  • Lenis: infinite: true positions wrap and distance metrics assume no wrap; touch scrolling is recorded but not generated by steps. See Lenis.

Format and API

  • The capture format may still change between minor versions; older captures are migrated when they are read. Files written by a newer MotionPR are rejected with an actionable error.
  • The adapter protocol (PROTOCOL_VERSION = 1) may change before 1.0.

The roadmap lists what is planned.