Recipes / Migrating from QuickChart

Convert a QuickChart URL

Paste a QuickChart chart URL, or just a Chart.js config. You get the ChartPNG URL, the Chart.js 4 config it draws, what was changed on the way, what needs your attention and a live preview.

What it converts

The page reads the parameters QuickChart documents for /chart: chart or c,width or w, height or h, backgroundColor or bkg,devicePixelRatio, version or v, format or f,encoding and key. The config goes through the same lenient parsing as every ChartPNG request: JavaScript syntax becomes JSON, and Chart.js 2 options are translated to Chart.js 4. The docs list every fix code.

QuickChartChartPNG URL
width, height (default 500 and 300)w, h, always written out. Between 50 and 2000.
devicePixelRatio (default 2)dpr, always written out. 1 or 2.
backgroundColor (default transparent)bkg, transparent when the URL has none. ChartPNG is white otherwise.
encoding=base64Decoded here and sent as plain JSON.
version, format, keyNot carried over: ChartPNG refuses them, draws Chart.js 4 and PNG only, and never takes a key in a URL.

What does not convert

These are the cases the page cannot fix for you. It names them in What needs your attention when it finds them in what you pasted.

In your QuickChart chartWhat ChartPNG doesWhat to do
type: 'horizontalBar'Refused with a 400.Use type: 'bar' with options.indexAxis: 'y'. The value axis is then scales.x and the label axis scales.y.
A time or timeseries axisCannot be drawn: Chart.js needs a date adapter for it and ChartPNG has none.Write the dates as labels and use a category axis.
Functions: tick callbacks, label formattersRemoved, never run. The option they set is gone.Put the final text in your data or labels.
QuickChart-only types: progressBar, gauge, radialGauge, sparkline, sankey, violin, boxplot, funnel and candlestickRefused with a 400. ChartPNG draws bar, line, pie, doughnut, radar, polarArea, scatter and bubble.For a sparkline or a progress-style bar, see the KPI sparkline guide. The others have no equivalent.
Plugins QuickChart bundles, such as datalabels and doughnutlabelTheir options are ignored: ChartPNG has Chart.js core only.None. The chart draws without them.
Several axes without ids, an axis a dataset names by id, an option Chart.js 4 could not draw once renamedLeft as written, and Chart.js 4 ignores the v2 form.Rewrite it as scales.x, scales.y or one entry per axis id. The page says which axis it left.
Short URLs and templates: quickchart.io/chart/render/...The page cannot read them: the config is on QuickChart's server.Open the URL at QuickChart, copy the full chart URL or the config, and paste that.

One difference is fixed for you and is worth knowing: Chart.js 2 filled the area under a line by default and Chart.js 4 does not. The page shows it as the fix v2_defaults. A dataset that says fill: false keeps its plain line. A chart that sets no colors gets the ChartPNG theme, which draws its own soft area under a single line.

Your config and your privacy

The URL is read in your browser. To check the config and draw the preview, the page sends the config, the size and the background to ChartPNG, as any chart request does (POST /chart.json, then the image from GET /chart). A key in the URL is never sent. Nothing you paste is kept by the page.

Back to Migrating from QuickChart.

Sources

Claims about other products, read at their source on 3 Nov 2026.