Pillar · parity
Native parity
Same feel on every engine. Web animates with Framer Motion; Zippex + Driver animate with Reanimated. The tokens, curves, springs, timings, are identical. Toggle to see each side.
One token, two engines
The values match exactly, so the motion feels the same on iOS, Android, and web.
Ease-out curve
ease: [0.23, 1, 0.32, 1]
Snappy spring
{ type: 'spring', stiffness: 500, damping: 30 }Press feedback
whileTap={{ scale: 0.97 }}Reduced motion
useReducedMotion()
The rule
Define the token once; mirror it per platform.
A motion token is a contract, not an implementation. Out = [0.23, 1, 0.32, 1] means the same thing whether it’s a Framer ease array or a Reanimated Easing.bezier. Match the numbers and the feel transfers, no shared package required.