sparkline
A chart you feed with one line of curl, and an SVG you can drop in a README.
Sparkline is a chart you make in about a minute and feed with one line of curl. No client library, no agent on the machine, no auth header to set: the write key sits in the URL path, so sending a reading is a GET that fits on one line of a Makefile, a CI step or a cron entry.
The number almost always exists already. Build time, queue depth, deploys a day, errors an hour — something prints it, and it scrolls past in a log nobody reads twice. What is missing is never the measurement, it is somewhere to put it that costs less than the measurement did.
One call is one sample, whatever it carries: a name and a number per series, and a name the chart has not seen makes a series of its own, so nothing has to be declared first. The answer comes back the same shape whether it worked or not, which is what makes jq -e .ok a complete health check — and it names the series that call invented, which is the line to watch when a chart grows a track nobody meant.
For reading there is one address and four representations, chosen by the extension on it. The SVG is drawn at the moment it is asked for, so it goes anywhere an image goes — a README, a status page, a pull request, a Slack unfurl — and it is never showing yesterday. .json is the same numbers as a table for a program. .js is a live embed that gives hover readings and refreshes itself, drawn into a shadow root so neither stylesheet can reach the other. And with no extension it is a page you can send to somebody.
Five shapes, and the defaults argue for themselves. Bars start at zero and lines do not: a bar floating above its own baseline lies about how many times bigger it is than its neighbor, while a series that lives in a narrow band is flattened into a straight line by that same rule. Nothing smooths a curve through your data. And a chart is a window on its last samples rather than an archive — the oldest leaves as the newest arrives, in the same transaction, so it is never even briefly over its own size.
Two codes, two jobs. The address in the picture is public and can only read. The key that writes is separate, does nothing but add readings to that one chart, and rotates in one click — so a key pasted into the wrong Slack channel is a minute’s problem rather than an afternoon’s. That the key rides in the path instead of a header is a deliberate trade: it is what makes the line short enough to actually get written, and a chart of build times is not worth an OAuth flow.
What it can’t do. There is no backfill — the x axis is the service’s clock, which is exactly what lets a request consist of nothing but numbers, and the price is that yesterday’s numbers cannot be imported. There is no history past the window: 256 samples a chart free, 4096 on the paid plan. Three series a chart free and twelve paid; three charts free and a hundred paid. And 120 calls a minute per key, counted as calls rather than numbers, so one carrying six series costs exactly what one carrying a single value costs.