{"slug": "skia", "name": "Skia", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "", "recommenders": 5, "commenters": 15, "warners": 4, "score": 2.519, "rising": -0.31, "first": "2025-11-05", "latest": "2026-09-19", "why": "Most of the big ones are things like skia, harfbuzz, wgpu - all totally reasonable IMO.", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 5, "neutral": 7, "compare": 0, "warn": 4}, "spark": [0, 0, 3, 1, 0, 0, 0, 0, 0, 1, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "Most of the big ones are things like skia, harfbuzz, wgpu - all totally reasonable IMO.", "kind": "", "icon": true, "domain": "skia.org", "github_repo": null, "official_url": "https://skia.org", "pricing": "", "aliases": ["Skia"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 791002944, "item_id": 49437684, "url": "https://news.ycombinator.com/item?id=49437684", "by": "ttd", "date": "2026-08-25", "version": null, "stance": "recommend", "quote": "his other work on polar stroking influenced one of the gpu-accelerated path renderers in Skia", "excerpt": "Pretty sure that earlier work did reach the light of day in the form of a set of GL extensions. Also, his other work on polar stroking influenced one of the gpu-accelerated path renderers in Skia (graphics library powering Chrome and Android, among other things). See e.g. https://source.chromium.org/chromium/chromium/src/+/main:third_party/skia/src/gpu/ganesh/tessellate/GrStrokeTessellationShader.h;l=32 where they re", "context": "", "use_case": "Graphics library", "switched_from": "", "story": "Warnock: Harnessing GPU geometry amplification for vector graphics"}, {"id": 749799825, "item_id": 46862489, "url": "https://news.ycombinator.com/item?id=46862489", "by": "OlympicMarmoto", "date": "2026-02-02", "version": null, "stance": "recommend", "quote": "plenty of libraries like skia", "excerpt": "This is another common excuse. You don't need to use microsoft's or apple's or google's shit UI frameworks. E.g. see https://filepilot.tech/ You can just write all the rendering yourself using metal/gl/dx. if you didn't want to write the rendering yourself there are plenty of libraries like skia, flutter's renderer, nanovg, etc", "context": "", "use_case": "", "switched_from": "", "story": "The Codex App"}, {"id": 746998065, "item_id": 46687379, "url": "https://news.ycombinator.com/item?id=46687379", "by": "simonw", "date": "2026-01-19", "version": null, "stance": "recommend", "quote": "Most of the big ones are things like skia, harfbuzz, wgpu - all totally reasonable IMO.", "excerpt": "One of the big open questions for me right now concerns how library dependencies are used. Most of the big ones are things like skia, harfbuzz, wgpu - all totally reasonable IMO. The two that stand out for me as more notable are html5ever for parsing HTML and taffy for handling CSS grids and flexbox - that's vendored with an explanation of some minor changes here: https://github.com/wilsonzlin/fastrender/blob/19bf103", "context": "", "use_case": "", "switched_from": "", "story": "Scaling long-running autonomous coding"}, {"id": 744542850, "item_id": 46533928, "url": "https://news.ycombinator.com/item?id=46533928", "by": "nicoburns", "date": "2026-01-07", "version": null, "stance": "recommend", "quote": "Skia raster (CPU) gets similarish numbers, which is quite impressive", "excerpt": "It's not a formal benchmark, but my Browser Engine / Webview (https://github.com/DioxusLabs/blitz/) has pluggable rendering backends (via https://github.com/DioxusLabs/anyrender) with Vello (GPU), Vello CPU, Skia (various backends incl. Vulkan, Metal, OpenGL, and CPU) currently implemented On my Apple M1 Pro, the Vello CPU renderer is competitive with the GPU renderers on simple scenes, but falls behind on more compl", "context": "", "use_case": "", "switched_from": "", "story": "Math of Vector graphics on GPU, inspired by piet-GPU"}, {"id": 744391425, "item_id": 46524464, "url": "https://news.ycombinator.com/item?id=46524464", "by": "badlibrarian", "date": "2026-01-07", "version": null, "stance": "recommend", "quote": "Skia of course solved this the right way.", "excerpt": "Author uses a lot of odd, confusing terminology and brings CPU baggage to the GPU creating the worst of both worlds. Shader hacks and CPU-bound partitioning and choosing the Greek letter alpha to be your accumulator in a graphics article? Oh my. NV_path_rendering solved this in 2011. https://developer.nvidia.com/nv-path-rendering It never became a standard but was a compile-time option in Skia for a long time. Skia o", "context": "", "use_case": "", "switched_from": "", "story": "Math of Vector graphics on GPU, inspired by piet-GPU"}]}], "caveats": [{"label": "", "summary": "", "quotes": [{"id": 753715026, "item_id": 47107189, "url": "https://news.ycombinator.com/item?id=47107189", "by": "a_e_k", "date": "2026-02-21", "version": null, "stance": "warn", "quote": "even just building Skia was an annoying chore", "excerpt": "Author here. What a pleasant surprise to see this trending on the front page! (I did post a Show HN at the time of the original release, https://news.ycombinator.com/item?id=33148540, but it never gained traction.) Just to answer some comments that I see: 1. This was absolutely not vibecoded! I'd originally started with a different version control system and was still getting used to Git and GitHub at the time that I", "context": "", "use_case": "", "switched_from": "", "story": "Canvas_ity: A tiny, single-header <canvas>-like 2D rasterizer for C++"}, {"id": 747401666, "item_id": 46712604, "url": "https://news.ycombinator.com/item?id=46712604", "by": "kirilln0v", "date": "2026-01-21", "version": null, "stance": "warn", "quote": "which is good but still utilise CPU for Path rendering", "excerpt": "What do you think about porting it to React Native using https://github.com/wcandillon/react-native-webgpu? How do you think is it possible? Because on RN most of the Graph Libs on CPU or Skia (which is good but still utilise CPU for Path rendering)", "context": "", "use_case": "", "switched_from": "", "story": "Show HN: ChartGPU \u2013 WebGPU-powered charting library (1M points at 60fps)"}, {"id": 744448944, "item_id": 46528059, "url": "https://news.ycombinator.com/item?id=46528059", "by": "cyberax", "date": "2026-01-07", "version": null, "stance": "warn", "quote": "Skia just renders fonts on the CPU with all kinds of hacks", "excerpt": "The major unsolved problem is real-time high-quality text rendering on GPU. Skia just renders fonts on the CPU with all kinds of hacks ( https://skia.org/docs/dev/design/raster_tragedy/ ). It then renders them as textures. Ideally, we want to have as much stuff rendered on the GPU as possible. Ideally with support for glyph layout. This is not at all trivial, especially for complex languages like Devanagari. In the p", "context": "", "use_case": "2D graphics rendering", "switched_from": "", "story": "Math of Vector graphics on GPU, inspired by piet-GPU"}, {"id": 734314673, "item_id": 45894667, "url": "https://news.ycombinator.com/item?id=45894667", "by": "keyle", "date": "2025-11-11", "version": null, "stance": "warn", "quote": "Impeller renderer outperformed Skia", "excerpt": "More info here [1] the big difference is this Predictable performance: Impeller compiles all shaders and reflection offline at build time. It builds all pipeline state objects upfront. The engine controls caching and caches explicitly. or as described here [2] Flutter\u2019s Impeller renderer outperformed Skia. Impeller eliminates runtime shader compilation stalls, delivering lower frame times and more stable performance.", "context": "", "use_case": "", "switched_from": "", "story": ".NET MAUI is coming to Linux and the browser"}]}], "who": [{"by": "pavpanchekha", "context": "last author on the paper", "url": "https://news.ycombinator.com/item?id=49770893", "date": "2026-09-19"}], "tags": [], "use_cases": ["2d graphics library", "graphics library", "canvas2d rendering", "2d graphics rendering"], "compared": [{"slug": "taffy", "name": "Taffy", "co": 3, "switched_from": 0, "switched_to": 0}, {"slug": "avalonia", "name": "Avalonia", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "wgpu", "name": "wgpu", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "blitz", "name": "Blitz", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "vello", "name": "Vello", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "impeller", "name": "Impeller", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=46473247", "title": "Math of Vector graphics on GPU, inspired by piet-GPU", "mentions": 3}, {"url": "https://news.ycombinator.com/item?id=49743934", "title": "Compiler-style optimization for drawing via Skia", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=46686418", "title": "Scaling long-running autonomous coding", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=45893986", "title": ".NET MAUI is coming to Linux and the browser", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=49435781", "title": "Warnock: Harnessing GPU geometry amplification for vector graphics", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47478687", "title": "MAUI Is Coming to Linux", "mentions": 1}], "sentiment_by_month": {"2025-11": {"neutral": 2, "warn": 1}, "2025-12": {"neutral": 1}, "2026-01": {"recommend": 3, "warn": 2, "neutral": 2}, "2026-02": {"recommend": 1, "warn": 1}, "2026-03": {"neutral": 1}, "2026-04": {}, "2026-05": {}, "2026-06": {}, "2026-07": {}, "2026-08": {"recommend": 1}, "2026-09": {"neutral": 1}, "2026-10": {}}, "versions": [], "version_unnamed": 0, "quotes": [{"id": 796334288, "item_id": 49770893, "url": "https://news.ycombinator.com/item?id=49770893", "by": "pavpanchekha", "date": "2026-09-19", "version": null, "stance": "neutral", "quote": "the hard part of this project was being very careful with the semantics of Skia itself", "excerpt": "Last author here, this is very much what I've worked on for most of my career. In this project, I had the idea of optimizing rendering instructions years ago, while I was writing https://browser.engineering/, but the hard part of this project was being very careful with the semantics of Skia itself. It's _super_ easy to write down rewrite rules that _seem_ correct, but are actually only correct when, say, something i", "context": "last author on the paper", "use_case": "", "switched_from": "", "story": "Compiler-style optimization for drawing via Skia"}, {"id": 796333984, "item_id": 49770874, "url": "https://news.ycombinator.com/item?id=49770874", "by": "pavpanchekha", "date": "2026-09-19", "version": null, "stance": "neutral", "quote": "the Skia team at Google was super supportive", "excerpt": "Hi folks! Last author here, happy to answer questions, very surprised to see this on HN. We had a blast working on this. Let me add that the Skia team at Google was super supportive, met with us many times to explain a lot of stuff. I had the idea for this project years ago while writing Web Browser Engineering with Chris Harrelson (see https://browser.engineering/). Then a few years ago I made a first attempt at thi", "context": "", "use_case": "2D graphics library", "switched_from": "", "story": "Compiler-style optimization for drawing via Skia"}, {"id": 791002944, "item_id": 49437684, "url": "https://news.ycombinator.com/item?id=49437684", "by": "ttd", "date": "2026-08-25", "version": null, "stance": "recommend", "quote": "his other work on polar stroking influenced one of the gpu-accelerated path renderers in Skia", "excerpt": "Pretty sure that earlier work did reach the light of day in the form of a set of GL extensions. Also, his other work on polar stroking influenced one of the gpu-accelerated path renderers in Skia (graphics library powering Chrome and Android, among other things). See e.g. https://source.chromium.org/chromium/chromium/src/+/main:third_party/skia/src/gpu/ganesh/tessellate/GrStrokeTessellationShader.h;l=32 where they re", "context": "", "use_case": "Graphics library", "switched_from": "", "story": "Warnock: Harnessing GPU geometry amplification for vector graphics"}, {"id": 759698961, "item_id": 47481185, "url": "https://news.ycombinator.com/item?id=47481185", "by": "CodesInChaos", "date": "2026-03-22", "version": null, "stance": "neutral", "quote": "Avalonia renders through Skia compiled to WebAssembly", "excerpt": "https://avaloniaui.net/platforms/wasm > Avalonia renders through Skia compiled to WebAssembly I'd guess it builds on Skia CanvasKit and renders to an HTML Canvas element. https://skia.org/docs/user/modules/canvaskit/", "context": "", "use_case": "", "switched_from": "", "story": "MAUI Is Coming to Linux"}, {"id": 753715026, "item_id": 47107189, "url": "https://news.ycombinator.com/item?id=47107189", "by": "a_e_k", "date": "2026-02-21", "version": null, "stance": "warn", "quote": "even just building Skia was an annoying chore", "excerpt": "Author here. What a pleasant surprise to see this trending on the front page! (I did post a Show HN at the time of the original release, https://news.ycombinator.com/item?id=33148540, but it never gained traction.) Just to answer some comments that I see: 1. This was absolutely not vibecoded! I'd originally started with a different version control system and was still getting used to Git and GitHub at the time that I", "context": "", "use_case": "", "switched_from": "", "story": "Canvas_ity: A tiny, single-header <canvas>-like 2D rasterizer for C++"}, {"id": 749799825, "item_id": 46862489, "url": "https://news.ycombinator.com/item?id=46862489", "by": "OlympicMarmoto", "date": "2026-02-02", "version": null, "stance": "recommend", "quote": "plenty of libraries like skia", "excerpt": "This is another common excuse. You don't need to use microsoft's or apple's or google's shit UI frameworks. E.g. see https://filepilot.tech/ You can just write all the rendering yourself using metal/gl/dx. if you didn't want to write the rendering yourself there are plenty of libraries like skia, flutter's renderer, nanovg, etc", "context": "", "use_case": "", "switched_from": "", "story": "The Codex App"}, {"id": 749166533, "item_id": 46822908, "url": "https://news.ycombinator.com/item?id=46822908", "by": "Flux159", "date": "2026-01-30", "version": null, "stance": "neutral", "quote": "I did have to get Skia for Canvas2d support", "excerpt": "Hi, thanks! Yeah for controls I'm emulating pointerevents and keydown, keyup from SDL3 inputs & events. The goal is that the same JS that you write for a browser should \"just work\". It's still very alpha, but I was able to get my own WebGPU game engine running in it & have a sponza example that uses the exact key and pointer events to handle WASD / mouse controls: https://mystraldev.itch.io/sponza-in-webgpu-mystral-e", "context": "", "use_case": "Canvas2D rendering", "switched_from": "", "story": "Show HN: Mystral Native \u2013 Run JavaScript games natively with WebGPU (no browser)"}, {"id": 747401666, "item_id": 46712604, "url": "https://news.ycombinator.com/item?id=46712604", "by": "kirilln0v", "date": "2026-01-21", "version": null, "stance": "warn", "quote": "which is good but still utilise CPU for Path rendering", "excerpt": "What do you think about porting it to React Native using https://github.com/wcandillon/react-native-webgpu? How do you think is it possible? Because on RN most of the Graph Libs on CPU or Skia (which is good but still utilise CPU for Path rendering)", "context": "", "use_case": "", "switched_from": "", "story": "Show HN: ChartGPU \u2013 WebGPU-powered charting library (1M points at 60fps)"}, {"id": 746998624, "item_id": 46687414, "url": "https://news.ycombinator.com/item?id=46687414", "by": "sealeck", "date": "2026-01-19", "version": null, "stance": "neutral", "quote": "", "excerpt": "I think the other question is how far away this is from a \"working\" browser. It isn't impossible to render a meaningful subset of HTML (especially when you use external libraries to handle a lot of this). The real difficulty is doing this (a) quickly, (b) correctly and (c) securely. All of those are very hard problems, and also quite tricky to verify. I think this kind of approach is interesting, but it's a bit sad t", "context": "", "use_case": "", "switched_from": "", "story": "Scaling long-running autonomous coding"}, {"id": 746998065, "item_id": 46687379, "url": "https://news.ycombinator.com/item?id=46687379", "by": "simonw", "date": "2026-01-19", "version": null, "stance": "recommend", "quote": "Most of the big ones are things like skia, harfbuzz, wgpu - all totally reasonable IMO.", "excerpt": "One of the big open questions for me right now concerns how library dependencies are used. Most of the big ones are things like skia, harfbuzz, wgpu - all totally reasonable IMO. The two that stand out for me as more notable are html5ever for parsing HTML and taffy for handling CSS grids and flexbox - that's vendored with an explanation of some minor changes here: https://github.com/wilsonzlin/fastrender/blob/19bf103", "context": "", "use_case": "", "switched_from": "", "story": "Scaling long-running autonomous coding"}, {"id": 744542850, "item_id": 46533928, "url": "https://news.ycombinator.com/item?id=46533928", "by": "nicoburns", "date": "2026-01-07", "version": null, "stance": "recommend", "quote": "Skia raster (CPU) gets similarish numbers, which is quite impressive", "excerpt": "It's not a formal benchmark, but my Browser Engine / Webview (https://github.com/DioxusLabs/blitz/) has pluggable rendering backends (via https://github.com/DioxusLabs/anyrender) with Vello (GPU), Vello CPU, Skia (various backends incl. Vulkan, Metal, OpenGL, and CPU) currently implemented On my Apple M1 Pro, the Vello CPU renderer is competitive with the GPU renderers on simple scenes, but falls behind on more compl", "context": "", "use_case": "", "switched_from": "", "story": "Math of Vector graphics on GPU, inspired by piet-GPU"}, {"id": 744448944, "item_id": 46528059, "url": "https://news.ycombinator.com/item?id=46528059", "by": "cyberax", "date": "2026-01-07", "version": null, "stance": "warn", "quote": "Skia just renders fonts on the CPU with all kinds of hacks", "excerpt": "The major unsolved problem is real-time high-quality text rendering on GPU. Skia just renders fonts on the CPU with all kinds of hacks ( https://skia.org/docs/dev/design/raster_tragedy/ ). It then renders them as textures. Ideally, we want to have as much stuff rendered on the GPU as possible. Ideally with support for glyph layout. This is not at all trivial, especially for complex languages like Devanagari. In the p", "context": "", "use_case": "2D graphics rendering", "switched_from": "", "story": "Math of Vector graphics on GPU, inspired by piet-GPU"}, {"id": 744391425, "item_id": 46524464, "url": "https://news.ycombinator.com/item?id=46524464", "by": "badlibrarian", "date": "2026-01-07", "version": null, "stance": "recommend", "quote": "Skia of course solved this the right way.", "excerpt": "Author uses a lot of odd, confusing terminology and brings CPU baggage to the GPU creating the worst of both worlds. Shader hacks and CPU-bound partitioning and choosing the Greek letter alpha to be your accumulator in a graphics article? Oh my. NV_path_rendering solved this in 2011. https://developer.nvidia.com/nv-path-rendering It never became a standard but was a compile-time option in Skia for a long time. Skia o", "context": "", "use_case": "", "switched_from": "", "story": "Math of Vector graphics on GPU, inspired by piet-GPU"}, {"id": 742707249, "item_id": 46419203, "url": "https://news.ycombinator.com/item?id=46419203", "by": "scrivanodev", "date": "2025-12-29", "version": null, "stance": "neutral", "quote": "which uses Skia under the hood", "excerpt": "I also think Qt/QML is a very underrated technology. I have been developing a handwritten notes for Linux/Windows using Qt Quick for quite some time [0]. The experience has been a mixed bag though. I've encountered tons of bugs (many of them still unfixed) that I had to find very ugly workarounds for. Also, while a declarative style UI language can have a lot of benefits, it does have a lot of limitations. For exampl", "context": "", "use_case": "", "switched_from": "", "story": "Developing a Beautiful and Performant Block Editor in Qt C++ and QML"}, {"id": 734341154, "item_id": 45896322, "url": "https://news.ycombinator.com/item?id=45896322", "by": "breve", "date": "2025-11-11", "version": null, "stance": "neutral", "quote": "is Avalonia using Skia to render inside a Skia Canvas?", "excerpt": "> On the Web, is Avalonia using Skia to render inside a Skia Canvas? Yes. They're also looking at offering Impeller as a render option: https://avaloniaui.net/blog/avalonia-partners-with-google-s-flutter-t-eam-to-bring-impeller-rendering-to-net", "context": "", "use_case": "", "switched_from": "", "story": ".NET MAUI is coming to Linux and the browser"}, {"id": 734314673, "item_id": 45894667, "url": "https://news.ycombinator.com/item?id=45894667", "by": "keyle", "date": "2025-11-11", "version": null, "stance": "warn", "quote": "Impeller renderer outperformed Skia", "excerpt": "More info here [1] the big difference is this Predictable performance: Impeller compiles all shaders and reflection offline at build time. It builds all pipeline state objects upfront. The engine controls caching and caches explicitly. or as described here [2] Flutter\u2019s Impeller renderer outperformed Skia. Impeller eliminates runtime shader compilation stalls, delivering lower frame times and more stable performance.", "context": "", "use_case": "", "switched_from": "", "story": ".NET MAUI is coming to Linux and the browser"}, {"id": 733249429, "item_id": 45828089, "url": "https://news.ycombinator.com/item?id=45828089", "by": "nicoburns", "date": "2025-11-05", "version": null, "stance": "neutral", "quote": "additional Skia and CPU backends", "excerpt": "Yes, we've deliberately tried to make use of existing libraries (either from other browser engines or general purpose libraries) where possible. The main thing we pull in from Servo (which is also shared with Firefox) is the Stylo CSS engine, which is a really fantastic piece of software (although underdocumented - a situtation I am trying to improve). I was recently able to add support for CSS transitions and animat", "context": "", "use_case": "", "switched_from": "", "story": "Dillo, a multi-platform graphical web browser"}]}