Charts without the JavaScript tax.
Most charting libraries force a trade-off:
- You get beautiful interactive charts
- …but you also ship 40–150 kb of JavaScript
- …and the chart only appears after JS executes
- …and search engines often struggle to see the content
ProvChart takes a different path.
It turns your data into CSS custom properties. The browser then paints the chart using native CSS (clip-path, gradients, etc.). The result is a chart that:
- Loads with the first paint
- Requires zero chart library on the page
- Is fully visible to crawlers
- Can still be updated dynamically
And with the Developer API, you can generate these charts from your own backend or frontend.
The Performance Problem with Traditional Charts
A typical JS charting library does this:
- Download the library
- Wait for JavaScript to parse and execute
- Create DOM / Canvas / SVG elements
- Render the chart
- Re-render on every data change
This creates several issues:
| Problem | Impact |
|---|---|
| Heavy JS payload | Slower LCP & TTI |
| Render-blocking | Chart appears late |
| Client-side only | Harder for crawlers to index |
| Re-render cost | Jank on data updates |
ProvChart removes almost all of this.
How ProvChart Works
- You send data to the API (or use the visual builder)
- ProvChart compiles the data into CSS variables
- It returns pure HTML + CSS
- You drop that into your page
The browser then paints the shape using CSS. No charting library is shipped to the user.
When you need to update the chart, you just change the CSS custom properties. The browser handles the transition natively.
Connecting Your Data to the ProvChart API
Here’s a real example that generates a multi-series chart:
<div id="chart-container"></div>
<script type="module">
try {
const res = await fetch("https://provchart-api.devtem.org/api/v1/generate", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "YOUR_API_KEY"
},
body: JSON.stringify({
type: "line",
series: [
{ name: "Organic", color: "#8b7bff", points: [18, 28, 35, 42, 48, 55, 62] },
{ name: "Direct", color: "#4fd8c4", points: [12, 22, 30, 38, 45, 50, 58] },
{ name: "Referral", color: "#f0a860", points: [8, 15, 22, 28, 33, 40, 46] },
{ name: "Social", color: "#ff5e7d", points: [5, 12, 18, 25, 30, 36, 42] },
{ name: "Email", color: "#5ea8ff", points: [3, 9, 14, 20, 26, 32, 38] }
],
axisX: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
theme: "dark"
})
});
const data = await res.json();
if (data.success) {
// Inject the chart
document.getElementById("chart-container").innerHTML = data.html;
// Inject the CSS
document.querySelector("head").insertAdjacentHTML(
"beforeend",
`<style>${data.css}</style>`
);
} else {
console.error("API Error:", data.error);
}
} catch (err) {
console.error("Fetch Error:", err);
}
</script>
That’s all you need. The chart is now pure HTML + CSS on the page.
Why This Is Great for SEO & Crawlability
Because the chart is delivered as normal HTML and CSS:
- Search engines see the content on the first crawl
- No need to wait for JavaScript execution
- No hydration delay
- Works perfectly with static site generators
This is especially valuable for:
- Documentation sites
- Marketing pages
- Dashboards that need to be shareable / indexable
- Content that should appear in search results
Developer API Highlights
| Feature | Details |
|---|---|
| Endpoint | POST /api/v1/generate |
| Authentication | API Key (X-API-Key header) |
| Response | { html, css } |
| Chart types | line, area, bar, stackedbar, hbar, scatter, combo, gauge |
| Free tier | 5 generations so you can test |
| Pro | 500 generations / month |
| Business | 5,000 generations / month |
You can create an API key and try it immediately from the Pro Dashboard — even on the free plan you get 5 test generations.
Supported Chart Types
-
line– Multi-series line charts -
area– Filled area charts -
bar/stackedbar– Vertical bars -
hbar– Horizontal bars -
scatter– Scatter plots -
combo– Mixed bar + line -
gauge– Circular KPI gauges
All of them are rendered with pure CSS.
When to Use ProvChart
Great fit when you care about:
- Performance (LCP, TTI, bundle size)
- SEO / crawlability
- Static or mostly-static pages
- Simple live updates without heavy re-renders
Less ideal when you need:
- Extremely complex interactions
- Real-time streaming with thousands of points
- Heavy chart animations driven by JavaScript
Getting Started
Try the free visual builder (no signup)
→ chart.devtem.org/get-startedCreate an API key (free users get 5 test generations)
→ chart.devtem.org/dashboardRead the full API docs
→ chart.devtem.org/docs
The rendering core is open source (st-core.fscss). The hosted API and Pro features are provided by DevTemple.
Final Thought
You don’t always need a heavy charting library.
Sometimes the best chart is the one that:
- Loads instantly
- Weighs almost nothing
- Is fully visible to both users and search engines
- Still lets you connect real data
That’s what ProvChart is built for.
Happy building.
Top comments (0)