A billion-speaker script still can't be justified correctly in any 2026 browser. Here's why
Classical Arabic justifies by elongating letter strokes (kashida), codified around 940 CE — not by stretching word spaces. CSS does the opposite, and the result looks wrong to anyone who reads the script.
The specs to do it right have existed for decades. OpenType's justification table dates to 1997 and goes unread by shaping engines, so foundries don't ship it; for one strange quarter in 2000, IE 5.5 was the only software on earth that justified Arabic correctly.
The fix sits in nobody's commercial interest, so it falls to volunteers. A developer who just wrote an Arabic-capable text shaper from scratch confirmed the gap, and where it really lives.
The script the digital stack still can't set
The post makes an uncomfortable claim: in 2026, the standard text stack still cannot justify Arabic the way the script demands, even though the specifications and open-source tools to do it have existed for decades. Classical Arabic doesn't justify by padding the gaps between words. It justifies with kashida — elongating the connecting strokes inside words — a proportional system codified by Ibn Muqla around 940 CE and stable for roughly a thousand years. CSS, built around inter-word spacing, produces ragged, un-Arabic lines by default.
The author traces the technical debt to a chain of compromises: Kamel Mrowa's 1958 "Simplified Arabic" collapsed positional letterforms to fit a Linotype machine's 90 channels and conquered the Arab newsroom within a generation. The standards layer tells the same story of half-built solutions. OpenType's JSTF justification table has existed since 1997 but goes unread by shaping engines, so foundries stop shipping it. And there was a brief, surreal exception:
"Internet Explorer 5.5 implements text-justify: kashida. For one brief, weird browser-quarter Microsoft is the only software vendor on earth that can justify Arabic correctly on a screen." — a developer from Tunisia
A shaper author confirms where the gap lives
The strongest technical voice in the thread had just built the exact machinery under discussion, and located the missing piece precisely — not in the shaper, but in the renderer:
"the lack of stretching really is a deficiency in the OpenType spec… The shaper has no information about the available space, but when rendering you could stretch individual glyphs… Of course the JSTF table would be the right way to do it" — the author of Hyvector, who just wrote a from-scratch shaper for Arabic, Nastaliq and Indic
A wider point about whose problems get solved
One reader widened the lens to the accident of history baked into our tools:
"Imagine computers had been won by a CJK language, which have none of these problems. You could imagine a similar article about how exotic and difficult English layout is." — a commenter on the contingency of "default" text
And the careful readers kept the author honest, with a precise query about whether a passage on bidirectional digit ordering said what it meant:
"Does the author mean most-significant-on-the-left?… numbers everywhere on Earth are read most-significant-first." — a high-karma reader pressing on the UAX #9 wording
The last mile pays no one
This isn't an unsolved research problem. The math, the spec table, and the open-source shapers all exist; HarfBuzz and fonts like Amiri were built, as the author puts it, on weekends for love. What's missing is the unglamorous final integration that no commercial actor is paid to finish. So a script with well over a billion readers waits — not because justifying it is hard, but because doing it right was never anybody's job.
Get breakdowns like this every day
The top Hacker News stories, unpacked — by email, Telegram, or RSS.
Google wants to build a datacenter from 2,000 retired Pixels. The thread lists what kills phones
Strip a dead phone to its motherboard — about half its embodied carbon — swap Android for Linux, and orchestrate clusters of 25–50 with Kubernetes. Google Research says 25–50 phones equal one modern server.