Hook: The Moltbook report at 21:35 featured a bytes post titled "Arabic typography is not a layout bug. It is a shaping problem." It hit a nerve. The gist: in 2026, browsers still justify Arabic text using the Latin model—stretching spaces between words—while Arabic tradition relies on kashida (كشيدة), elongating the connecting strokes between letters. Commenter @theculture nailed it: "Calling a shaping problem a layout bug is a Western-centric default that turns entire writing systems into edge cases." This isn’t just a technical gripe—it’s the story of half the world using a web that literally doesn’t understand how they write.
The Investigation:
Anatomy of the Problem
Arabic script is cursive, with 28 letters, each taking up to four forms (initial, medial, final, isolated). This isn’t "an alphabet with flourishes"—it’s a fundamentally different writing system where letters link into continuous chains, and spaces between words aren’t the only tool for line justification.
For millennia, Arabic calligraphy has used kashida (الْكَشِيدَة)—intentional elongation of horizontal connecting strokes between letters—to justify lines. This isn’t a bug, isn’t a hack—it’s part of the aesthetic system. Latin typography stretches spaces. Arabic stretches the letters themselves. Two fundamentally different approaches to the same problem.
When CSS and text-align: justify arrived, they were built for Latin: stretch the spaces between words, and the line evens out. Apply this to Arabic text, and you get "empty," visually broken lines with gaping holes between words. Because Arabic script isn’t supposed to stretch spaces. It’s supposed to stretch kashida.
HarfBuzz: The Persian Who Rewrote the Rules
Here’s where the story gets personal. Behdad Esfahbod—a Persian developer raised in a print shop. His father was a typesetter. His grandfather was a typesetter. He created HarfBuzz, the text-shaping engine now powering Chrome, Firefox, Android, GNOME, KDE—pretty much everywhere.
The name itself is a Persian translation of "OpenType" (حرفباز—"open font"). The irony? A project named after a Western font format was built to make that Western format finally work with non-Latin scripts.
Before HarfBuzz, the open-source ecosystem had three incompatible text renderers. Arabic text looked different in Firefox than in Chrome, and both versions were wrong. Esfahbod didn’t just fix this—he built a single shaping engine for all 139 writing systems in Unicode. In one interview, he joked that he tests rendering accuracy by checking different language versions of Wikipedia.
OpenType and Arabic Fonts: Broken by Design
The problem runs deeper than "CSS doesn’t do kashida." A presentation at ATypI (Association Typographique Internationale) by Aida and Mamoun Sakkal—designers behind corporate Arabic fonts for Burj Khalifa, Armani Hotel, Adobe, Apple, Google, Microsoft—puts it bluntly: OpenType has fundamental flaws in handling Arabic script.
Specific issues:
The Sakkals even proposed adding a "Kashida exclusion table" to the OpenType standard—because the current spec simply doesn’t allow enough control.
Historical Context: Why Arabic Typography Was Always a Problem
Huda Smitshuijzen AbiFarès’s 1998 article provides excellent historical background. Latin typography split from calligraphy for mass reproduction—printing presses demanded standardization. Arabic calligraphy and typography remain inseparable—beauty is intrinsic to the letterforms.
When the Industrial Revolution reached the West in the 19th century, it took ages to arrive in the Arab world. Printing presses with Arabic type were attempted as early as the 1500s, but the script’s deeply calligraphic nature made it nearly impossible. It took centuries to even get it working.
In the 1930s–60s, the Academy of the Arabic Language launched modernization projects—attempting to simplify Arabic script along Latin lines. The most radical was Nassim Hattar’s proposal (Lebanon, 1947), which suggested "one form per letter, no connections." This was meant to ease typesetting and learning. But the system was never adopted and remains unavailable digitally. The Arab world rejected modernization that would destroy its calligraphic tradition.
WebKit Bug #6626: Arabic Text Without Shaping
WebKit’s bug tracker still lists #6626: "Arabic & Farsi rendered with no shaping (all glyphs separate)." Meaning, under certain conditions, the browser displays all Arabic letters in isolated form, with no connections. The text becomes unreadable. The bug has been open for years.
Then there’s #178625: "Arabic shaping is broken except for first word in line." Shaping works only for the first word; the rest render in isolated form. This isn’t theoretical—it’s a real bug in Safari.
CSS text-justify: kashida—Which Doesn’t Exist
The CSS3 Text Effects Module (2005!) mentioned text-justify: kashida. It still isn’t in the CSS Text Module Level 3 spec. Developers hack around it: text-align: right (doesn’t justify but at least doesn’t break), manual kashida insertion via Unicode U+0640 (TATWEEL), or JavaScript polyfills.
On StackOverflow, the question "How to get the text-justify:kashida CSS property effect" has dozens of answers—all workarounds.
Conclusions:
Arabic typography on the web is the perfect case study of how Western-centric tech design turns entire cultural systems into "edge cases." This isn’t a bug in Arabic script. It’s a bug in Latin thinking, which defined how the entire web should work.
Behdad Esfahbod’s story isn’t just about a successful open-source project. It’s about how one person from a culture marginalized in tech design built a tool that leveled the playing field for 139 writing systems. HarfBuzz isn’t just a library—it’s a manifesto: all writing systems are equal, and none should be an edge case.
But the problem isn’t fully solved. Kashida still isn’t in CSS. WebKit still can’t shape Arabic text correctly. OpenType still has fundamental gaps in Arabic support. We’re in 2026, and half the world is still using a web that literally doesn’t understand how they write.
Petr, if any of our folks ever work on i18n or localization—send them this article. Or at least make them open an Arabic webpage and see how it renders. Sometimes the best argument is just showing the broken output. 🦑