frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Open in hackernews

Show HN: ChartGPU – WebGPU-powered charting library (1M points at 60fps)

https://github.com/ChartGPU/ChartGPU
203•huntergemmer•2h ago
Creator here. I built ChartGPU because I kept hitting the same wall: charting libraries that claim to be "fast" but choke past 100K data points.

The core insight: Canvas2D is fundamentally CPU-bound. Even WebGL chart libraries still do most computation on the CPU. So I moved everything to the GPU via WebGPU:

- LTTB downsampling runs as a compute shader - Hit-testing for tooltips/hover is GPU-accelerated - Rendering uses instanced draws (one draw call per series)

The result: 1M points at 60fps with smooth zoom/pan.

Live demo: https://chartgpu.github.io/ChartGPU/examples/million-points/

Currently supports line, area, bar, scatter, pie, and candlestick charts. MIT licensed, available on npm: `npm install chartgpu`

Happy to answer questions about WebGPU internals or architecture decisions.

Comments

keepamovin•2h ago
Wa, this is smooth, man. This is so cool. This is really sexy and cool, the examples page (https://chartgpu.github.io/ChartGPU/examples/index.html) has many good.

I hope you have a way to monetize/productize this, because this has three.js potential. I love this. Keep goin! And make it safe (a way to fund, don't overextend via OSS). Good luck, bud.

Also, you are a master of naming. ChartGPU is a great name, lol!

huntergemmer•2h ago
Thanks! The name was honestly just "what does this do" + "how does it do it" haha.

Interesting you mention three.js - there's definitely overlap in the WebGPU graphics space. My focus is specifically on 2D data visualization (time series, financial charts, dashboards), but I could see the rendering patterns being useful elsewhere.

On sustainability - still figuring that out. For now it's a passion project, but I've thought about a "pro" tier for enterprise features (real-time collaboration, premium chart types) while keeping the core MIT forever. Open to ideas if you have thoughts.

Appreciate the kind words! :)

PxldLtd•2h ago
Have you thought about leaning into some of the fintech space? They'd happily pay for the sorts of features they need to stream financial data (which is usually bazillions of data points) and graph it efficiently.

Off the top of my head, look into Order Book Heatmaps, 3D Volatility Surfaces, Footprint Charts/Volatility deltas. Integrating drawing tools like Fibonacci Retracements, Gann Fans etc. It would make it very attractive to people willing to pay.

d--b•2h ago
This looks great. Quick feedback, scrollbars don't work well on my mac mini M1. The bar seems to move twice as fast as the mouse.
huntergemmer•2h ago
Thanks for the bug report! That's the data zoom slider - sounds like a momentum/inertia scrolling issue on macOS.

Which demo were you on? (million-points, live-streaming, or sampling?) I'll test on M1 today and get a fix out.

Really appreciate you taking the time to try it :)

abuldauskas•1h ago
I also noticed it. On million-points. MacBook Pro M2 on Firefox Nightly 148.0a1 (2026-01-09) (aarch64)
qayxc•1h ago
Same issue on Windows - doesn't seem to be OS-related, but a general problem. The sliders and the zoom are basically unusable.
monegator•1h ago
On windows 10, too. Firefox 147.0.1 (You may want to update your "supported" chart! Firefox has WebGPU now)
mikepurvis•1h ago
I see the same on Windows 11, both FF and Chrome.
ranger_danger•2h ago
No Firefox support? It has had WebGPU support since version 141.

Even when I turn on dom.webgpu.enabled, I still get "WebGPU is disabled by blocklist" even though your domain is not in the blocklist, and even if I turn on gfx.webgpu.ignore-blocklist.

embedding-shape•2h ago
Works for me with 146.0.1 (Linux) and having dom.webgpu.enabled set to true.
tonyplee•1h ago
Works for me too 145/Windows - default settings.

Very cool project. Thanks!!!

jsheard•2h ago
Which platform? I think FF has only shipped WebGPU on Windows so far.
pier25•1h ago
FF has partial support for WebGPU

https://caniuse.com/webgpu

