······
····
EngineeringMar 20, 2026

60 frames, no compromises

Animation thread

Thread

Compositor

JS overhead

0 ms

Frames

60 fps

Animation quality is one of the fastest ways to tell a premium product from a mediocre one. Most teams reach for JavaScript-driven animations by default—attaching scroll listeners, computing values on every event, setting styles directly. The result is main-thread congestion: the same thread that handles clicks, layout, and JavaScript execution now also drives every frame of your animation.

We work compositor-first. CSS transform and opacity are the only properties that run on the compositor thread, completely separate from the main thread. When we animate position or presence, we use these properties. The browser never touches layout or paint during the animation, which means frames stay at 60fps even when the page is doing other work.

For complex sequences we use GSAP, and for component-level interactions—hover states, reveal animations, 3D tilts—we use Motion. Both libraries understand the compositor boundary and stay within it. We treat JavaScript-driven style mutation as a code smell that needs justification, not a default.

The practical outcome: scroll-reactive sections that don't stutter, page transitions that don't drop frames, hover effects that feel instant. Clients notice it without being able to name it. That's the point—animation should feel inevitable, not impressive.