Show HN: Data-anim – Animate HTML with just data attributes

ryo-manba 11 points 4 comments March 14, 2026
github.com · View on Hacker News

Hey HN, I built data-anim — an animation library where you never have to write JavaScript yourself. You just write: <div data-anim="fadeInUp">Hello</div> That's it. Scroll-triggered fade-in animation, zero JS to write. What it does: - 30+ built-in animations (fade, slide, zoom, bounce, rotate, etc.) - 4 triggers: scroll (default), load, click, hover - 3-layer anti-FOUC protection (immediate style injection → noscript fallback → 5s timeout) - Responsive controls: disable per device or swap animations on mobile - TypeScript autocomplete for all attributes - Under 3KB gzipped, zero dependencies Why I built this: I noticed that most animation needs on landing pages and marketing sites are simple — fade in on scroll, slide in from left, bounce on hover. But the existing options are either too heavy (Framer Motion ~30KB) or require JS boilerplate. I also think declarative HTML attributes are the most AI-friendly animation format. When LLMs generate UI, HTML attributes are the output they hallucinate least on — no selector matching, no JS API to misremember, no script execution order to get wrong. Docs: https://ryo-manba.github.io/data-anim/ Playground: https://ryo-manba.github.io/data-anim/playground/ npm: https://www.npmjs.com/package/data-anim Happy to answer any questions about the implementation or design decisions.

Discussion Highlights (2 comments)

hyperhello

I like the simplicity. Great job. Though I could have used a demo page with a block for every animation at once instead of poking at choices.

ricardobeat

The demo page scroll is very janky, which detracts from the animations entirely. Seems to be because of the excessive use of blur filters - the cards are on a black background so the filter is not doing anything anyway. (I'm on a brand new PC with pretty good hardware. It's not as bad on the Mac, but it still can't keep up 60fps)

Semantic search powered by Rivestack pgvector
3,471 stories · 32,344 chunks indexed