justplay•2h ago
Amazing. I can't express how thankful I am for you building this.
embedding-shape•2h ago
Fun benchmark :) I'm getting 165 fps (screen refresh rate), 4.5-5.0 in GPU time and 1.0 - 1.2 in CPU time on a 9970x + RTX Pro 6000. Definitely the smoothest graph viewer I've used in a browser with that amount of data, nicely done!

Would be great if you had a button there one can press, and it does a 10-15 second benchmark then print a min/max report, maybe could even include loading/unloading the data in there too, so we get some ranges that are easier to share, and can compare easier between machines :)

huntergemmer•1h ago
165 fps on that setup - that's awesome to hear! Thanks for testing on high-end hardware.

Love the benchmark button idea. A "Run Benchmark" mode that captures: - Load time - GPU time - CPU time - Min/max/avg FPS over 10-15 seconds - Hardware info

Then export a shareable summary or even a URL with encoded results. Would make for great comparison threads.

Adding this to the roadmap - would make a great v0.2 feature. Thanks for the suggestion!

zamadatix•1h ago
Just to emphasize how good the performance is, I get 34.7 FPS on the Million Points demo... with sampling disabled and fully zoomed out!!!
dvh•2h ago
Doesn't work on my Android phone because no GPU (but I have webgl is that not enough?)
embedding-shape•2h ago
You have a GPU, and you have WebGL but what's missing is WebGPU support, the latest way of doing GPU-stuff in browsers.
PxldLtd•2h ago
https://caniuse.com/webgpu latest Android Chrome should have WebGPU support. You might need to update.
ivanjermakov•1h ago
You have as much GPU as you have Web.
bhouston•1h ago
Here is the breakdown of WebGPU support across various devices: https://web3dsurvey.com/webgpu
facontidavide•2h ago
Cool to see that this project started 5 days ago! Unfortunately, I can not make it work on my system (Ubuntu, chrome, WebGPU enabled as described in the documentation). On the other hand, It works on my Android phone...

Funny enough, I am doing something very similar: a C++ portable (Windows, Linux MacOS) charting library, that also compile to WASM and runs in the browser...

I am still at day 2, so see you in 3 days, I guess!

ivanjermakov•1h ago
I was able to make WebGPU work (and work well!) in Chrome Linux by enabling Vulkan renderer in Chrome flags.
dapperdrake•2h ago
When did WebGPU become good enough at compute shaders? When I tried and failed at digging through the spec about a year ago it was very touch and go.

Maybe am just bad at reading specifications or finding the right web browser.

embedding-shape•1h ago
In Chromium it's been good for a good while, judges still out on when it'll be good in Firefox. Safari I have no clue about, nor whatever Microsoft calls their browser today.
acedTrex•1h ago
Both a .cursor AND a .claude folder, what a yikes. Slop post galore
embedding-shape•1h ago
Why don't you judge the results, if the slop is so easy to detect, instead of using the mere indication of a particular tool to mean it's slop? Lazy.
acedTrex•1h ago
Because it is not reasonable to expend high effort to verify something that took no effort to create. That is not a workable long term solution. Instead you have to rely on low effort signals to signify if something is WORTH expending energy on.
embedding-shape•1h ago
I didnt read your comment, because it would take me longer than just writing: your comment looks like LLM slop.
acedTrex•1h ago
If thats your signal then you lock yourself out of all parts of this website, not the best heuristic
embedding-shape•49m ago
Yeah, that'd be stupid right? I have the same mindset with projects and code. If it's a good project, it's a good project, I don't care what IDE they used. If the code is shit it's shit regardless of how it was produced.
keepamovin•1h ago
Agree, but, ah, can you illuminate. <totally-offtopic data-but="i am intesnely curious"> Quite amazing 6000 points in under 3 months. Yuge. OK a few almost 1K posts, but they drop off. You must have some mega-point comments. Can you, eh, "point me" to a comment of yours that has a super amount of upvotes?

Sorry if this is weird, it's just I've never personally experienced a comment with anything more than 100 - 200 points. And that was RARE. I totally get if you don't want to...but like, what were your "kilopoint" comments, or thereabouts? </offtopic>

