plans/issues/issue-2716.md
Executor instructions: Follow this plan step by step. Do not write any code for this issue. If anything in "STOP conditions" occurs, stop and report. When done, update the status row for this issue in
plans/issues/README.md.Drift check (run first):
gh api repos/motiondivision/motion/issues/2716 --jq .state→ must beopen. Re-read the latest comments (gh api repos/motiondivision/motion/issues/2716/comments) — if a new reproduction or maintainer signal has appeared since 2026-06-11, STOP and report.
42bfbe3ed, 2026-06-112024 report ("[BUG] Jumpy Scrolling", framer-motion 11.2.11, Chrome/Win11):
scroll-linked animations driven by useScroll occasionally jump when
scrolling with the mouse wheel but not with the scrollbar. The comment thread
itself converges on the diagnosis: scrolling runs on the compositor thread
while JS scroll handlers run on the main thread, so JS-driven scroll-synced
DOM updates can lag a frame behind the visual scroll (comments by boar-is
2024-11-06 — "correlated with Chrome behavior (try to reproduce it without
Framer Motion)" — and clementroche 2025-11-05, explaining the thread split
and pointing at Lenis). This is not a Motion defect Motion can fix in the JS
path; keeping the issue open as a bug misleads.
3b6dcbd77): useScroll + useTransform pipelines
hardware-accelerate via native ScrollTimeline where supported — the
update happens on the compositor thread, which is the actual fix for
main-thread lag on compatible properties (transform/opacity).3995b3408, 6bae74ee6, 2ffc157b4).scroll events
(packages/framer-motion/src/render/dom/scroll/track.ts:70,
const listener = () => frame.read(measureAll)) and is inherently
subject to compositor/main-thread desync.| Purpose | Command | Expected on success |
|---|---|---|
| Read issue | gh api repos/motiondivision/motion/issues/2716 | JSON, state open |
| Comment | gh api repos/motiondivision/motion/issues/2716/comments -f body="…" | comment created |
| Close | gh api -X PATCH repos/motiondivision/motion/issues/2716 -f state=closed -f state_reason=not_planned | state closed |
In scope: one GitHub comment + close. Out of scope: any source change;
re-litigating the scroll engine; gh issue close/gh pr edit (broken on
this repo — use gh api).
Content to cover (write it in the maintainer's voice, concise):
useScroll/useTransform →
style pipelines hardware-accelerate onto the compositor via native
ScrollTimeline/ViewTimeline in supporting browsers when the offset is a
preset/named form and the animated properties are compositor-friendly
(transform, opacity) — upgrade and prefer those patterns.useSpring (mccallofthewild's in-thread suggestion), or a JS smooth-scroll
layer such as Lenis.Verify: comment visible on the issue.
Only if the row for issue-2716 in plans/issues/README.md reads APPROVED
(maintainer edit). Then run the close command above with
state_reason=not_planned.
Verify: gh api repos/motiondivision/motion/issues/2716 --jq .state → closed.
git status clean)plans/issues/README.md status row updatedAPPROVED → post the comment (Step 1 is
ungated), skip Step 2, report.plans/README.md), not JS-path tweaks.