[{"data":1,"prerenderedAt":870},["ShallowReactive",2],{"project-46706528":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":35,"aspects":36,"strip":51,"post_text":53,"what":54,"said":78,"maker_in_thread":216,"shape":228,"grid":232,"attempts":829,"same_week":834,"maker_shows":18,"maker_hidden":863,"reader_version":864,"card":865},"46706528","ChartGPU","WebGPU-powered charting library (1M points at 60fps)","title","Show HN: ChartGPU – WebGPU-powered charting library (1M points at 60fps)","https:\u002F\u002Fgithub.com\u002FChartGPU\u002FChartGPU","github.com","huntergemmer",1769007296,2026,670,214,27,4366,1,"legend","data","charting library","library",[24,25,26,27],"webgpu charting","javascript chart library","large dataset visualization","gpu charts","mixed",-0.23,{"positive":31,"neutral":32,"mixed":33,"critical":34},21,44,3,47,115,{"performance":37,"design":40,"idea":42,"execution":45,"docs":47,"privacy":49,"pricing":50},{"positive":38,"critical":39},4,9,{"positive":41,"critical":33},2,{"positive":43,"critical":44},8,6,{"positive":33,"critical":46},17,{"positive":48,"critical":41},0,{"positive":48,"critical":33},{"positive":48,"critical":48},[18,33,33,33,33,18,18,33,52,52,18,18,18,41,48,33,41,18,18,33,18,38,38,38,18,18,18,41,18,33,33,52,18,41,41,38,33,18,48,18],5,"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.\n\nThe 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:\n\n- LTTB downsampling runs as a compute shader\n- Hit-testing for tooltips\u002Fhover is GPU-accelerated\n- Rendering uses instanced draws (one draw call per series)\n\nThe result: 1M points at 60fps with smooth zoom\u002Fpan.\n\nLive demo: https:\u002F\u002Fchartgpu.github.io\u002FChartGPU\u002Fexamples\u002Fmillion-points\u002F\n\nCur",{"problem":55,"audience":61,"pricing":61,"motivation":62,"time_to_build":61,"stack":66,"openness":75,"stage":76,"team_size":77},{"value":56,"source":57,"evidence":58},"Charting libraries become slow past 100K data points","maker",[59],{"id":60},"post",null,{"value":63,"source":57,"evidence":64},"Existing charting libraries are too slow at scale",[65],{"id":60},[67,71],{"value":68,"source":57,"evidence":69},"WebGPU",[70],{"id":60},{"value":72,"source":57,"evidence":73},"npm package",[74],{"id":60},"open_source","beta","unknown",{"praise":79,"objections":104,"requests":153,"questions":176,"alternatives":192},[80,96],{"value":81,"source":82,"evidence":83},"Very smooth performance with large datasets","commenter",[84,88,92],{"id":85,"by":86,"text":87},"46706684","keepamovin","Wa, this is smooth, man. This is so cool. This is really sexy and cool, the examples page (https:\u002F\u002Fchartgpu.github.io\u002FChartGPU\u002Fexamples\u002Findex.html) has many good. I hope you have…",{"id":89,"by":90,"text":91},"46707049","embedding-shape","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…",{"id":93,"by":94,"text":95},"46707654","barrell","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…",{"value":97,"source":82,"evidence":98},"Impressive demos and examples",[99,100],{"id":85,"by":86,"text":87},{"id":101,"by":102,"text":103},"46713633","popalchemist","Impressive! Most impressive.",[105,120,135,142],{"value":106,"source":82,"evidence":107},"Browser support is limited, no Firefox or Safari support",[108,112,116],{"id":109,"by":110,"text":111},"46707023","ranger_danger","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…",{"id":113,"by":114,"text":115},"46710223","elAhmo","Safari on latest Sequoia doesn't support this. Given that many people will not upgrade to the latest version, it is a shame Safari is behind these things.",{"id":117,"by":118,"text":119},"46707704","pier25","Very cool. Shame there's not a webgl fallback though. It will be a couple of years until webgpu adoption is good enough. https:\u002F\u002Fcaniuse.com\u002Fwebgpu",{"value":121,"source":82,"evidence":122},"Demos fail on machines without a compatible GPU adapter",[123,127,131],{"id":124,"by":125,"text":126},"46709153","altern8","All charts in the demo failed for me. Error message: \"WebGPU Error: Failed to request WebGPU adapter. No compatible adapter found. This may occur if no GPU is available or WebGPU…",{"id":128,"by":129,"text":130},"46707059","dvh","Doesn't work on my Android phone because no GPU (but I have webgl is that not enough?)",{"id":132,"by":133,"text":134},"46708306","lacoolj","Doesn't work for me? Latest chrome, RTX 4080, what am I missing?",{"value":136,"source":82,"evidence":137},"LTTB sampling can remove important peaks",[138],{"id":139,"by":140,"text":141},"46709415","leeoniya","uPlot maintainer here. this looks interesting, i'll do a deeper dive soon :) some notes from a very brief look at the 1M demo: - sampling has a risk of eliminating important…",{"value":143,"source":82,"evidence":144},"Slider drag behaves incorrectly on macOS",[145,149],{"id":146,"by":147,"text":148},"46707865","azangru","Bug report: there is something wrong with the slider below the chart in the million-points example: https:\u002F\u002Fchartgpu.github.io\u002FChartGPU\u002Fexamples\u002Fmillion-points\u002Findex.html While…",{"id":150,"by":151,"text":152},"46706835","d--b","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.",[154,158,165,172],{"value":155,"source":82,"evidence":156},"Add a fallback for browsers without WebGPU",[157],{"id":117,"by":118,"text":119},{"value":159,"source":82,"evidence":160},"Support running in a web worker with OffscreenCanvas",[161],{"id":162,"by":163,"text":164},"46707473","samradelie","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…",{"value":166,"source":82,"evidence":167},"Add stacked area chart support",[168],{"id":169,"by":170,"text":171},"46716158","hdjrudni","Does this support stacked area charts? Like https:\u002F\u002Frecharts.github.io\u002Fen-US\u002Fexamples\u002FStackedAreaChart\u002F ? That's what I'm using now but I gave it too much data and it takes like…",{"value":173,"source":82,"evidence":174},"Fix idle CPU usage when chart is static",[175],{"id":139,"by":140,"text":141},[177,185],{"value":178,"source":82,"evidence":179},"Does it work in a web worker or with streaming data?",[180,181],{"id":162,"by":163,"text":164},{"id":182,"by":183,"text":184},"46708886","smusamashah","Can it scroll while populating? I was trying to heart rate chart using libs which is captured at 60fps from camera (finger on camera with flash light). Raw drawing with canvas…",{"value":186,"source":82,"evidence":187},"Will it support Vega as a renderer?",[188],{"id":189,"by":190,"text":191},"46710417","akdor1154","The rendering is very cool, but what i really want is this as a renderer i can plug into Vega. Vega\u002FVGlite have amazing charting expressivity in their spec language, most other…",[193,198,205,212],{"value":194,"source":82,"evidence":195},"uPlot",[196,197],{"id":139,"by":140,"text":141},{"id":162,"by":163,"text":164},{"value":199,"source":82,"evidence":200},"Plotly",[201],{"id":202,"by":203,"text":204},"46708319","33a","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:\u002F\u002Fplotly.com\u002Fpython\u002Fperformance\u002F",{"value":206,"source":82,"evidence":207},"dygraphs",[208],{"id":209,"by":210,"text":211},"46707539","mikepurvis","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…",{"value":213,"source":82,"evidence":214},"d3",[215],{"id":93,"by":94,"text":95},{"comments":217,"answered":52,"key":218},20,[219,222,225],{"id":220,"text":221},"46709531","Really appreciate you taking the time to look, Leon - uPlot has been a huge inspiration for proving that browser charts don't have to be slow. Both points are fair: 1. LTTB peak…",{"id":223,"text":224},"46720141","Down. Hit me up! https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fhuntergemmer\u002F",{"id":226,"text":227},"46710438","Interesting idea - I haven't explored wavelet-based approaches but the intuition makes sense: decompose into frequency bands, keep the low-frequency trend, and selectively…",{"commenters":229,"max_depth":39,"maker_replies":217,"first_comment_mins":230,"lifespan_hours":231},123,11,189,[233,235,239,241,243,247,248,252,254,256,258,260,262,264,268,271,275,278,280,283,286,290,293,295,298,300,303,305,309,312,314,316,318,320,322,326,328,331,334,336,338,340,342,345,348,351,353,356,358,360,362,365,369,372,376,380,383,387,390,393,395,398,399,402,406,408,412,416,420,423,426,427,431,433,436,440,443,445,448,450,452,454,456,459,462,464,466,469,473,476,480,484,488,489,492,495,498,502,505,508,510,514,516,518,520,522,524,527,530,532,534,536,540,542,544,547,548,551,553,556,559,563,565,567,570,572,574,577,581,583,585,589,592,594,596,599,601,603,606,609,612,614,616,619,623,627,631,635,638,640,644,646,648,651,655,658,662,666,668,672,676,680,684,687,688,691,695,699,703,706,711,715,717,719,721,724,726,728,732,736,740,744,748,750,753,755,759,762,764,766,768,770,772,775,777,779,783,787,791,793,795,797,799,801,803,805,808,810,813,815,817,821,825,827],[139,48,33,234,140,48],"project\u002Fmixed\u002Fperformance",[236,48,48,237,238,48],"46709511","commenter\u002Fneutral\u002Fnone","aurbano",[240,48,48,237,140,48],"46711082",[220,48,48,242,11,18],"maker\u002Fneutral\u002Fperformance",[244,48,18,245,246,48],"46719109","project\u002Fcritical\u002Fdesign","dapperdrake",[223,48,48,237,11,18],[249,48,33,250,251,48],"46710216","project\u002Fneutral\u002Fidea","vlovich123",[226,48,48,253,11,18],"maker\u002Fneutral\u002Fidea",[255,48,33,250,251,48],"46713187",[257,48,48,237,246,48],"46719152",[259,48,33,250,246,48],"46719148",[261,48,48,237,251,48],"46740942",[263,48,48,237,246,48],"46719134",[265,48,33,266,267,48],"46711465","project\u002Fneutral\u002Fperformance","sarusso",[269,48,33,266,270,48],"46712759","olau",[272,48,48,273,274,48],"46713429","other\u002Fneutral\u002Fnone","PaulDavisThe1st",[276,48,48,277,140,48],"46713996","commenter\u002Fneutral\u002Fperformance",[279,48,48,237,140,48],"46714011",[281,48,48,237,282,48],"46715288","ghc",[284,48,52,285,246,48],"46719124","project\u002Fpositive\u002Fidea",[287,48,18,288,289,48],"46714286","project\u002Fcritical\u002Fidea","Cabal",[291,48,48,273,292,48],"46715567","apitman",[294,48,48,273,246,48],"46719162",[296,48,18,245,297,48],"46716484","Bengalilol",[299,48,48,237,246,48],"46719175",[301,18,52,285,302,48],"46708855","zokier",[304,18,48,253,11,18],"46709094",[306,18,18,307,308,48],"46709568","project\u002Fcritical\u002Fexecution","akomtu",[310,18,48,237,311,48],"46710298","vanderZwan",[313,18,48,237,308,48],"46710849",[315,18,48,237,311,48],"46716941",[317,18,48,237,308,48],"46725151",[319,18,48,237,311,48],"46731654",[321,18,48,237,308,48],"46736631",[323,18,18,324,325,48],"46710347","project\u002Fcritical\u002Fperformance","MindSpunk",[327,18,18,324,308,48],"46710899",[329,18,48,237,330,48],"46712566","dheera",[332,18,48,237,333,48],"46715332","rustystump",[335,18,48,237,330,48],"46715738",[337,18,48,237,333,48],"46716579",[339,18,48,237,246,48],"46719211",[341,18,33,250,140,48],"46709704",[343,18,48,237,344,48],"46716640","jsmailes",[346,18,33,347,246,48],"46719197","project\u002Fneutral\u002Fdesign",[349,41,52,285,350,48],"46708103","hienyimba",[352,41,48,253,11,18],"46708326",[354,41,52,285,355,48],"46709000","agentcoops",[357,41,48,253,11,18],"46709286",[359,41,52,285,355,48],"46709598",[361,41,48,253,11,18],"46710562",[363,41,48,237,364,48],"46711354","graphviz",[366,41,52,367,368,48],"46708359","project\u002Fpositive\u002Fnone","kposehn",[370,41,48,371,11,18],"46709383","maker\u002Fneutral\u002Fnone",[373,41,18,374,375,48],"46708502","project\u002Fcritical\u002Fdocs","wesammikhail",[377,41,33,378,379,48],"46709254","project\u002Fneutral\u002Fnone","MeteorMarc",[381,41,48,273,382,48],"46713867","losteric",[384,41,48,385,386,48],"46714243","other\u002Fneutral\u002Fperformance","lmeyerov",[388,41,48,273,389,48],"46716399","kqr",[391,33,48,392,11,18],"46712941","maker\u002Fpositive\u002Fperformance",[394,38,48,392,11,18],"46715091",[396,38,18,307,397,48],"46716386","mcintyre1994",[146,52,18,307,147,48],[400,52,48,401,11,18],"46708121","maker\u002Fneutral\u002Fexecution",[403,52,48,404,405,48],"46708508","commenter\u002Fneutral\u002Fexecution","virgil_disgr4ce",[93,44,52,407,94,48],"project\u002Fpositive\u002Fexecution",[409,410,18,324,411,48],"46710640",7,"tempaccsoz5",[413,410,18,414,415,48],"46710710","project\u002Fcritical\u002Fnone","kshri24",[417,410,18,418,419,48],"46711008","maker\u002Fcritical\u002Fnone","bobmoretti",[421,410,18,418,422,48],"46711010","janice1999",[424,43,18,324,425,48],"46709611","yogitakes",[202,39,18,288,203,48],[428,429,33,371,430,48],"46709402",10,"marginalx",[209,230,33,432,210,48],"project\u002Fmixed\u002Fidea",[434,230,33,266,435,48],"46707610","zozbot234",[437,230,48,438,439,48],"46708095","other\u002Fneutral\u002Fidea","internetter",[441,230,48,273,442,48],"46709294","switz",[444,230,48,273,210,48],"46711221",[446,230,48,438,447,48],"46709318","tomjakubowski",[449,230,48,273,246,48],"46719325",[451,230,48,273,246,48],"46719316",[109,453,33,378,110,48],12,[455,453,33,378,90,48],"46707092",[457,453,52,367,458,48],"46707536","tonyplee",[460,453,33,378,461,48],"46707169","jsheard",[463,453,18,414,110,48],"46709067",[465,453,33,378,118,48],"46707690",[467,453,33,378,468,48],"46709040","call_to_action",[470,471,48,385,472,48],"46710811",13,"volkercraig",[474,475,48,401,11,18],"46711258",14,[477,478,18,324,479,48],"46809144",15,"abtgraphics",[481,482,18,418,483,48],"46715768",16,"Tiberium",[485,482,33,486,487,48],"46720006","maker\u002Fmixed\u002Fnone","deepfriedrice",[117,46,18,414,118,48],[490,46,48,273,491,48],"46707719","bhouston",[493,46,48,273,494,48],"46708290","sroussey",[496,46,48,273,497,48],"46708599","kawogi",[499,46,18,500,501,48],"46709200","project\u002Fcritical\u002Fprivacy","Joeboy",[503,46,18,324,504,48],"46708397","johndough",[506,46,18,500,507,48],"46712207","m132",[509,46,48,273,246,48],"46719365",[511,512,33,266,513,48],"46712257",18,"SeasonalEnnui",[515,512,48,385,270,48],"46712825",[517,512,48,385,513,48],"46718472",[519,512,48,385,246,48],"46719352",[521,512,48,385,333,48],"46715378",[523,512,48,385,386,48],"46715604",[525,512,33,266,526,48],"46715811","shunia_huang",[528,512,48,385,529,48],"46720882","fulafel",[531,512,48,385,513,48],"46723272",[533,512,48,273,529,48],"46728377",[535,512,48,385,513,48],"46730255",[537,538,18,288,539,48],"46707588",19,"jeffbee",[89,217,52,541,90,48],"project\u002Fpositive\u002Fperformance",[543,217,48,242,11,18],"46707820",[545,217,52,541,546,48],"46708033","zamadatix",[124,31,18,414,125,48],[549,31,48,273,550,48],"46709189","kettlecorn",[552,31,33,378,125,48],"46710110",[554,31,33,378,555,48],"46711512","mahkoh",[557,31,33,378,558,48],"46721939","mholt",[560,561,52,541,562,48],"46708380",22,"pdyc",[162,564,52,407,163,48],23,[566,564,48,401,11,18],"46707660",[568,564,52,407,569,48],"46708038","pf1gura",[571,564,33,347,163,48],"46708729",[573,564,33,378,163,48],"46712149",[575,564,33,576,333,48],"46715397","project\u002Fneutral\u002Fexecution",[578,579,48,273,580,48],"46716174",24,"ColinEberhardt",[169,582,33,378,170,48],25,[584,582,48,371,11,18],"46720385",[586,587,18,307,588,48],"46707186",26,"facontidavide",[590,587,33,576,591,48],"46707420","ivanjermakov",[593,16,18,307,397,48],"46707452",[595,16,48,371,11,18],"46707566",[597,16,18,245,598,48],"46714782","fourthark",[150,600,18,307,151,48],28,[602,600,48,401,11,18],"46706898",[604,600,18,307,605,48],"46707259","abuldauskas",[607,600,18,307,608,48],"46707377","qayxc",[610,600,18,307,611,48],"46707414","monegator",[613,600,18,307,210,48],"46707468",[182,615,33,266,183,48],29,[617,615,33,378,618,48],"46709405","Mogzol",[620,621,18,288,622,48],"46708845",30,"imiric",[624,625,18,288,626,48],"46716825",31,"niilokeinanen",[628,629,18,374,630,48],"46708579",32,"dfortes",[632,633,33,576,634,48],"46718103",33,"utf_8x",[636,637,33,378,246,48],"46707196",34,[639,637,33,576,90,48],"46707302",[641,642,33,250,643,48],"46709011",35,"mitdy",[113,645,18,307,114,48],36,[647,645,48,273,246,48],"46719375",[649,650,48,273,246,48],"46719289",37,[652,653,18,324,654,48],"46711224",38,"dangoodmanUT",[656,657,48,273,588,48],"46721753",39,[659,660,52,285,661,48],"46713404",40,"reactordev",[663,664,48,273,665,48],"46716552",41,"buibuibui",[667,664,48,273,246,48],"46719334",[669,670,33,250,671,48],"46712604",42,"kirilln0v",[673,674,18,324,675,48],"46707943",43,"amirhirsch",[677,32,33,678,679,48],"46719960","project\u002Fneutral\u002Fdocs","akst",[681,682,52,285,683,48],"46708584",45,"jhatemyjob",[685,686,18,307,558,48],"46721924",46,[189,34,33,250,190,48],[689,34,48,273,690,48],"46710549","Moosdijk",[692,693,52,285,694,48],"46708256",48,"rgreen",[696,697,52,367,698,48],"46707032",49,"justplay",[700,701,48,273,702,48],"46708489",50,"KellyCriterion",[704,701,48,385,705,48],"46708677","artursapek",[707,708,52,709,710,48],"46712404",51,"project\u002Fpositive\u002Fdesign","rzmmm",[712,713,33,347,714,48],"46707523",52,"deburo",[716,713,48,371,11,18],"46707858",[128,718,18,307,129,48],53,[720,718,48,237,90,48],"46707071",[722,718,48,404,723,48],"46707203","PxldLtd",[725,718,48,237,591,48],"46707435",[727,718,48,237,491,48],"46707732",[729,730,33,266,731,48],"46711056",54,"Andr2Andr",[733,734,18,307,735,48],"46711391",55,"kayson",[737,738,33,378,739,48],"46713131",56,"nova3000",[741,742,33,378,743,48],"46710098",57,"escapecharacter",[745,746,52,709,747,48],"46710105",58,"btbuildem",[132,749,18,307,133,48],59,[751,749,33,576,752,48],"46708636","cuvinny",[754,749,48,237,133,48],"46738166",[756,757,18,324,758,48],"46711062",60,"mdulcio",[760,761,18,307,333,48],"46715482",61,[85,763,52,541,86,48],62,[765,763,48,371,11,18],"46706851",[767,763,33,250,723,48],"46707172",[769,763,48,250,11,18],"46719834",[771,763,33,250,723,48],"46722275",[773,763,33,774,86,48],"46728290","project\u002Fneutral\u002Fpricing",[776,763,33,774,723,48],"46745091",[101,778,52,367,102,48],63,[780,781,33,250,782,48],"46716737",64,"lelanthran",[784,785,18,288,786,48],"46778321",65,"Leonida5",[788,789,18,307,790,48],"46707274",66,"acedTrex",[792,789,48,237,90,48],"46707283",[794,789,48,237,790,48],"46707336",[796,789,48,237,90,48],"46707709",[798,789,48,237,790,48],"46708014",[800,789,48,237,90,48],"46708187",[802,789,48,273,86,48],"46707774",[804,789,48,273,90,48],"46708124",[806,789,48,273,807,48],"46708749","stephenhumphrey",[809,789,48,273,90,48],"46708835",[811,789,48,273,812,48],"46707562","logicallee",[814,789,48,273,588,48],"46707986",[816,789,48,237,790,48],"46708020",[818,819,18,500,820,48],"46707935",67,"buckle8017",[822,819,48,823,824,48],"46707960","commenter\u002Fneutral\u002Fprivacy","the__alchemist",[826,819,48,823,820,48],"46708624",[828,819,48,273,824,48],"46709431",[830,833],{"id":831,"t":832,"points":44,"comments":48},"46693978",1768927203,{"id":4,"t":12,"points":14,"comments":15},[835,840,845,850,855,860],{"id":836,"name":837,"points":838,"category":839},"46713106","Sweep Next-Edit 1.5B",534,"ai",{"id":841,"name":842,"points":843,"category":844},"46673809","Calquio",314,"finance_crypto",{"id":846,"name":847,"points":848,"category":849},"46696283","Coi",225,"languages",{"id":851,"name":852,"points":853,"category":854},"46709543","Rails UI",208,"dev_tools",{"id":856,"name":857,"points":858,"category":859},"46671952","Dock",177,"productivity",{"id":861,"name":862,"points":858,"category":859},"46675231","Pdfwithlove",false,"v2",{"id":866,"name":5,"line":6,"ai":863,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":29,"top":18,"kw":867,"maker":11,"domain":10,"tier":19,"attempts":41,"strip":868,"url":9,"mix":869,"praise":81,"objection":106,"sub":21},46706528,[24,25,26,27],"1333311355111203211314441112133512243101",[31,32,33,34],1794036690864]