Which Languages Read Right-to-Left, and How Many Speakers That Covers
9 min read · updated August 11, 2026
The list of right-to-left scripts is short, stable and published: it is derivable from the Unicode character database rather than from opinion. The speaker total attached to it is not stable, and anybody quoting it to three significant figures is quoting something they made up.
The scripts, from Unicode’s own property data
Unicode assigns every character a Bidi_Class property, and the values R (right-to-left) and AL (right-to-left Arabic) are what make text lay out from the right. The scripts whose letters carry those values, and which are in living everyday use, are a small set:
- Arabic — by far the largest, and the base script for a family of adapted orthographies.
- Hebrew — used for Hebrew, Yiddish, Ladino and Judeo-Arabic.
- Syriac, Thaana (Dhivehi), N’Ko (Manding languages), Adlam (Fula), Samaritan and Mandaic.
- Traditional Mongolian and the historic scripts around it are a separate case entirely — they are vertical, not right-to-left, and are covered on the vertical reading order page.
The authoritative reference for how these lay out alongside left-to-right text is Unicode Standard Annex #9, the Unicode Bidirectional Algorithm. If you are writing code that touches this, that document, not a blog post, is the specification your renderer claims to implement.
Which languages use them
The Arabic script carries far more than Arabic. Persian (Farsi), Urdu, Pashto, Sindhi, Kashmiri, Uyghur, Sorani Kurdish, Balochi, Punjabi as written in Pakistan (Shahmukhi), Dari and Saraiki are all written in adapted Arabic script with additional letters. Hebrew script carries Modern Hebrew and, historically and in some communities today, Yiddish and Ladino. Thaana is the script of Dhivehi in the Maldives. Adlam, devised in the 1980s for Fulani and encoded in Unicode 9.0 in 2016, is the newest of the group.
Two of the largest entries in that list are the ones people forget: Urdu and Persian are Arabic-script languages with enormous speaker populations, and neither is Arabic. A system that special-cases “Arabic” by language code and not by script property will get Urdu layout wrong while believing it has handled RTL.
The adaptations are not cosmetic either. Persian adds four letters Arabic does not have and writes two others with different dot patterns; Urdu adds retroflex and aspirated consonants and is conventionally set in the sloping Nastaliq style rather than the horizontal Naskh style that most fonts and most rendering stacks assume. Urdu set in a Naskh font is legible and looks wrong to a reader in the way a Latin text set entirely in a blackletter face would — which is a font-coverage problem your model output cannot fix and your CSS can.
Deriving a speaker total, and why it is a range
Here is the derivation rather than a headline number, because the headline number is where this subject goes wrong. Taking the largest RTL-script languages and using order-of-magnitude figures from Ethnologue’s recent editions: Arabic in all its varieties is usually given in the high three hundreds of millions once second-language speakers are counted; Urdu in the low to mid two hundreds of millions on the same basis; Persian varieties together around a hundred million; Pashto, Sindhi and Shahmukhi Punjabi each in the tens of millions; Uyghur, Hebrew, Kurdish and the rest below that.
Add those and you land somewhere between roughly 700 million and 1 billion people who read a right-to-left script. That is the honest precision available, and the width of the range is not sloppiness. It is the sum of three real ambiguities:
- First versus second language. Arabic’s count roughly doubles depending on whether liturgical and second-language competence is included.
- Language versus variety. Counting Arabic as one language or as a dozen mutually difficult varieties changes both the entries and the total.
- Double counting. A great many Urdu speakers also read Arabic script for religious purposes and a great many Persian speakers read Arabic; summing per-language totals counts those people more than once.
What the number is actually evidence for
Even at the low end of the range, the conclusion is the same one: RTL readers are roughly a tenth of humanity, which is far more than the share of software that handles them correctly on first release. The asymmetry is not about model quality — it is about tooling. Layout engines, PDF generators, spreadsheet exports, terminal emulators, chart libraries and markdown renderers are written and tested left-to-right first, and RTL support arrives as a later patch if at all.
That is why the failures in this territory cluster in the presentation layer rather than in the model: digits appearing reversed, punctuation drifting to the wrong end of a line, and PDF output that renders correctly on screen and wrongly on paper. The text itself is stored in logical order throughout; only the drawing is directional.
It is also worth resisting the inference people draw from the number in the other direction — that a tenth of humanity implies a tenth of the training data. It does not. Digital text volume tracks publishing and internet infrastructure rather than population, and the RTL-script languages sit across a very wide range on that axis: Arabic has a large web presence, Hebrew has a disproportionately large one for its population, and Sindhi, Pashto and Kashmiri have very little. Speaker counts tell you how many people your interface has to serve. They tell you nothing about how well a model will write for them, which is the argument made at length on why reading direction does not predict difficulty.
The trap: RTL is not a property of a language
The most common structural bug in this area is treating direction as a language attribute. It is a script attribute, and the two come apart in both directions. Kurdish is written right-to-left in Iraq and Iran using an Arabic-derived script and left-to-right in Turkey using Latin. Azerbaijani has been written in Arabic, Latin and Cyrillic within a century. Serbian is routinely written in two scripts, both LTR. Punjabi is Gurmukhi and left-to-right in India, Shahmukhi and right-to-left in Pakistan — one language, two directions, in the same decade.
The correct key is therefore a locale that carries the script subtag, such as pa-Guru-IN versus pa-Arab-PK, and the correct lookup is the script’s direction from CLDR rather than a hard-coded list of “RTL languages” in your codebase. Any such list is wrong for at least one of the cases above the day it is written.