Drop firmly in place — tail-only throw + jump() to clear velocity

Fixkamo-internal
Shipped
April 30, 2026 at 3:00 AM UTC
Author
kamo
Commit
14bc9d8

The previous fix still let heads drift on release because: 1. Throw detection averaged velocity across the full 110ms window. A user who flicked then decelerated to a slow crawl before release still averaged > 650 px/s over that window and got a false-positive throw. Now we look only at the last RELEASE_TAIL_MS (60ms) of pointer samples, so a decelerating release with slow tail velocity is correctly read as a deliberate drop. Pause guard widened to 60ms to match. 2. animate(mx, fx, { velocity: 0 }) doesn't actually clear MotionValue's internally-tracked velocity from the rapid mx.set() chain — it just starts a new spring with 0 initial velocity. Switched to mx.jump(fx), which is purpose-built for this: it stops active animations, zeros tracked velocity, and sets the value in one call. 3. For the mega-cluster path, rewireCluster now runs BEFORE the anchor jump so follower change subscriptions are reattached cleanly before the jump fires its anchor-change event — the new subs see velocity-0 targets unchanged from where they just sprung to.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing