GalaxyJS
Sixty cosmic animations. Zero dependencies.
The starscape behind this is the real engine — running live
A cosmic engine that drops into anything.
No framework. No build step. No dependencies. One <script> tag and one call put 60 hand-tuned canvas animations into a React app, a Vue app, or a plain HTML file. The hard part wasn't drawing stars — it was making the whole thing feel weightless: small, fast, portable, and accessible by default.
Don't take my word for it. Drive it.
This panel is the actual library, running live. Pick a scene — the engine mounts it on a HiDPI canvas, runs it on the shared frame loop, and would pause it the moment you scrolled away. The case study is the demo.
shared rAF · dpr-aware · auto-pause
Select a scene
Telemetry
scenes · 60 registered
theme · token-based, dual
extend · registerAnimation()
Sixty scenes. All real.
A few of the catalog, each a separate live instance. They only animate while on screen — scroll past and they sleep.
Performance is a feature.
Sixty animations could mean sixty timers fighting the CPU. They don't. Every scene shares one requestAnimationFrame loop, each canvas is device-pixel-ratio aware so it stays crisp on retina, and an IntersectionObserver pauses anything scrolled offscreen. A token-based theme drives colour, and registerAnimation() lets anyone add a 61st scene without touching the core.
The cosmos holds still when asked.
Every animation honors prefers-reduced-motion — instead of moving, it renders a single composed static frame. Motion sensitivity shouldn't mean a blank box; it should mean a still, beautiful one. A test in CI keeps that promise.
This page honors it too — turn on Reduce Motion and the boot sequence skips, the reticle cursor returns to default, and every cosmic scene freezes to one frame.
A drop-in tag — or an agent's call.
A human adds one script and ships. But GalaxyJS also carries the machine layer: an MCP server, hand-written TypeScript types, a generated manifest, and an llms.txt. So an AI agent in Claude Desktop or Cursor can discover the 60 scenes and wire one into a page from a structured contract — the same instinct behind its sibling registry, ReactΩ.
One author, two engines.
GalaxyJS and ReactΩ are deliberately separate — different stacks, different problems, the same discipline underneath.
Vanilla cosmic engine
Framework-free canvas animations + UI kit you drop into any page.
- Plain JS · no framework · no build
- One <script> / CDN drop-in
- 60 scenes · single shared rAF
- Reduced-motion by contract
React component registry
Copy-paste motion, interaction & physics components you own — AI-native.
- React + TypeScript + Tailwind
- Registry + CLI + shadcn + MCP
- 31 components you own outright
- Reduced-motion by contract
Not a demo. Shipped.
Tagged release — 60 animations, immutably pinned on jsDelivr. Release notes ↗
All 60 scenes + the UI kit, native on GitHub Pages. edwson.github.io/GalaxyJS ↗
Syntax + eslint, a true minified build, a manifest-drift gate, and a real end-to-end MCP test — green on every push.
Engine, UI kit, MCP, and docs shipped end-to-end with an AI pair — disclosed openly. Honest ~20 kB, measured not guessed.
I engineered an experience to feel effortless.
Anyone can draw a starfield. The craft was making sixty of them feel weightless — one frame loop, dpr-crisp, auto-paused, ~20 kB, and still beautiful when motion is switched off — and then making the whole thing installable by a person or an agent. Performance, portability, and accessibility weren't constraints on the product. They were the product.