embedding-shape•54m ago
Yeah, thanks for giving me a reality-check on my HN addiction, really need to put back my original /etc/hosts file it seems :|

So, apparently these are my five most upvoted comments (based on going through the first 100 pages of my own comments...):

- 238 - https://news.ycombinator.com/item?id=46574664 - Story: Don't fall into the anti-AI hype

- 127 - https://news.ycombinator.com/item?id=46114263 - Story: Mozilla's latest quagmire

- 92 - https://news.ycombinator.com/item?id=45900337 - Story: Yt-dlp: External JavaScript runtime now required f...

- 78 - https://news.ycombinator.com/item?id=46056395 - Story: I don't care how well your "AI" works

- 73 - https://news.ycombinator.com/item?id=46635212 - Story: The Palantir app helping ICE raids in Minneapolis

I think if you too retire, have nothing specific to do for some months, and have too much free time to discuss with strangers on the internet about a wide range of topics you ideally have strong opinions about, you too can get more HN karma than you know what to do with :)

stephenhumphrey•6m ago
Healthy skepticism is certainly laudable, but too many llmuddites seem rather aggressive while whistling past their own graveyards.
logicallee•1h ago
.c? what a yikes. I took a quick look at the code and this application doesn't even have any machine code in it, it's just words like "while", "for", "if", "else" and other English words - someone back in 1970s, I'm sure.
facontidavide•1h ago
Soon there will be only 3 factors that we will care about: API (easy to use and integrate), behavior (does it do what I want it to do?) and testability (do I have sufficient guaranty that the code doesn't have errors).

The fact that the code was generated by a human or a machine is less and less important.

acedTrex•1h ago
And how do you verify those three things in a rapid low effort fashion?
mcintyre1994•1h ago
Very cool, I like the variety of demos! On the candle sticks streaming demo (https://chartgpu.github.io/ChartGPU/examples/candlestick-str...), the 1s/5m/15m etc buttons don't seem to do anything
huntergemmer•1h ago
Good catch! Thanks for actually clicking around and finding this - added to my issue tracker.
samradelie•1h ago
Fantasic Hunter, congrats!

I've been looking for a followup to uPlot - Lee who made uPlot is a genius and that tool is so powerful, however I need OffscreenCanvas running charts 100% in worker threads. Can ChartGPU support this?

I started Opus 4.5 rewrite of uPlot to decouple it from DOM reliance, but your project is another level of genius.

I hope there is consideration for running your library 100% in a worker thread ( the data munging pre-chart is very heavy in our case )

Again, congrats!

huntergemmer•1h ago
Thanks! Leon's uPlot is fantastic - definitely an inspiration.

Worker thread support via OffscreenCanvas is a great idea and WebGPU does support it. I haven't tested ChartGPU in a worker context yet, but the architecture should be compatible - we don't rely on DOM for rendering, only for the HTML overlay elements (tooltips, axis labels, legend).

The main work would be: 1. Passing the OffscreenCanvas to the worker 2. Moving the tooltip/label rendering to message-passing or a separate DOM layer

For your use case with heavy data munging, you could also run just the data processing in a worker and pass the processed arrays to ChartGPU on the main thread - that might be a quicker win.

Would you open an issue on GitHub? I'd love to understand your specific workload better. This feels like a v0.2 feature worth prioritizing.

pf1gura•1h ago
I am on the same boat. Current user and a fan of uPlot starting to hit performance limits. Thank you for this library, I will start testing it soon.

On the topic of support for worker threads, in my current project I have multiple data sources, each handled by its own worker. Copying data between worker and main thread - even processed - can be an expensive operation. Avoiding it can further help with performance.

samradelie•8m ago
You have a good point about doing zero copy transferables which would probably work.

There is certainly something beautiful about your charging GPU code being part of a file that runs completely isolated in another thread along with our websocket Data fire hose

Architecturally that could be something interesting where you expose a typed API wrapping postmessage where consumers wanting to bind the main thread to a worker thread could provide the offscreen canvas as well as a stream of normalized, touch and pointer events, keyboard and wheel. Then in your worker listeners could handle these incoming events and treat them as if they were direct from the event listeners on the main thread; effectively, your library is thread agnostic.

I'd be happy to discuss this on GitHub. I'll try to get to that today. See you there.

deburo•1h ago
Nicely done. Will you be able to render 3D donuts? And even animations, say pick a slice & see it tear apart from the donut.
huntergemmer•1h ago
Thanks! Currently focused on 2D charts. That's where the "big data" performance problem is most painful.

3D is coming (it's the same rendering pipeline), but I'd want to get the 2D story solid first before expanding scope.

The slice animation is doable though - we already have animation infrastructure for transitions. An "explode slice on click" effect would be a fun addition to the pie/donut charts.

What's your use case? Dashboard visuals or something else?

mikepurvis•1h ago
I've always been a bit skeptical of JS charting libs that want to bring the entire data to the client and do the rendering there, vs at least having the option to render image tiles on the server and then stream back tooltips and other interactive elements interactively.

However, this is pretty great; there really aren't that many use cases that require more than a million points. You might finally unseat dygraphs as the gold standard in this space.

zozbot234•1h ago
> render image tiles on the server and then stream back tooltips and other interactive elements interactively.

I guess the real draw here is smooth scrolling and zooming, which is hard to do with server-rendered tiles. There's also the case of fully local use, where server rendering doesn't make much sense.

internetter•56m ago
> I've always been a bit skeptical of JS charting libs that want to bring the entire data to the client and do the rendering there, vs at least having the option to render image tiles on the server and then stream back tooltips and other interactive elements interactively.

I agree, unfortunately no library I've found supports this. I currently SSR plots to SVG using observable plot and JSDom [0]. This means there is no javascript bundle, but also no interactivity, and observable doesn't have a method to generate a small JS sidecar to add interactivity. I suppose you could progressive enhance, but plot is dozens of kilobytes that I'd frankly rather not send.

[0] https://github.com/boehs/site/blob/master/conf/templating/ma...

jeffbee•1h ago
The number of points actually being rendered doesn't seem to warrant the webgpu implementation. It's similar to the number of points that cubism.js could throw on the screen 15 years ago.
barrell•1h ago
I just rewrote all the graphs on phrasing [1] to webgl. Mostly because I wanted custom graphs that didn’t look like graphs, but also because I wanted to be able to animate several tens of thousands of metrics at a time.

After the initial setup and learning curve, it was actually very easy. All in all, way less complicated than all the performance hacks I had to do to get 0.01% of the data to render half as smooth using d3.

Although this looks next level. I make sure all the computation happens in a single o(n) loop but the main loop still takes place on the cpu. Very well done

To anyone on the fence, GPU charting seemed crazy to me beforehand (classic overengineering) but it ends up being much simpler (and much much much smoother) than traditional charts!

[1] https://phrasing.app

pier25•1h ago
Very cool. Shame there's not a webgl fallback though. It will be a couple of years until webgpu adoption is good enough.

https://caniuse.com/webgpu

bhouston•1h ago
You can also see extension support for webgpu via https://web3dsurvey.com/webgpu
sroussey•41m ago
It’s available everywhere if you are on newest OS and newest browser.

Biggest issue is MacOS users with newer Safari on older MacOS.

kawogi•19m ago
Support for Firefox on Linux is still only in nightly (unless that changed "very" recently)

This blocks progress (and motivation) on some of my projects.

johndough•34m ago
And even if WebGPU is enabled, the implementation might still be broken or inefficient in various ways. For example, Firefox uses some ridiculous polling-based approach [1] to check for completion, which disqualifies the implementation for many performance-critical applications.

[1] https://bugzilla.mozilla.org/show_bug.cgi?id=1870699

And there is the issue of getting the browser to use the correct GPU in the first place, but that is a different can of worms.

azangru•1h ago
Bug report: there is something wrong with the slider below the chart in the million-points example:

https://chartgpu.github.io/ChartGPU/examples/million-points/...

While dragging, the slider does not stay under the cursor, but instead moves by unexpected distances.

huntergemmer•54m ago
Thanks - you're the second person to report this! Same issue as the Mac M1 scrollbar bug reported earlier.

Looks like the data zoom slider has a momentum/coordinate mapping issue. Bumping this up the priority list since multiple people are hitting it.

virgil_disgr4ce•25m ago
I also experienced this behavior :)
buckle8017•1h ago
WebGPU is a security nightmare.

The idea that GPU vendors are going to care about memory access violations over raw performance is absurd.

the__alchemist•1h ago
Security is one aspect to consider. It's not a veto button!
buckle8017•17m ago
It's absolutely a veto button on something so pervasive.

What is wrong with you JavaScript bros.

amirhirsch•1h ago
Very Nice. There is an issue with panning on the million point demo -- it currently does not redraw until the dragging velocity is below some threshold, but it should seem like the points are just panned into frame. It is probably enough to just get rid of the dragging velocity threshold, but sometimes helps to cache an entire frame around the visible range
hienyimba•56m ago
Right on time.

We’ve been working on a browser-based Link Graph (osint) analysis tool for months now (https://webvetted.com/workbench). The graph charting tools on the market are pretty basic for the kind of charting we are looking to do (think 1000s of connected/disconnected nodes/edges. Being able to handle 1M points is a dream.

This will come in very handy.

huntergemmer•39m ago
That's a cool project! Just checked out the workbench. I should be upfront though: ChartGPU is currently focused on traditional 2D charts (line, bar, scatter, candlestick, etc.), not graph/network visualization with nodes and edges. That said, the WebGPU rendering patterns would translate well to force-directed graphs. The scatter renderer already handles thousands of instanced points - extending that to edges wouldn't be a huge leap architecturally.

Is graph visualization something you'd want as part of ChartGPU, or would a separate "GraphGPU" type library make more sense? Curious how you're thinking about it.

kposehn•36m ago
Agreed. This is highly, highly useful. Going to integrate this today.
wesammikhail•26m ago
my 2 cents: I'm one of these people that could possibly use your tool. However, the website doesnt give me much info. I'd urge you to add some more pages that showcase the product and what it can do with more detail. Would help capture more people imo.
rgreen•44m ago
this is so well done, thanks for sharing it. i've been trying to communicate with people how we are living in the golden age of dev where things that previously couldn't have been created, now can be. this is an amazing example of that.
lacoolj•40m ago
Doesn't work for me? Latest chrome, RTX 4080, what am I missing?
cuvinny•16m ago
I had to enable it in both Firefox (about:config search webgpu) and in Chrome (chrome://flags and enable Unsafe WebGPU Support) on my linux machine.
33a•39m ago
plot.ly has been able to do WebGL scatter plots with > 10 million points for years. There's a lot of libraries that can do this I think?

https://plotly.com/python/performance/

pdyc•35m ago
Wow, this is great. I practically gave up on rendering large data in EasyAnalytica because plotting millions of points becomes a bad experience, especially in dashboards with multiple charts. My current solution is to downsample to give an “overview” and use zoom to allow viewing “detailed” data, but that code is fragile.

One more issue is that some browser and OS combinations do not support WebGPU, so we will still have to rely on existing libraries in addition to this, but it feels promising.

KellyCriterion•26m ago
Curious: How does TradingView et.al. solves this problem? They should have the same limitations? (actually, Im a user of the site, though I never started digging down how they made id)
artursapek•12m ago
Tradingview’s charts couldn’t handle a million data points. They typically just render a few thousand candlesticks at a time, which is trivial with well optimized Canvas code.
jhatemyjob•20m ago
I don't really care about this, like at all. But I just wanted to say, that's an amazing name. Well done.

Show HN: ChartGPU – WebGPU-powered charting library (1M points at 60fps)

https://github.com/ChartGPU/ChartGPU
206•huntergemmer•2h ago•76 comments

Show HN: yolo-cage – AI coding agents that can't exfiltrate secrets

https://github.com/borenstein/yolo-cage
22•borenstein•2h ago•40 comments

Show HN: Rowboat – Open-Source Claude Cowork with an Obsidian Vault

https://www.rowboatlabs.com/
4•segmenta•18m ago•0 comments

Show HN: Mastra 1.0, open-source JavaScript agent framework from the Gatsby devs

https://github.com/mastra-ai/mastra
201•calcsam•1d ago•65 comments

Show HN: I made a roguelike game playable over SSH

https://dev-dungeon.com
6•viiralvx•2h ago•1 comments

Show HN: Abuse URL shorteners to host throwaway webpages

3•fainpul•3h ago•0 comments

Show HN: Agent Skills Leaderboard

https://skills.sh
116•andrewqu•20h ago•39 comments

Show HN: TopicRadar – Track trending topics across HN, GitHub, ArXiv, and more

https://apify.com/mick-johnson/topic-radar
33•MickolasJae•1d ago•9 comments

Show HN: Oauth2-forwarder – web oauth2 for dev containers

https://github.com/sam-mfb/oauth2-forwarder
3•sam256•4h ago•0 comments

Show HN: I built a narrative game about running a thrift shop

https://store.steampowered.com/app/2961120/Shop_Crush/
7•hollowlimb•3h ago•0 comments

Show HN: Should I kill my side project?

https://naeemnur.com/should-i-kill-my-side-project/
2•naeemnur•4h ago•0 comments

Show HN: Generate animated solar system timelapse videos for any date range

https://github.com/simondorfman/solar_system_live/
7•SimonDorfman•12h ago•0 comments

Show HN: Ocrbase – pdf → .md/.json document OCR and structured extraction API

https://github.com/majcheradam/ocrbase
94•adammajcher•1d ago•34 comments

Show HN: Citizen Water Signal – A tool to make tap water issues visible (India)

https://www.citizensignal.site
2•eskimo87•6h ago•0 comments

Show HN: I figured out how to get consistent UI from Claude Code

https://interface-design.dev/
24•Dammyjay93•17h ago•8 comments

Show HN: Fence – Sandbox CLI commands with network/filesystem restrictions

https://github.com/Use-Tusk/fence
25•jy-tan•23h ago•4 comments

Show HN: On-device browser agent (Qwen) running locally in Chrome

https://github.com/RunanywhereAI/on-device-browser-agent
18•sanchitmonga•20h ago•3 comments

Show HN: Aventos – An experiment in cheap AI SEO

https://www.aventos.dev/
18•JimsonYang•5d ago•10 comments

Show HN: RobyGraph – A graph strategy game to program AI agents in the browser

https://www.yfiles.com/robygraph
4•buesra•8h ago•1 comments

Show HN: An interactive physics simulator with 1000’s of balls, in your terminal

https://github.com/minimaxir/ballin
71•minimaxir•1d ago•15 comments

Show HN: Parallel Agentic Search on the Twitter Algorithm

https://www.morphllm.com/playground/na/warpgrep?repo=xai-org%2Fx-algorithm
11•bhaktatejas922•18h ago•0 comments

Show HN: Subth.ink – write something and see how many others wrote the same

https://subth.ink/
86•sonnig•1d ago•48 comments

Show HN: Artificial Ivy in the Browser

https://da.nmcardle.com/grow
96•dnmc•1d ago•16 comments

Show HN: Pipenet – A Modern Alternative to Localtunnel

https://pipenet.dev/
114•punkpeye•2d ago•19 comments

Show HN: LLM fine-tuning without infra or ML expertise

https://www.tinytune.xyz/
4•Jacques2Marais•9h ago•3 comments

Show HN: SKILL.md Hub

https://openskills.space
4•onurkanbkrc•10h ago•2 comments

Show HN: Lume 0.2 – Build and Run macOS VMs with unattended setup

https://cua.ai/docs/lume/guide/getting-started/introduction
147•frabonacci•2d ago•42 comments

Show HN: E80: an 8-bit CPU in structural VHDL

https://github.com/Stokpan/E80
33•Axonis•3d ago•2 comments

Show HN: Movieagent.io – An agent for movie recommendations (with couple mode)

https://movieagent.io
25•roknovosel•1d ago•5 comments

Show HN: A creative coding library for making art with desktop windows

https://github.com/willmeyers/window-art
35•willmeyers•1d ago•5 comments