Skip to content
Patens
Back to learn

Guide · 9 steps · ~60 min

Multi-script fonts.

A multi-script font ships glyphs for more than one writing system in a single file — Latin + Cyrillic, Latin + Greek, Latin + Cyrillic + Greek. About 30% of Cyrillic + Greek uppercase shapes are look-alikes for Latin and can share the same contour drawing. The remaining 70% are bespoke shapes that need their own design pass. This guide covers the reuse pattern, the bespoke work, the OS/2 flag that quietly breaks Cyrillic in Word, and the audit codes that catch under-coverage.

Patens's demo project ships 162 glyphs across Latin + Cyrillic + Greek as a working multi-script reference. Bespoke Cyrillic (Я Ж Ф) and Greek lowercase ship as audit-flagged stubs so you can see where the real design work is.

  1. 1

    What "multi-script" actually means

    A multi-script font ships glyphs for more than one writing system in a single file — Latin + Cyrillic, Latin + Greek, Latin + Cyrillic + Greek, and so on. The OpenType spec doesn't enforce script grouping; a font just has glyphs, and the OS picks which to use based on the codepoint in the source text. Adding Cyrillic to a Latin font means drawing 60-100 more glyphs (uppercase, lowercase, accents, punctuation overlap); adding Greek another ~70.

    The hard part isn't the count, it's consistency. The Cyrillic К should feel like the Latin K's relative — not a different shape stuck in the same file.

  2. 2

    Look-alikes vs bespoke shapes

    About 30% of Cyrillic uppercase letters share their shape with Latin (А = A, В = B, Е = E, К = K, М = M, Н = H, О = O, Р = P, С = C, Т = T, Х = X). Greek uppercase has similar overlap (Α = A, Β = B, Ε = E, Ζ = Z, Η = H, Ι = I, Κ = K, Μ = M, Ν = N, Ο = O, Ρ = P, Τ = T, Υ = Y, Χ = X). For these "look-alike" glyphs, Patens lets you reference the Latin glyph as the contour source — one drawing, two codepoints. The remaining 70% are bespoke shapes that need their own design (Cyrillic Я Ж Ф Б Д Г Л П Ц Ч Ш Щ Ъ Ы Ь Э Ю; Greek Γ Δ Θ Λ Ξ Π Σ Φ Ψ Ω).

    Look-alike sharing is a contour reference, not a copy. Editing the Latin K updates the Cyrillic К too.

  3. 3

    Patens demo project — what's shipped, what's stub

    The demo project (open at /project/demo/edit) ships 162 glyphs spanning three scripts. Latin: uppercase + lowercase + digits + punctuation + currency + math + brackets + composite ligatures (88 glyphs). Cyrillic: 17 look-alike letters reusing Latin builders (А В Е К М Н О Р С Т Х uppercase + а е о р с х lowercase). Greek: 14 uppercase look-alikes (Α Β Ε Ζ Η Ι Κ Μ Ν Ο Ρ Τ Υ Χ). The bespoke Cyrillic shapes (Я Ж Ф) and the entire Greek lowercase set ship as stubs — they're audit-flagged as `flagged-for-review` so designers see what's incomplete on import.

    When you fork the demo for your own typeface, the stubs are your starting work list. The audit code makes them findable via the "needs review" filter on the glyph browser.

  4. 4

    Drawing the bespoke Cyrillic shapes

    Я is mirror-of-R; the right leg flips left. Ж is three-vertical-strokes with a horizontal axis — read it as "shouty K back-to-back with K." Ф is O with a vertical bar through the middle that extends above + below the bowl. Б is P with a horizontal at the top. Д is a square pedestal with descender serifs. The proportions matter more than the exact strokes: Cyrillic reads at the same rhythm as Latin lowercase even though uppercase Cyrillic has a slightly larger x-height than uppercase Latin in many designs.

    Reference Cyrillic specimens (Paratype, Nina Stössinger, Maria Doreuli) — don't guess from Wikipedia screenshots. The shapes are well-documented; the consistency with your Latin is the design problem.

  5. 5

    Greek lowercase — the deferred set

    Greek lowercase is structurally different from Latin lowercase. Cursive descenders (γ ρ φ χ ψ), a true descender on β, distinctive x-height handling for ζ ξ. Most Latin-trained designers underestimate the redesign work — α isn't a, η isn't n, ν isn't v. The Patens demo ships uppercase Greek look-alikes but not the lowercase set; if you need it, expect another full design pass on top of the Latin work.

    If Greek lowercase is in scope for your project, consider working with a designer who has shipped Greek before. The shapes have a long history and "looks fine" usually misses what a Greek reader notices.

  6. 6

    OpenType coverage audit

    Patens runs six coverage audit codes that flag undersupplied scripts: `coverage-latin-1-supp` (extended Latin like ñ ø æ), `coverage-currency` (€ £ ¥ ₹), `coverage-math` (≈ ± ÷ ≠), `coverage-typo-essentials` (typographic quotes, en/em dash, ellipsis), `control-glyphs-missing` (.notdef, space, NBSP), and `glyph-count-low` (a generic floor below which a font isn't practically useful). These are warnings, not errors — you can ship a font that misses them, but typesetters will hit walls.

    The audit codes don't care which scripts you've declared. If you ship a font with Cyrillic that doesn't cover the Cyrillic supplement block, you'll see warnings for the script you opted into.

  7. 7

    OS/2 ulUnicodeRange flags

    The OS/2 table's ulUnicodeRange field tells operating systems "this font has glyphs for these scripts." Patens auto-sets the flags based on the actual codepoints you've drawn — Cyrillic letters set bit 9; Greek letters set bit 7. Mis-set flags are why a font sometimes "doesn't work" for Cyrillic in Word even though the glyphs are present: Word checks the flag before letting the user select the font for Russian text.

    Patens doesn't expose ulUnicodeRange as an editable field on purpose — it should be a function of what you've drawn, not a manual override. If the auto-detection is wrong, file a bug.

  8. 8

    Naming + branding across scripts

    A multi-script font usually keeps the same English family name across every script. The OpenType name table supports localised names — name IDs 1 (family), 2 (style), 16 (typographic family), 17 (typographic style) can each have a Cyrillic or Greek transliteration. Patens stores the canonical English name in metadata + supports localised name table records via the `name.localized` array. Default behaviour: ship English everywhere unless you explicitly add a Cyrillic name.

    For non-commercial fonts, English-only naming is fine. Commercial foundries with multi-language clients want at least Cyrillic + Greek localised names so the font appears with its native-script name in Windows + macOS font menus.

  9. 9

    Exporting a multi-script font

    On export, Patens compiles every drawn glyph into the output OTF regardless of script. The OS/2 + name table get auto-populated. Cyrillic + Greek glyphs go through the same kern + liga + smcp feature passes as Latin. The end result is a single OTF/WOFF2 that works in every modern browser, Adobe app, InDesign, and Word (assuming ulUnicodeRange is set correctly — see step 7). Test in the actual target environment after export.

    A common gotcha: the font installs and displays in Latin contexts but Cyrillic + Greek "don't work." Almost always ulUnicodeRange — open the exported file in `otfinfo --info file.otf` to verify the flags.

Related

The audit-codes reference documents the six coverage codes. The first-font tutorial covers the Latin baseline you'll usually start from.

Patens is in private alpha. Request an invite →