Performance

60 FPS is non-negotiable. The library is built around that contract.

What runs where

PlatformAnimation runs on
WebCompositor (CSS @keyframes, transform + opacity only)
RN New ArchitectureUI thread via Reanimated 3 worklets
RN Old ArchitectureNative driver (useNativeDriver: true)
Expo GoReanimated 3 (bundled with Expo SDK 48+)

We never animate width / height / top / left. Only transform and opacity.

Budgets

  • Initial measurement pass: < 4ms for ≤100 leaf nodes
  • Re-measure on resize: debounced to next animation frame, < 2ms
  • Bundle size (web, gzipped): < 4 KB
  • Bundle size (native, gzipped, excl. Reanimated): < 8 KB

Live frame counter

0 FPS

Big list benchmark

100 skeletons rendered, animated, scrolled. Watch the FPS — should hold at 60.

Loading content

CI regression suite

Every PR runs a 500-item FlashList benchmark on an iPhone 12 simulator and asserts:

expect(p95FrameTime).toBeLessThan(16.67);  // ms
expect(initialMeasurePass).toBeLessThan(4); // ms