Animation platform · 0 dependencies

Product motion, minus the 300KB player.

MotionHub is a tokenized motion system in plain CSS and SVG. Copy a component, paste it into your codebase, ship it. No runtime, no CDN, nothing to break.

Free tier forever. The 9 components below are running on this page right now.

4.1KBmedian component
0runtime deps
60fpson mid-range phones
12,400teams shipping
0:00 loop · 4.0s · linear 0:04
The problem

Your motion stack weighs more than your motion

Teams bolt three players onto one page to loop a checkmark. Here is what that costs.

01

The player tax

287KB of JavaScript to play a 12KB animation. Every visitor pays it, on every visit, before your product renders.

02

Dead boxes

CDN hiccup, ad blocker, strict CSP: the player never loads and your hero renders an empty grey rectangle. Nobody gets an alert.

03

Six easings, one page

Every embed was exported by a different artist with different timing. Your product motion reads as noise instead of a system.

The mechanism

Tokens, not files

Every MotionHub component is built from three shared scales. Change a token once and every animation on your page moves the same way. It is CSS, so it is already in your build.

Duration scale

--d-1 · taps120ms
--d-2 · hovers240ms
--d-3 · panels400ms

Easing set

--e-out0.22, 1, 0.36, 1
--e-inout0.65, 0, 0.35, 1
--e-snap0.34, 1.56, 0.64, 1

Distance scale

nudge4px
lift8px
slide16px
enter24px
burst56px
The library

Every card below is live CSS

The same set you would reach for a player to render. View source: each one is a keyframe block you can copy.

Loader 900ms · linear · infinite
CSS
Success check 2.4s · ease-out draw + snap pop
SVG
Error alert 1.8s · draw then shake
SVG
Notification bell 1.6s · decaying swing
SVG
Day / night toggle 700ms · snap · 3.2s cycle
CSS
Confetti burst 2.6s · out-quart · 8 particles
CSS
Cloud sync 1.4s · in-out · staggered 200ms
SVG
Upload progress 2.2s · typed counter via @property
CSS
Click ripple 1.2s · out-quad · 3 rings
CSS
The math

287KB vs 4.1KB, same checkmark

lottie-web + player component287 KB gzipped
MotionHub success check4.1 KB of CSS + SVG

Measured on a production checkout page, January 2026: dropping the player stack cut LCP by 0.8s on a mid-range Android over 4G. The animation looked identical.

What you get

Outcomes, measured

-214KB

Median bundle cut when teams replace player libraries with MotionHub components.

0 requests

Nothing to fetch at runtime. Your motion ships inside the stylesheet you already send.

1 easing language

Three tokens govern every component, so the whole product moves like one hand built it.

100% reduced-motion

Every component pauses under prefers-reduced-motion. Accessibility is the default, not a patch.

Pricing

Cheaper than one "make it feel snappier" ticket

Free

$0

MIT licensed, forever.

  • All 60 core components
  • Copy-paste CSS + SVG source
  • The full token sheet
  • Reduced-motion handling built in
Start copying
MOST TEAMS

Pro

$12 /mo

For designers who ship weekly.

  • Everything in Free
  • Figma plugin with live preview
  • Token sync to your codebase
  • Private component sets
  • Export to React and Vue wrappers
Start 14-day trial

Team

$39 /mo

Per team of ten, flat.

  • Everything in Pro
  • Shared team libraries
  • Motion review with diff view
  • SSO and audit log
Talk to us

A motion designer's day rate runs $640. Pro costs $12 a month and your engineers stop re-implementing the same spinner every quarter.

Teams on MotionHub

Deleted the player, kept the motion

We removed lottie-web and the player component in one sprint. The bundle dropped 214KB and LCP improved 0.8s on checkout. Conversion moved 1.9% the same week.

Priya NatarajanStaff engineer, payments platform

Design and engineering finally argue about the work instead of the timing. The token sheet ended the snappier-please tickets. All eleven of them.

Tomas RiveraDesign lead, B2B SaaS

I shipped the success check in four minutes, code review included. It was a copy, a paste, and one token change to match our brand teal.

Ana MoreiraFrontend developer, fintech
Questions

Asked before you buy

Does this work with React, Vue, or Svelte?

Yes, because it is CSS and inline SVG. There is nothing framework-shaped about it. Pro adds generated React and Vue wrapper components if you want props for duration and easing instead of editing tokens.

What about browser support?

Everything except the typed @property counter works in every evergreen browser and degrades to a static frame in older ones. The counter (used in Upload progress) needs Chrome, Edge, Safari 16.4+, or Firefox 128+; below that you see the bar without the percentage.

How does reduced motion work?

One media query pauses every animation on the page when the visitor has asked their OS for less motion. It ships inside each component, so you cannot forget it. This page does the same thing; try it in your system settings.

Can it replace character animation or illustration loops?

No, and we will not pretend otherwise. Rigged characters and complex illustration belong in video or canvas. MotionHub covers UI motion: state changes, feedback, loaders, transitions. That is 90% of what player libraries get used for anyway.

Will copy-pasting components bloat my CSS?

Components share the same token custom properties, so repeated keyframes deduplicate under compression. Ten MotionHub components on one page measured 11.2KB gzipped, total.

What license applies?

Free tier components are MIT. Use them in client work, products, templates, anything. Pro and Team sets are licensed per seat and stay yours to keep if you cancel.

Get started

Ship motion tonight.
Delete a dependency tomorrow.

No card needed MIT core, forever Cancel anytime