{"slug": "harfbuzz", "name": "HarfBuzz", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "", "recommenders": 4, "commenters": 12, "warners": 2, "score": 3.104, "rising": -1.31, "first": "2025-11-24", "latest": "2026-10-05", "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": 4, "neutral": 6, "compare": 0, "warn": 2}, "spark": [1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 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": null, "github_repo": "github.com/harfbuzz/harfbuzz", "official_url": "https://harfbuzz.github.io/", "pricing": "", "aliases": ["HarfBuzz"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 777739408, "item_id": 48608713, "url": "https://news.ycombinator.com/item?id=48608713", "by": "ValdikSS", "date": "2026-06-20", "stance": "recommend", "quote": "This repository has a good outlook", "excerpt": "It still is a problem in general, that's why fonts now have webassembly in it. This repository has a good outlook: https://github.com/harfbuzz/harfbuzz-wasm-examples", "context": "", "use_case": "text shaping", "switched_from": "", "story": "Digital Printing of Arabic: explaining the problem"}, {"id": 746998066, "item_id": 46687379, "url": "https://news.ycombinator.com/item?id=46687379", "by": "simonw", "date": "2026-01-19", "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": 738873600, "item_id": 46179600, "url": "https://news.ycombinator.com/item?id=46179600", "by": "bsder", "date": "2025-12-06", "stance": "recommend", "quote": "I'd start with HarfBuzz: https://github.com/harfbuzz/harfbuzz", "excerpt": "I'd start with HarfBuzz: https://github.com/harfbuzz/harfbuzz That's the open source font shaping engine. It does a lot of work to handle font shaping and rendering for languages that can't really be reduced to characters.", "context": "", "use_case": "", "switched_from": "", "story": "HTML as an Accessible Format for Papers (2023)"}, {"id": 736589584, "item_id": 46036849, "url": "https://news.ycombinator.com/item?id=46036849", "by": "zahlman", "date": "2025-11-24", "stance": "recommend", "quote": "which is kind of a big deal", "excerpt": "> This is not meant to be an exhaustive list, though if I\u2019ve overlooked someone significant (perhaps actually in Nebraska?) then don\u2019t take that as me disregarding their contributions. There are many more, but the very nature of who they are prevents listing them all. I might update this list for a while, so do get in touch. While there are now hundreds of contributors, Behdad Esfahbod (https://github.com/behdad) is ", "context": "", "use_case": "Text shaping engine", "switched_from": "", "story": "Misunderstanding That \"Dependency\" Comic"}]}], "caveats": [{"label": "", "summary": "", "quotes": [{"id": 799554945, "item_id": 49972184, "url": "https://news.ycombinator.com/item?id=49972184", "by": "kragen", "date": "2026-10-05", "stance": "warn", "quote": "each of which has a rap sheet of CVEs that makes Charlie Manson look like a petty shoplifter", "excerpt": "Last night I was looking for how to run Graphviz on untrusted input in a secure way, because recent versions of Graphviz give untrusted input to a whole insane rat's nest of code: Harfbuzz, Pango, libfribidi, libthai, libgraphite2, and its own internal format parser, each of which has a rap sheet of CVEs that makes Charlie Manson look like a petty shoplifter. And apparently Pango is even multithreaded, so we can expe", "context": "", "use_case": "", "switched_from": "", "story": "Linux containers in 500 lines of code (2016)"}, {"id": 742367440, "item_id": 46397965, "url": "https://news.ycombinator.com/item?id=46397965", "by": "ilaksh", "date": "2025-12-26", "stance": "warn", "quote": "Harfbuzz (OpenType engine) WASM, which if compiled into an application allows fonts to basically run any code", "excerpt": "Another thing in the category of abusing font capabilities is Harfbuzz (OpenType engine) WASM, which if compiled into an application allows fonts to basically run any code. A few examples are an LLM or a Tetris font. Apparently this WASM support is in the font rendering for Chrome and Firefox supposedly. I was really tempted to try to use it to make a Harfbuzz OS. https://fuglede.github.io/llama.ttf/", "context": "", "use_case": "", "switched_from": "", "story": null}]}], "who": [], "tags": [], "use_cases": ["text shaping", "text shaping in wasm", "text shaping engine"], "compared": [{"slug": "claude", "name": "Claude", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=46381637", "title": "Learn LaTeX in 30 Minutes", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=49965118", "title": "Linux containers in 500 lines of code (2016)", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=48884984", "title": "Ask HN: What Are You Working On? (July 2026)", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=48563047", "title": "Digital Printing of Arabic: explaining the problem", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47416736", "title": "Slug Text Rendering Algorithm Dedicated to Public Domain", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47170174", "title": "Launch HN: Cardboard (YC W26) \u2013 Agentic video editor", "mentions": 1}], "sentiment_by_month": {"2025-11": {"recommend": 1}, "2025-12": {"recommend": 1, "neutral": 2, "warn": 1}, "2026-01": {"neutral": 1, "recommend": 1}, "2026-02": {"neutral": 1}, "2026-03": {"neutral": 1}, "2026-04": {}, "2026-05": {}, "2026-06": {"recommend": 1}, "2026-07": {"neutral": 1}, "2026-08": {}, "2026-09": {}, "2026-10": {"warn": 1}}, "quotes": [{"id": 799554945, "item_id": 49972184, "url": "https://news.ycombinator.com/item?id=49972184", "by": "kragen", "date": "2026-10-05", "stance": "warn", "quote": "each of which has a rap sheet of CVEs that makes Charlie Manson look like a petty shoplifter", "excerpt": "Last night I was looking for how to run Graphviz on untrusted input in a secure way, because recent versions of Graphviz give untrusted input to a whole insane rat's nest of code: Harfbuzz, Pango, libfribidi, libthai, libgraphite2, and its own internal format parser, each of which has a rap sheet of CVEs that makes Charlie Manson look like a petty shoplifter. And apparently Pango is even multithreaded, so we can expe", "context": "", "use_case": "", "switched_from": "", "story": "Linux containers in 500 lines of code (2016)"}, {"id": 782371666, "item_id": 48898229, "url": "https://news.ycombinator.com/item?id=48898229", "by": "filipsonix", "date": "2026-07-13", "stance": "neutral", "quote": "Wrapper over Slug and Harfbuzz", "excerpt": "https://filipkunc.com/ - my website with experiments accelerated by Claude Notable projects/prototypes: https://filipkunc.com/posts/meshmaker - 3D modeling app ported via Claude to WebGL2 https://filipkunc.com/posts/text-rendering - Wrapper over Slug and Harfbuzz in browser https://filipkunc.com/posts/gemini-game-art - custom art using Gemini for Heroes 2 (fheroes2 engine fork)", "context": "", "use_case": "", "switched_from": "", "story": "Ask HN: What Are You Working On? (July 2026)"}, {"id": 777739408, "item_id": 48608713, "url": "https://news.ycombinator.com/item?id=48608713", "by": "ValdikSS", "date": "2026-06-20", "stance": "recommend", "quote": "This repository has a good outlook", "excerpt": "It still is a problem in general, that's why fonts now have webassembly in it. This repository has a good outlook: https://github.com/harfbuzz/harfbuzz-wasm-examples", "context": "", "use_case": "text shaping", "switched_from": "", "story": "Digital Printing of Arabic: explaining the problem"}, {"id": 758762368, "item_id": 47422648, "url": "https://news.ycombinator.com/item?id=47422648", "by": "flohofwoe", "date": "2026-03-18", "stance": "neutral", "quote": "Harfbuzz is only one piece of the puzzle, it's not a text renderer, only a 'text shaper'", "excerpt": "> well-established software like harfbuzz Harfbuzz is only one piece of the puzzle, it's not a text renderer, only a 'text shaper' (e.g. translating a sequence of UNICODE codepoints into a sequence of glyphs). The actual font handling and text rendering still needs to be done by some other code (e.g. the readme in Mikko Mononen's Skribidi project gives a good overview about what's needed besides the actual rendering ", "context": "", "use_case": "", "switched_from": "", "story": "Slug Text Rendering Algorithm Dedicated to Public Domain"}, {"id": 754881680, "item_id": 47180105, "url": "https://news.ycombinator.com/item?id=47180105", "by": "spuzvabob", "date": "2026-02-27", "stance": "neutral", "quote": "Yea, it's harfbuzz compiled to WASM", "excerpt": "> So you use a library that takes in text and vectorizes it to canvas shapes? That could work in theory, do you have a demo of this? Yea, it's harfbuzz compiled to WASM: https://harfbuzz.github.io/harfbuzzjs/ Then all text layout features must be implemented on top of it, like linebreaking, text align, line spacing, kerning, text direction, decoration etc.", "context": "", "use_case": "Text shaping in WASM", "switched_from": "", "story": "Launch HN: Cardboard (YC W26) \u2013 Agentic video editor"}, {"id": 746998066, "item_id": 46687379, "url": "https://news.ycombinator.com/item?id=46687379", "by": "simonw", "date": "2026-01-19", "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": 743665137, "item_id": 46479071, "url": "https://news.ycombinator.com/item?id=46479071", "by": "Rochus", "date": "2026-01-03", "stance": "neutral", "quote": "I switched to LuaTex 1.18 including the HarfBuzz library", "excerpt": "Just wanted to say that I skipped LuaTex 1.10 because not even a bare Hello World worked. So I switched to LuaTex 1.18 including the HarfBuzz library. I even implemented my own OTF loader in C (with Lua bindings for additional required HarfBuzz functions) and added it to the LuaHBTex executable. The font loading works, and also the layout in principle, but the result is ugly. So I came to the conclusion that there is", "context": "", "use_case": "text shaping", "switched_from": "", "story": "Learn LaTeX in 30 Minutes"}, {"id": 742520225, "item_id": 46407514, "url": "https://news.ycombinator.com/item?id=46407514", "by": "bfgeek", "date": "2025-12-27", "stance": "neutral", "quote": "Harfbuzz also provides points along the section of text which is safe to reuse", "excerpt": "Blink's (Chromium) text layout engine works the following way. 1. Layout the entire paragraph of text as a single line. 2. If this doesn't fit into the available width, bisect to the nearest line-break opportunity which might fit. 3. Reshape the text up until this line-break opportunity. 4. If it fits great! If not goto 2. This converges as it always steps backwards, and avoids the contradictory situations. Harfbuzz ", "context": "", "use_case": "", "switched_from": "", "story": "Text Rendering Hates You"}, {"id": 742367440, "item_id": 46397965, "url": "https://news.ycombinator.com/item?id=46397965", "by": "ilaksh", "date": "2025-12-26", "stance": "warn", "quote": "Harfbuzz (OpenType engine) WASM, which if compiled into an application allows fonts to basically run any code", "excerpt": "Another thing in the category of abusing font capabilities is Harfbuzz (OpenType engine) WASM, which if compiled into an application allows fonts to basically run any code. A few examples are an LLM or a Tetris font. Apparently this WASM support is in the font rendering for Chrome and Firefox supposedly. I was really tempted to try to use it to make a Harfbuzz OS. https://fuglede.github.io/llama.ttf/", "context": "", "use_case": "", "switched_from": "", "story": null}, {"id": 742262485, "item_id": 46391405, "url": "https://news.ycombinator.com/item?id=46391405", "by": "gucci-on-fleek", "date": "2025-12-26", "stance": "neutral", "quote": "HB is implemented as just another library", "excerpt": "> The idea was to use the version which was officially declared as \"complete\" and also the last before the development of the HB integration started. HB is implemented as just another library, and it's pretty easy to exclude with the build script (ConTeXt does this). > The problem seems rather to be, that luatex-fonts-merged.lua is not really usable outside of the ConTeXt or TexLive tree So option 1 is to base things", "context": "", "use_case": "", "switched_from": "", "story": "Learn LaTeX in 30 Minutes"}, {"id": 738873600, "item_id": 46179600, "url": "https://news.ycombinator.com/item?id=46179600", "by": "bsder", "date": "2025-12-06", "stance": "recommend", "quote": "I'd start with HarfBuzz: https://github.com/harfbuzz/harfbuzz", "excerpt": "I'd start with HarfBuzz: https://github.com/harfbuzz/harfbuzz That's the open source font shaping engine. It does a lot of work to handle font shaping and rendering for languages that can't really be reduced to characters.", "context": "", "use_case": "", "switched_from": "", "story": "HTML as an Accessible Format for Papers (2023)"}, {"id": 736589584, "item_id": 46036849, "url": "https://news.ycombinator.com/item?id=46036849", "by": "zahlman", "date": "2025-11-24", "stance": "recommend", "quote": "which is kind of a big deal", "excerpt": "> This is not meant to be an exhaustive list, though if I\u2019ve overlooked someone significant (perhaps actually in Nebraska?) then don\u2019t take that as me disregarding their contributions. There are many more, but the very nature of who they are prevents listing them all. I might update this list for a while, so do get in touch. While there are now hundreds of contributors, Behdad Esfahbod (https://github.com/behdad) is ", "context": "", "use_case": "Text shaping engine", "switched_from": "", "story": "Misunderstanding That \"Dependency\" Comic"}]}