Small open-source tools for the web, MIT licensed and staying that way. There's no pro tier and nothing behind a paywall. If one of them saved you an afternoon, say thanks: shout me a beer or a coffee.
Each one is a single script. Nothing to install and nothing to sign up for.
Celestial stipple: things in the sky drawn as dots on one canvas. Ten kinds of body and forty-two named ones, from the Milky Way and Andromeda to Saturn, the Sun, the Moon and Halley. A playground writes the tag for you. Loading states for AI interfaces that don't look like everyone else's. Six CSS variables, or monochrome.
Ephemeris takes requests: open an issue with a photo of the object. Other libraries land here when they're ready to use, not before.
Paste two lines. Your coding agent can do it from the README if you'd rather not.
From the repo or a CDN. One file, nothing to install.
<script src="https://cdn.jsdelivr.net/gh/TonkaTuff/ephemeris@v0.9.3/dist/ephemeris.min.js"></script>Height is the preset. Width lets wide ones stretch. Every option is a data attribute.
<canvas class="orb" width="64" height="64"
data-orb-body="andromeda"></canvas>Six CSS variables, read every frame, so a theme switch applies live.
canvas.orb {
--orb-cold: #0a7a5a;
--orb-hot: #e8fff6;
}I'm not going to charge a monthly fee for a loading spinner. Everything here stays free and MIT, commercial use included. If something saved you time and you feel like it, shout me a beer or a coffee. If not, no hard feelings.
The things people ask.
Yes. MIT licence, use it in anything, commercial included. Nothing here will move behind a paywall later.
There isn't one. People saying thanks with a beer or a coffee is the whole business model.
A browser with Canvas 2D, which is all of them. No framework, no bundler, no npm install. It works inside React, Vue, Svelte or plain HTML the same way: put a canvas on the page.
Yes. Point Claude Code, Cursor or Codex at the README and it'll wire the script and a canvas in. Every option is a data attribute or a CSS variable, so there's nothing to configure in JavaScript unless you want to.
Open an issue on the repo. The roadmap's in the README and I pick from it in whatever order looks fun.