FreeToGenerate.com

Twenty-eight letters and a hundred shapes, and Unicode encodes only the twenty-eight. The rest is the renderer’s job.

The 28 letters

Each row shows one letter in every shape it takes. All of those shapes come from a single code point: the browser does the joining, and nothing in this table is a presentation form.

Six letters have only two shapes, because they never join to the letter that follows them. That is why the alphabet has 100 shapes rather than 112.

LetterNameTransliterationCode pointShapes
اAlefalifU+0627
اalone‍اend
بBehbaU+0628
بaloneب‍start‍ب‍middle‍بend
تTehtaU+062A
تaloneت‍start‍ت‍middle‍تend
ثThehthaU+062B
ثaloneث‍start‍ث‍middle‍ثend
جJeemjimU+062C
جaloneج‍start‍ج‍middle‍جend
حHahhaU+062D
حaloneح‍start‍ح‍middle‍حend
خKhahkhaU+062E
خaloneخ‍start‍خ‍middle‍خend
دDaldalU+062F
دalone‍دend
ذThaldhalU+0630
ذalone‍ذend
رRehraU+0631
رalone‍رend
زZainzayU+0632
زalone‍زend
سSeensinU+0633
سaloneس‍start‍س‍middle‍سend
شSheenshinU+0634
شaloneش‍start‍ش‍middle‍شend
صSadsadU+0635
صaloneص‍start‍ص‍middle‍صend
ضDaddadU+0636
ضaloneض‍start‍ض‍middle‍ضend
طTahta (emphatic)U+0637
طaloneط‍start‍ط‍middle‍طend
ظZahza (emphatic)U+0638
ظaloneظ‍start‍ظ‍middle‍ظend
عAinaynU+0639
عaloneع‍start‍ع‍middle‍عend
غGhainghaynU+063A
غaloneغ‍start‍غ‍middle‍غend
فFehfaU+0641
فaloneف‍start‍ف‍middle‍فend
قQafqafU+0642
قaloneق‍start‍ق‍middle‍قend
كKafkafU+0643
كaloneك‍start‍ك‍middle‍كend
لLamlamU+0644
لaloneل‍start‍ل‍middle‍لend
مMeemmimU+0645
مaloneم‍start‍م‍middle‍مend
نNoonnunU+0646
نaloneن‍start‍ن‍middle‍نend
هHehha (soft)U+0647
هaloneه‍start‍ه‍middle‍هend
وWawwawU+0648
وalone‍وend
يYehyaU+064A
يaloneي‍start‍ي‍middle‍يend

Characters that are not among the 28

You will meet all of these constantly in written Arabic. They are listed here rather than folded into the alphabet, because the count of 28 is a convention worth keeping honest.

LetterTransliterationWhy it is separate
ءhamzaa diacritic-like consonant, written alone or carried by another letter
آalif maddaalif carrying the madda sign
أalif hamza abovea carrier form of hamza, not a separate letter
إalif hamza belowa carrier form of hamza, not a separate letter
ؤwaw hamzaa carrier form of hamza, not a separate letter
ئya hamzaa carrier form of hamza, not a separate letter
ةta marbutaa word-final feminine ending, counted separately by convention
ىalif maqsuraa final form of alif written like ya without dots

Clean up legacy Arabic text

Paste text that came out of an old system and this replaces any presentation forms with the ordinary letters they stand for.

Cleaned
سبر

Presentation forms found

  • Position 1 · U+FEB1
  • Position 2 · U+FE91
  • Position 3 · U+FEAE

Why the shapes are not in Unicode

Unicode assigns 731 Arabic presentation forms across two blocks, one form for each shape of each letter. They exist so that text from older encodings can be converted without loss, and the standard is clear that they are not for composing new text. Typing them produces something that looks right and behaves badly: it will not search, sort or wrap like Arabic, because as far as everything else is concerned each shape is a different character.

Also available in: Español · Português · Français · العربية

The Arabic alphabet

All 28 letters in every shape they take, generated from one code point each rather than from the deprecated presentation forms.

What is the Arabic alphabet?

The Arabic alphabet has 28 letters and is written from right to left. It is used for Arabic and, with letters added, for Persian, Urdu, Pashto, Kurdish and many others, which makes it the second most widely used script in the world after the Latin one. Like Hebrew it is an abjad: the letters are consonants and the short vowels are marks that are usually left out.

