Cyrillic Script
Cyrillic shares almost all of Latin's shaping simplicity: left to right, no reordering, no positional joining. Where it genuinely diverges is in italics. A Latin italic is a slanted variation of the same letter skeletons; a Cyrillic italic redraws a meaningful share of its lowercase letters into different shapes entirely. This article covers the alphabet, that redrawing, and the regional letters a font needs for Slavic languages beyond Russian.
Cyrillic, in one screen
An alphabet with Latin's shaping simplicity and a genuinely distinct italic design tradition.
The standard Russian alphabet is 33 letters, uppercase and lowercase. Unicode encodes the core set in the Cyrillic block, then adds extra letters for other Slavic and non-Slavic languages that use Cyrillic in Cyrillic Supplement and Cyrillic Extended-A through Extended-D. A font built only for Russian will fall short of Ukrainian, Serbian, or Bulgarian without those extensions.
In Latin type, italic is fundamentally the same letter, tilted and often narrowed. A Latin lowercase "n" and its italic counterpart share a skeleton. Cyrillic doesn't work that way for a meaningful share of its lowercase letters: several of them are redrawn into shapes borrowed from cursive handwriting, not slanted versions of the upright design.
Rendered side by side, the difference is immediate. Roman п, т, and д keep their upright forms (a bridge shape, a bar over three strokes, and a form with a descending loop). In italic, п collapses toward a shape that reads like a Latin "n", т collapses toward a shape that reads like a Latin "m", and д takes on a cursive form with a tail that has no equivalent in the roman design. A font that generates its Cyrillic italic by algorithmically slanting the roman glyphs, rather than drawing a second, historically grounded italic, will look wrong to any reader fluent in the script.
The clearest way to see the redrawing is to set the same word twice, once upright and once in italic, and compare letter by letter.
Compare п, т, and д across the two lines. Their italic forms aren't the upright letters leaned over, they're different shapes that happen to occupy the same code points.
This isn't a quirk of one typeface. It reflects Cyrillic italic's roots in period handwriting, the same way Latin italic traces back to Renaissance cursive scripts, except Cyrillic's cursive tradition diverged further from its upright forms than Latin's did. A type family that skips drawing genuine italics, and instead slants the roman outlines mechanically, is skipping a real design step, not just a stylistic nicety.
Beyond the italic question, Cyrillic typography has a second localization layer: some letters are conventionally drawn differently depending on the target language, even though they share the same Unicode code point. A font that supports multiple Cyrillic-using languages well typically ships language-specific alternates and swaps them in with the locl feature, the same mechanism Latin uses for things like Dutch IJ or Turkish dotless ı.
Like Latin, Cyrillic needs no reordering and no contextual joining. Its OpenType feature list is short, but genuine italic design and regional localization carry real weight for typefaces meant to serve more than one Cyrillic-using language.
| Feature | Tag | What it builds here |
|---|---|---|
| Localized forms | locl | Swaps letterforms by language, including Serbian and Bulgarian regional conventions. |
| Mark attachment | mark | Anchors stress marks and pronunciation diacritics used in dictionaries and teaching text. |
| Standard ligatures | liga | Rare in running Cyrillic text, occasionally used decoratively. |
| Kerning | kern | Pair adjustments, including the wider glyphs Cyrillic tends to use relative to Latin. |
| Small capitals | smcp / c2sc | True small caps, drawn as their own glyphs rather than scaled capitals. |
| Case-sensitive forms | case | Adjusts punctuation position when set alongside all-capital Cyrillic text. |
| Symptom | Likely cause | Fix |
|---|---|---|
| Italic Cyrillic looks like slanted roman letters | No dedicated italic design; italic generated by mechanically slanting the roman outlines | Draw genuine italic forms for п, т, д, and other letters with distinct cursive shapes |
| Ukrainian or Serbian text shows the wrong regional letterform | Font ships only Russian conventions and no locl alternates | Add language-tagged alternates for the specific Cyrillic-using languages targeted |
| A Cyrillic-using language shows missing glyphs as tofu | Font covers only the 33-letter Russian alphabet, not the regional extensions | Check a target language's full letter list before claiming support for it |
| Cyrillic text looks visually thinner or narrower than the Latin it's paired with | Cyrillic glyphs drawn without adjusting for their typically wider proportions | Test Cyrillic and Latin side by side at matched sizes, not just within their own scripts |
- 1Define the target languages, Russian alone is a much smaller commitment than full Slavic coverage.
- 2Draw a genuine italic, don't slant the roman design and call it done.
- 3Add regional alternates through locl for Serbian and Bulgarian if those languages are in scope.
- 4Check proportions against the Latin in the same family, Cyrillic often needs to run slightly wider.
- 5Test extended letters for Ukrainian, Serbian, and Macedonian, not just the 33-letter Russian set.
- 6Review with a fluent reader before shipping, italic redrawing errors are easy to miss otherwise.
Copy these into a test document. Each targets a different part of the coverage and shaping surface covered above.