

Free means two different things in JavaScript charting, and most comparisons mix them up. One group is permissively licensed open source, free forever, at any company size, with no threshold to outgrow. The other is commercial engines with a free tier, and those tiers are usually limited by a watermark, a revenue test, a headcount test, or a clock.
This page separates the two, then picks a winner per category. Every competitor claim below was read on 2026-09-02 from that vendor's own site, documentation or licence agreement. Where to check each one is at the bottom, so you do not have to take our word for any of it.
| category | winner | why |
|---|---|---|
| Best free overall | Chart.js | MIT, no revenue test, largest community |
| Best free for first plot speed | uPlot | 166,650 points in 25 ms from cold, 47.9 KB |
| Best free for raw line throughput | webgl-plot | WebGL, but you build the chart yourself |
| Best free for commercial use | ProEssentialsJS | one revenue test, no headcount or funding test |
| Best free for students and teaching | ProEssentialsJS | free at any institution revenue, no timeout |
| Best free for 3D surfaces | ProEssentialsJS, ECharts | ECharts-GL and Plotly are the free options |
| Best free for 2D filled contours | ProEssentialsJS | the free options are primitives, not charts |
| Best free for many charts on one page | ProEssentialsJS | Canvas2D has no WebGL context limit |
| Best free for engineering and science | ProEssentialsJS | contours, WYSIWYG print, export menu |
| Best free with AI assistance | ProEssentialsJS | a public token budgeted knowledge base |
| Worst value free tier | the watermark group | amCharts, ZingChart, FusionCharts, SciChart |
We make ProEssentialsJS. We win six of these and we lose two of them, and the two we lose are the ones most readers will care about first. Those are dealt with before anything else.
Chart.js is MIT licensed, free forever, at any revenue, with no watermark and no threshold. It has the largest community and the most tutorials of any JavaScript charting library. If you need a line chart, a bar chart and a tooltip, start there and stop reading.
Apache ECharts, D3.js, Plotly.js and ApexCharts are in the same category. All are free forever with no revenue test. The honest trade is support and rendering performance, not licence terms.
uPlot is MIT licensed and publishes its own numbers, which is rarer than it should be. From a cold start it draws an interactive chart of 166,650 points in 25 ms, then scales at roughly 100,000 points per millisecond. The minified bundle is about 47.9 KB.
Read that number for what it is: a cold start. It is the time to put a chart on screen the first time, and for that uPlot is excellent on a budget of zero. We are not going to pretend otherwise.
It is not a sustained throughput number and uPlot does not present it as one. First plot speed and big data are different problems, and this category is the first one.
uPlot also scopes its own claim, and the scope is the interesting part. It describes itself as the fastest time series plotter that does not use context limited WebGL shaders or WASM. Those are the two techniques that go faster, and it says so rather than hiding it. On live data its README is equally direct: streaming works at 60fps but it "may begin to struggle beyond 100k in-view points".
When uPlot runs out, its own documentation tells you where to go: switch to a WebGL or WebGPU solution such as danchitnis/webgl-plot. That is a genuine recommendation from one free library to another and it is worth following.
webgl-plot is MIT licensed, draws multi line 2D plots on native WebGL at the screen refresh rate, has no dependencies, and works with OffscreenCanvas and web workers.
It is a line renderer, not a charting library, and it says so. It deliberately ships no axes, no labels, no legends, no interaction and no 3D. If you need those, you write them. That is a fair trade for a signal viewer and a poor one for a product dashboard.
| uPlot | webgl-plot | ProEssentialsJS | |
|---|---|---|---|
| renders with | Canvas2D | WebGL | Canvas2D and WebGPU, from WebAssembly |
| axes, labels, legends | yes | no | yes |
| interaction | yes | no | yes |
| 3D, surfaces, contours | no | no | yes |
| print and export | no | no | yes |
| licence | MIT | MIT | free under $250K, then perpetual |
Our own performance work, with the conditions every number was measured under, is on the fastest JavaScript chart page. We are not going to restate it here, because a speed claim without its conditions is not a measurement.
Most commercial free tiers are not free for commercial use. They are free for evaluation, or for non-commercial projects, or free with a watermark. Two vendors give a genuine commercial grant with a threshold, and this is the whole comparison.
| ProEssentialsJS | Syncfusion Community | |
|---|---|---|
| annual gross revenue | under $250,000 | under $1,000,000 |
| developers | no limit | 5 or fewer |
| total employees | no limit | 10 or fewer |
| outside investment taken | no test | never more than $3,000,000 |
| watermark | none | none |
| expiry | none | none |
| redistribution included | yes | yes |
Syncfusion allows four times our revenue, and that is a real advantage. All four of their conditions must be true at the same time, which is where the difference shows up.
| company | ProEssentialsJS | Syncfusion |
|---|---|---|
| 20 people, $200,000 revenue | free | no, over the 10 staff limit |
| 8 developers, pre revenue | free | no, over the 5 developer limit |
| raised a $5M seed, $100,000 revenue | free | no, over the funding cap |
The third case is the common one. A venture funded startup is disqualified from Syncfusion's community licence on the day the round closes, whatever its revenue. ProEssentialsJS applies one test, revenue, and counts nothing else. There is no headcount test and no funding test.
Redistribution is included, so the engine ships inside your application with no per unit fee and no reporting. Full terms are on the licence page and the ladder is on pricing.
Quoting section 3 of the agreement directly:
"Personal and non-commercial use is free. An individual may use the Software at no charge for personal projects, study, hobby or research, or for any other purpose that is not Commercial Use, without time limit."
"Teaching and learning are free at any revenue level. An educational institution accredited by the relevant national or regional authority, together with its enrolled students and its faculty, may use the Software at no charge for classroom instruction, for coursework, and for academic research, whatever the institution's Annual Gross Revenue."
| ProEssentialsJS | SciChart | Highcharts | LightningChart | |
|---|---|---|---|---|
| classroom and coursework | free | free | free | free, on application |
| academic research | free at any institution revenue | free | unfunded research only | free, on application |
| watermark | none | yes | none | yes |
| stops working | never | after 6 months | never | after 1 year |
| sell a course or book about it | free | attribution required | not stated | attribution sentence required |
| application and proof of enrolment | not required | not required | not required | required, reviewed |
| how a university gets access | the licence already grants it | free academic licence | free education licence | request a university licence |
Check the timeout before a final year project. SciChart's Community Edition requires the latest version or the application stops functioning after six months. A capstone built in the autumn can be dead by the demo.
Two more terms from LightningChart's student licence, both worth knowing before a thesis depends on them. Their Article V requires students to describe the project they intend to build, and states that those projects "can and will be used by LightningChart in their official communications". Article VII requires a specific credit line in the work itself.
Chart.js, ECharts, Plotly and uPlot need no clause at all and never expire, so they are honest competition here too. What a student gets from ProEssentialsJS is the same engine, the same API and the same C++ core their employer is likely to license later.
Two free options draw a real 3D surface, and both are worth trying before paying anyone.
| library | surface | notes |
|---|---|---|
| Apache ECharts, with echarts-gl | yes, WebGL | surface3D, function based and parametric, Apache 2.0 |
| Plotly.js | yes, WebGL | surface trace, MIT, 3.6 MB full bundle |
| ChartGPU | yes, WebGPU | MIT, pre 1.0, and WebGPU only with no fallback |
| ProEssentialsJS | yes, WebGPU | same surface control as the desktop product |
Run the 3D surface demo and compare. It needs no sign up and installs nothing.
This is a thinner field than the surface one, and the distinction matters. A contour primitive and a contour chart are different things.
| free option | what it actually is |
|---|---|
| d3-contour | marching squares to SVG polygons. A primitive, not a chart |
| Observable Plot | a contour mark built on d3-contour, same CPU path |
| Plotly.js | a contour trace, outside its WebGL trace family |
| VTK.js | real iso-contouring, but a scientific toolkit rather than a chart, with no axis and legend layer |
| ChartGPU | contour isolines drawn on a 3D surface. Not a 2D contour chart type |
ProEssentialsJS treats contours as a chart, with contour legends, colour sets, colour blending, precision control and manual contour ranges rather than a fixed ramp. If you need axes, a legend and a readable scale around a filled contour, the free field is mostly primitives you would assemble yourself.
This one is architectural rather than a matter of tuning. Browsers cap how many WebGL contexts a single page may hold, commonly eight to sixteen. It is a browser limit, not a library defect, and every WebGL based charting library inherits it. Plotly documents the ceiling at eight charts on one page before the context is lost.
ProEssentialsJS draws 2D with Canvas2D, which has no equivalent cap. A dashboard of many 2D charts is the case this matters for. Our 3D uses WebGPU, which has its own limits, so the point is about 2D charts specifically.
uPlot is Canvas2D as well and shares this advantage, so it is not ours alone. On a page of many simple line charts it is a genuine alternative. The difference is what each chart can be, since uPlot ships no 3D, no surfaces, no contours and no print.
Two things engineers need that hobby libraries skip.
Printing and export. The right click menu switches to monochrome, changes plotting methods, adds a data table, and exports WYSIWYG image and print output with a font size slider, so a chart going into a report or a paper can be sized to fit.
Contours and surfaces, covered above, with contour legends, precision control and manual contour ranges rather than a fixed colour ramp.
The engine has been in continuous development since 1993 and the same code draws the WinForms, WPF, WinUI, MFC and JavaScript versions. How that works is on the WebAssembly charting engine page.
An assistant writing charting code against a commercial library has a problem the open source libraries do not have. Chart.js and D3 are in the training data. A commercial engine is not, so the model guesses property names and invents plausible ones, and the developer debugs a property that never existed.
ProEssentialsJS ships a public, machine readable API knowledge base built for this, at github.com/GigasoftInc/proessentials-ai-data, and it is in the desktop installer as well. The files are budgeted by token count so an assistant can load exactly the topic it needs, for example the axis formatting file at about 1,100 tokens and the full C++ API reference at about 17,200. A query tool resolves an API name to its exact property, its controls and its description rather than to an approximation.
pe_query and JavaScript development are fully supported. More is on the AI code assistant page.
Four vendors advertise a free tier that carries a mark on every chart, a clock, or both.
| vendor | the catch |
|---|---|
| amCharts 5 | all features, amCharts watermark on every chart |
| ZingChart | watermark and a link, required at all times |
| FusionCharts | watermarked, personal projects only |
| SciChart Community | watermark, non-commercial only, stops working after 6 months |
| LightningChart JS | watermark, non-commercial only. The free student licence expires after a year |
None of these are bad libraries. The point is narrower. If the free tier exists to make you buy, read what it costs you before you build on it.
| library | licence | free tier | watermark | other limits |
|---|---|---|---|---|
| Chart.js | MIT | free forever, any revenue | none | none |
| Apache ECharts | Apache 2.0 | free forever, any revenue | none | none |
| D3.js | ISC | free forever, any revenue | none | none |
| Plotly.js | MIT | free forever, any revenue | none | none |
| ApexCharts | MIT | free forever, any revenue | none | none |
| uPlot | MIT | free forever, any revenue | none | none |
| webgl-plot | MIT | free forever, any revenue | none | no axes, labels or legends |
| TimeChart | MIT | free forever, any revenue | none | streaming line data only |
| ChartGPU | MIT | free forever, any revenue | none | WebGPU only, no fallback, pre 1.0 |
| ProEssentialsJS | commercial | free commercial under $250K | none | none |
| Syncfusion | commercial | free commercial under $1M | none | 5 devs, 10 staff, $3M funding |
| amCharts 5 | commercial | free, all features | watermark on every chart | none |
| ZingChart | commercial | free, all charts | watermark and link | none |
| FusionCharts | commercial | free, personal projects | watermark | no commercial use |
| SciChart | commercial | free, non-commercial only | watermark | stops working after 6 months |
| Highcharts | commercial | free, non-commercial only | none | $176 per dev per year after |
| LightningChart JS | commercial | free, non-commercial only | watermark | 30 day commercial trial |
| Kendo UI | commercial | no free tier, 45 day trial | none | $899 per user |
Every row above came from a public page. Read them rather than trusting this one, and tell us if any has changed.
support.scichart.com, community licensing termshighcharts.com/education and shop.highcharts.comsyncfusion.com/products/communitylicenselightningchart.com/free-license-for-students, student EULA articles I, IV, V, VI and VIIgigasoft.com/license, section 3
Licence terms change. Every claim here was read on 2026-09-02 and the vendor is the authority, not us. If you find a row that is out of date, tell us and it gets fixed.
Try the engine before deciding. Three demos run the real build with no sign up: the example browser, the real time demo, and the 3D surface demo. The library itself is npm install proessentials, and the JavaScript chart library page covers getting it onto a page.
御社とエンドユーザーに最も簡単で最もプロフェッショナルな価値を提供することで、お客様の成功を最優先目標とします。
ProEssentials は、自らのチャートコンポーネントを必要としたプロの電気エンジニアから生まれました。ProEssentials を使う一流エンジニアリング企業の長いリストに加わってください。
ProEssentials のお客様であることに感謝するとともに、ProEssentials チャートエンジンをご検討いただきありがとうございます。