What makes it unlike almost any other alphabet is that the letters join up. Written Arabic is cursive by default, not as a style but as the ordinary way it is set in print, and a letter takes a different shape depending on whether it stands alone, starts a word, sits in the middle or ends one. Most letters have four shapes. Six have only two, because they refuse to join to whatever follows them, and every Arabic learner memorises that list early.

Count it up and the 28 letters take 100 distinct shapes: 22 letters with four each, six with two. That number is the reason this page exists, because of what Unicode does and does not do about it.

How to use this page

  1. Read the table for the letter you need. Each row gives the letter, its name, a transliteration, its single code point, and every shape it takes with a label for the position. The six letters showing only two shapes are the non-connectors.
  2. Check the second table before assuming something is a letter. Hamza, the hamza carriers, ta marbuta and alif maqsura all appear constantly in written Arabic and none of them is one of the 28. They are listed separately with the reason, rather than folded in to make the count look fuller.
  3. Paste legacy text into the cleaner. Text exported from older systems sometimes uses presentation forms instead of ordinary letters. It looks right and behaves badly. The cleaner replaces them and tells you how many it found.

One code point per letter, and 731 you should never type

Here is the thing that separates Arabic from the other alphabets on this site. Unicode encodes none of those 100 shapes in the Arabic block. There is exactly one code point per letter, and the choice of shape is made by whatever draws the text, from the letters on either side. The alphabet is 28 characters and the hundred shapes are a rendering behaviour.

Unicode does contain the shapes, though, in two blocks called Arabic Presentation Forms A and B. There are 731 of them. They exist so that documents in older encodings, which did store each shape as its own character, can be converted to Unicode without loss. The standard is explicit that they are compatibility characters and not for composing new text.

That distinction matters more than it sounds. Text written with presentation forms looks correct and behaves wrongly: searching for a word will not find it, because the shapes are different characters from the letters; sorting misplaces it; line breaking and cursor movement get confused. It is the typographic equivalent of writing a word in a mix of fonts to force the letters to look right.

So the table above is built the honest way. Every shape you see comes from the letter's own code point with a zero width joiner beside it, which asks the renderer to shape it as though a neighbour were there. No presentation form appears anywhere on this page, and the test suite asserts that for all 100 shapes rather than taking our word for it.

Where the variant forms live, across four alphabets

This is the fourth alphabet on this site to be published as a list, and each one has turned out to hide its variant forms somewhere different. Taken together they are a small lesson in never generating an alphabet from a range of code points.

Greek hides a hole. The capitals run from U+0391 to U+03A9, which is 25 code points for 24 letters, because U+03A2 is unassigned: there is no capital final sigma, so the slot where it would go stays empty.

Cyrillic hides an outlier. The Russian alphabet is 33 letters, but only 32 of them are contiguous; Ё sits at U+0401, well outside that run, among letters Russian does not use at all.

Hebrew hides interleaved extras. Its block is 27 code points for 22 letters, because five letters have a separate word-final form and each one is encoded immediately before the letter it belongs to.

Arabic hides nothing in the block, because the forms are not there. It is the opposite failure: the block is not too big, it is missing everything a naive list is tempted to show, and the temptation is to go and fetch it from a compatibility block where it does not belong.

Honest limits

The shapes in the table are drawn by your own browser and the fonts on your machine. That is the point rather than a shortcut, since it is exactly what happens to Arabic text everywhere, but it means a font with poor Arabic support will render some of these less well than a good one would. If a shape looks wrong here it will look wrong in a real document too, which is useful to know.

Two shapes in particular are the shaper's business and not the alphabet's. Lam followed by alif is drawn as a single ligature in every reasonable font, and it is not a letter; Unicode does assign it a code point among the presentation forms, which is another thing not to type. Contextual behaviour also varies a little between typefaces, especially in Nastaliq styles where the joining is far more elaborate than the four positions suggest.

The 28 is a convention. It is the count taught everywhere and it is the right one to publish, but it is a decision about what to include rather than a fact about the block, and the second table is where that decision is made visible. Languages beyond Arabic add letters to this script and none of those are here.

Finally, the transliterations are a rough guide for a reader who does not know the script, not a scholarly system. Academic transliteration distinguishes sounds these spellings merge, and it uses diacritics this page does not.

Why is it free?

Because it is a table and a normalisation call. The letter data ships with the page and the cleaner runs in your browser, so nothing you paste is uploaded, logged or stored anywhere.

So there is no account, no sign-up and nothing held back. The letters come from the Unicode Character Database, the joining behaviour from ArabicShaping.txt rather than from a memorised list, and the lookalikes from the table behind UTS 39, all regenerated by a script committed beside the page along with 65 checks that verify the result.