June 11, 2026 · 3 min
Six demos, almost no libraries
We added six bleeding-edge demos to the lab. The thread through almost all of them: the thing we used to reach for a library to do, the browser now does itself.
We set out to build a particle system and ended up deleting Three.js.
That’s the short version of the last week in the lab. Six new demos, and the thread running through almost all of them is the same: the thing we’d normally pull in a library for, the browser now does on its own.
The particle demo is the clearest case. Sixty thousand particles, moved every frame through a curl-noise field. The old way is Three.js and a clever instancing trick. The new way is WebGPU — you hand the GPU a buffer and a compute shader written in WGSL, and it does the math in parallel without ever touching the main thread. No renderer library. Just the platform.
Then it kept happening.
Scroll animations — the kind that used to mean GSAP and a ScrollTrigger plugin — are now a few lines of CSS. animation-timeline: scroll(). The browser ties the animation to the scrollbar and runs it on the compositor. We wrote zero JavaScript to drive it.
Tooltips and menus that follow their button around the screen, flipping when they hit an edge: that was always a positioning library and a scroll listener doing math sixty times a second. Now it’s anchor() and position-try — declarative, and the browser handles the flip. We wrote a little JS to make one element draggable so you can shove it into a corner and watch. That’s the whole script.
The fluid simulation is the holdout. That one is still raw WebGL2 — hundreds of lines of shader, ping-ponging textures through a pressure solve. Some things are still hard. But it runs entirely on the GPU, and the only library involved is the one we didn’t use.
Two more. A generative background drawn by a CSS paint worklet — CSS as a canvas, repainting itself off the main thread. And a synth whose every sample is computed on the audio thread in an AudioWorklet, so the sound never stutters when the page gets busy.
I keep noticing the same shape. We reach for the library out of habit. Then we check, and the platform already shipped it — usually faster, usually off the main thread, usually a year or two ago while we weren’t looking.
The demos are the fun part. The thing underneath them is the useful one: the gap between what needs a framework and what the browser just does keeps closing, and it’s closing from the browser’s side.