Skip to content

Arincen ChartsThe charting library an AI agent can read

Lighter, faster, smarter. 26 KB, zero dependencies, and the first charting engine that hands a model exactly what is on screen — then lets it draw the answer back. Your users ask; the agent reads the chart and answers on it.

Live, not a screenshot — a reading arrives every second through series.update().

In thirty seconds

js
const series = chart.addSeries(AreaSeries, {
    lineColor: '#db2777',
    topColor: 'rgba(192, 38, 211, 0.3)',
    bottomColor: 'rgba(234, 88, 12, 0.02)',
    lineWidth: 2,
});

series.setData([
    { time: '2026-01-01', value: 24.10 },
    { time: '2026-01-02', value: 24.83 },
    { time: '2026-01-05', value: 24.41 },
    { time: '2026-01-06', value: 25.02 },
    { time: '2026-01-07', value: 24.77 },
]);

chart.timeScale().fitContent();

With the two lines that make it a page rather than a snippet:

js
import { createChart, AreaSeries } from '@arincen/charts';

const chart = createChart(document.getElementById('chart'), { autoSize: true });

Note the third and fourth readings — the 5th follows the 2nd. The weekend is not drawn as empty space, because bars are placed by their position in the data and never by elapsed time. That is the right default for market data and the wrong one for a sensor log.

An agent's eye and hand on the chart

Every charting library draws for eyes. Anything else — a language model, a screen reader, an alerting job — has to reach into series internals and write the same summary again, badly, in every project.

You already have the data, and you already have a model. What neither of them has is the chart: where the reader is pointing, what is on screen right now, and a way to put the answer back where they are looking.

"Why did it spike here?" — your database cannot say where here is. "Zoom into the March crash." — that is not a sentence, it is an action. "Draw the trend line between these two lows." — somebody has to put a line on a canvas at the right coordinates, and take it off again when asked.

That is the whole job: the eye and the hand, not the brain. Why it matters when your app already has the data.

js
chart.toText();
A chart of 2 series over 180 readings, 2024-01-01 to 2024-06-28.
Showing 2024-04-01 to 2024-06-28, 89 of them.
AAPL (candlestick): last 142.56, high 150.10 on 2024-06-20, low 98.20 on 2024-04-03, up 12.42% over the period.

Deterministic, short enough to paste into a prompt, and free of judgement — no "bullish", no "resistance". A test fails the build if those words appear, because a conclusion about somebody else's money is theirs to draw.

The answer comes back the same way. One shape, whatever it means: a point becomes a marker, a level a price line, a region a shaded band.

js
chart.annotate([
    { from, to, text },      // "steepest run"
    { time, price, text },   // "high"
    { price, text },         // "peak close"
]);

There is no model in here, and there never will be. No API key, no client library, no provider you are tied to. What was missing everywhere else is the boring half — getting the numbers out in a form something can reason about, and getting an answer back onto the canvas.

The whole loop, with a chart you can press.

Why another charting library

Because most of what a financial charting library carries, most pages never use. Panes, logarithmic scales, custom series and touch tracking are all real features and all structural, which means a bundler cannot remove them: the core genuinely references them, and nothing can prove your page has only one pane.

So the removal happens earlier, at build time. @arincen/charts does not contain the code for what it leaves out. chart.panes is not a method that returns an empty array — it does not exist.

That is the whole idea. Everything else is a charting library.

Twenty-one of them, running

The Arincen Charts page draws every series type, both builds, the agent loop and the tooltip — live, on one page, from the same file this documentation demonstrates. It is the fastest way to see whether it draws what you need before you install anything.