termaUI (CSS)FontsTypingPechaForgeBlogAbout
← Back to Fonts
Technical & Cultural Proposal · 2025

Why Tibetan Needs
Purpose-Built Fonts.

A documented account of the rendering failures, educational gaps, and engineering requirements that make original Tibetan typefaces an urgent cultural and technical necessity — not a luxury.

Executive Summary

Tibetan is spoken by over 6 million people across 40 countries and carries a literary tradition spanning 1,400 years — yet in the digital era it appears to be served by over sixty publicly available fonts. That number is an illusion. Once you filter for Unicode compliance, correct OpenType stacking tables, and professional rendering on both iOS and Windows, fewer than a dozen survive. None were designed for children. None were designed for digital interfaces. Most look like 18th-century woodblock prints, because they are. Terma Foundry is building three original Tibetan typefaces: a scholarly serif, a screen-optimised sans-serif, and a child-friendly display face. Each will ship with complete Unicode coverage, full OpenType engineering for consonant stacking, and cultural authenticity verified by master calligraphers and Tibetan language educators. All three will be released under the SIL Open Font License — free for everyone, forever.


Part One

The Rendering Crisis.

Six documented failures affecting every piece of Tibetan digital text — from apps to scripture to children's e-books.

01
Critical

Ghost Circles

The dotted-circle placeholder — U+25CC appears inside words

When a font lacks a pre-composed glyph for a stacked consonant cluster, the Unicode shaping engine inserts a dotted circle (◌) as a placeholder. This circle appears inside the word, fracturing syllables that any literate Tibetan reader immediately recognises as broken. It is not a rendering quirk — it is a visible declaration that the font is incomplete.

Ghost circles appear most commonly with Sanskrit-origin consonant stacks used in mantras and dharanis, but depending on the font, common everyday clusters can also trigger them.

Root cause: Missing GSUB substitution rules in the font's OpenType tables. The shaping engine (HarfBuzz or Uniscribe) cannot map base consonant + subjoined consonant → a composed glyph, so it outputs base + U+25CC as a fallback.
Required fix: Pre-composed glyphs for all valid Tibetan consonant stack permutations, plus correct GSUB feature tables (blws, abvs, vatu). Estimated 1,800–2,400 unique stacked glyph forms required. CSS cannot fix this — only a complete font can.
Complex stacked consonants — font-dependent
བྲ་གྷ་ཀླ་བྷ་དྷ་ཛྷ།
These stacks test font coverage. Rendering varies by font and OS shaping engine.
ཨོཾ་མ་ཎི་པདྨེ་ཧཱུྃ།
ཨོཾ་ཨཱཿཧཱུྃ་བཛྲ་གུ་རུ་པདྨ་སིདྡྷི་ཧཱུྃ།
Mantra text — long stacks visible in Sanskrit-origin syllables.
02
Critical

Mid-Syllable Line Breaks

Browsers break at U+0F0B (tsheg) — splitting inside syllables, not between words

Tibetan separates syllables with a dot called the tsheg (་). Unicode classifies U+0F0B as a valid line-break opportunity, so web browsers break lines at every tsheg — including inside multi-syllable words. The result is the Tibetan equivalent of breaking an English word between individual letters at random points.

For a language used in scripture, education, and formal writing, this is a profound usability failure. Children learning to read encounter fractured words; adults read text that any literate reader recognises as typographically broken.

Root cause: Unicode line-breaking algorithm (UAX #14) designates U+0F0B as class BA (Break After). Browsers follow this spec, having no knowledge of Tibetan word boundaries. Tibetan words can span 2–8+ syllables with no separating space.
CSS fix (partial): word-break: keep-all prevents some breaks.
Full fix: Inject U+200B (Zero Width Space) after valid tsheg break points. terma.prepare() in termaUI's JS utility does this. Perfect word-boundary breaks require a Tibetan dictionary segmenter — an active research area.
Narrow container — before & after terma.prepare()
བཅོམ་ལྡན་འདས་མ་ཤེས་རབ་ཀྱི་ཕ་རོལ་ཏུ་ཕྱིན་པའི་སྙིང་པོ།
Without fix — breaks at every tsheg
བཅོམ་ལྡན་འདས་མ་ཤེས་རབ་ཀྱི་ཕ་རོལ་ཏུ་ཕྱིན་པའི་སྙིང་པོ།
With terma.prepare() — breaks between words only
03
High

Tall Stack Clipping

Tight line-height decapitates superscript and subscript consonants

Tibetan stacked consonants extend significantly above and below the baseline. Sanskrit-origin mantras and dharanis use particularly tall stacks — sometimes three or four consonants high. At default browser line-heights, the tops and bottoms of these stacks are clipped by adjacent lines.

This is both an aesthetic and legibility failure. The tops of letters are literally invisible, cut off by the line above. The problem is worst on mobile, where OS-level line-height defaults are even tighter.

Root cause: Default line-height: 1.5 was designed for Latin scripts. Tibetan normal text requires at minimum line-height: 1.8; mantra/dharani text with complex stacks requires line-height: 2.2–2.4.
CSS fix: .tr-guard sets safe Tibetan defaults. .tr-stack-safe adds extra line-height and padding-block for complex mantra contexts. Font designers must also correctly set ascender/descender metrics in the OS/2 and hhea tables.
Same text — tight vs safe line-height
བསྒྲུབས། བསྐྱངས།
མགྲོན། སྒྲུབ།
བརྒྱད། སྤྲུལ།
line-height: 1.4 — stacks clipped
བསྒྲུབས། བསྐྱངས།
མགྲོན། སྒྲུབ།
བརྒྱད། སྤྲུལ།
.tr-stack-safe — full stacks visible
04
High

Justification Failure

Browsers can't justify Tibetan — the script has no spaces for expansion

Tibetan body text is traditionally set justified — scripture and formal documents use full-width lines. But CSS justification works by expanding inter-word spaces (U+0020). Tibetan has no word spaces; syllables are separated only by tsheg. Browsers treat entire paragraphs as single "words" and either fail to justify at all, or produce ragged-right text regardless of the declared alignment.

When zero-width spaces are injected at syllable boundaries (as a workaround), justification "works" — but spaces are inserted at every tsheg boundary, creating ugly gaps inside words rather than between them.

Root cause: CSS text justification requires word boundaries (U+0020). Tibetan word segmentation requires linguistic knowledge — a dictionary or ML model — that browsers don't have.
Partial fix: .tr-justify-bo applies slight word-spacing reduction to improve appearance.
Full fix: Requires word-boundary-aware segmentation and selective zero-width space injection — currently an active research problem in Tibetan NLP.
text-align: justify — Tibetan vs Latin
བཅོམ་ལྡན་འདས་མ་ཤེས་རབ་ཀྱི་ཕ་རོལ་ཏུ་ཕྱིན་པའི་སྙིང་པོ། འདི་སྐད་བདག་གིས་ཐོས་པ་དུས་གཅིག་ན། བཅོམ་ལྡན་འདས་རྒྱལ་པོའི་ཁབ་བྱ་རྒོད་ཕུང་པོའི་རི་ལ།
Tibetan — justify has no effect, text stays ragged-right
The Heart Sutra is one of the most important texts in Mahayana Buddhism, containing the essence of the Perfection of Wisdom teachings.
Latin — justify works because spaces exist between words
05
Medium

Double-Shad Splitting

The sentence-end marker ། ། gets broken across two lines

The double shad (། །) is Tibetan's paragraph marker — it signals the end of a major textual unit and must always appear as a visual unit. When it falls near a line end, browsers can break between the two shad characters, leaving one on each line. To any reader of scripture or formal Tibetan, this is immediately wrong.

Root cause: Each ། (U+0F0D, Tibetan Mark Shad) is a valid line-break point in Unicode. No mechanism enforces non-breaking treatment of the two-shad sequence.
CSS fix: Wrap ། ། in <span class="tr-shad-pair">, which applies white-space: nowrap. termaUI provides this utility class. For programmatic content, terma.prepare() applies this automatically.
Double-shad demonstration
ཤེས་རབ་ཀྱི་ཕ་རོལ་ཏུ་ཕྱིན་པ། ། །
Wrapped with .tr-shad-pair — double shad stays together.
06
Medium

Glyph Fallback Chaos

Missing glyphs silently pull in system fonts — mid-word

When a font lacks a glyph for a Unicode code point, the browser silently falls back to the next font in the stack — or, failing that, any system font that has the glyph. In Tibetan text, syllables within a single word can render in visually incompatible fonts, with mismatched weight, stroke style, and proportions. The degradation is invisible to non-Tibetan readers but immediately jarring to any literate user.

Root cause: Incomplete glyph sets in every currently available Tibetan font. Even the best-covered fonts miss valid Unicode Tibetan code points: Noto Serif Tibetan has ~1,891 glyphs, Tibetan Machine Uni has ~5,110 — but the full Unicode Tibetan block with all valid composite sequences requires significantly more.
Required fix: Fonts with complete coverage of U+0F00–U+0FFF (Tibetan Unicode block) plus all valid multi-codepoint stack sequences. The Terma fonts target 5,000+ glyphs with correct shaping rules for every sequence — verified by testing against the complete Unicode Tibetan conformance test suite.
Same text — single font vs fallback mix
ཨོཾ་མ་ཎི་པདྨེ་ཧཱུྃ།
Full coverage — consistent Jomolhari throughout
ཨོཾ་མ་ཎི་པདྨེ་ཧཱུྃ།
Incomplete font — glyphs fall back to mismatched system fonts

Part Two

The Cultural & Educational Gap.

60+
Tibetan fonts in public repositories
Unicode & legacy combined
<12
Render correctly on modern devices
Unicode, no ghost circles, iOS + Windows
0
Designed for children or learners
No rounded, approachable, pedagogic face exists
6M
Tibetan speakers across 40 countries
1,400 years of continuous literary tradition

The sixty-plus fonts you find in repositories collapse quickly under scrutiny. Half are legacy fonts — pre-Unicode, ASCII-encoded typefaces from the 1990s whose characters map to English keyboard positions, not Unicode code points. They are invisible to search engines, unreadable by screen readers, incompatible with social media, and non-functional on any modern mobile OS. They look like Tibetan. They are not, by any digital definition, Tibetan text.

Of the Unicode fonts that remain, most have broken OpenType tables. Tibetan is a vertically composed script — vowels sit above the consonant, subscript consonants stack below it. This vertical composition requires pre-computed glyph sequences registered in a font's GSUB table. When those tables are incomplete, the shaping engine inserts a dotted circle placeholder ◌ inside the word — a visible declaration of failure. Filtering for fonts where complex consonant stacks render without ghost circles, without clipping, and consistently across both iOS (CoreText) and Windows (Uniscribe) leaves fewer than a dozen.

Of those twelve, none were designed for children. Every one is scriptural in aesthetic register — built to evoke 18th-century woodblock prints and formal government documents. This is not a trivial observation. Typography shapes how learners perceive a language. A script that only appears in solemn, classical forms is unconsciously filed away as formal, religious, and not for me. The diaspora community has no equivalent of the rounded, approachable letterforms that made Latin literacy feel welcoming to generations of children. We lack a Tibetan Comic Sans — and that is not a joke. The absence of a child-friendly Tibetan font is a structural obstacle to intergenerational language transmission, documented by educators in every diaspora community we spoke with.

📚

Children's Books & Apps

Rounded, warm letterforms that feel inviting. Currently impossible without commissioning bespoke lettering for every single project at prohibitive cost.

📱

Digital Interfaces

A geometric sans-serif optimised for small screen sizes, UI labels, and both dark and light mode. The Tibetan equivalent of a system UI font. It does not exist.

🎨

Creative Content

Comics, posters, social media, merchandise, video games. The diaspora community has no expressive typographic palette to draw from when making modern cultural content.

🎓

Academic Publishing

A scholarly serif that works in footnotes, parallel-text layouts, and interlinear glossing — while remaining elegant at display sizes. Not yet built.


Part Three

The Existing Font Landscape.

What exists, what's missing, and why nothing currently available solves the problem.

Font Style ~Glyphs License Children Variable Screen-opt. Ghost-free
Jomolhari Classical Uchen 3,333 SIL OFL ~
Noto Serif Tibetan Modern Serif 1,891 SIL OFL ~
Tibetan Machine Uni Bold Display 5,110 GPL v2 ~
Monlam Bodyig Elegant Literary ~2,500 Open ~
Qomolangma-Drutsa Cursive Drutsa ~2,000 Open
In Development — Terma Foundry
Terma Serif Scholarly Serif 5,000+ target SIL OFL planned ✓ goal
Terma Sans UI Sans-Serif 5,000+ target SIL OFL planned ✓ goal
Terma Lotsawa Child-Friendly Display 3,000+ target SIL OFL ✓ goal
~ = partial coverage. Glyph counts from available font metadata; exact figures vary by counting method.

Part Four

What a Complete Tibetan Font Requires.

The engineering specifications for a font that eliminates all six rendering failures described above.

01

Glyph Coverage

Complete coverage of the Unicode Tibetan block (U+0F00–U+0FFF) plus all valid multi-codepoint composite sequences — base consonant stacked with every valid subjoined consonant. Estimated 5,000+ total glyphs for full coverage including Sanskrit-origin stacks used in mantras and dharanis.

02

OpenType GSUB Tables

Correct substitution rules for: blws (Below Base Substitution), abvs (Above Base Substitution), vatu (Vattu Variants), liga (Standard Ligatures). These rules map base consonant + combining marks → pre-composed stacked glyph, eliminating ghost circles at the source.

03

Metric Engineering

Ascender/descender metrics in the OS/2 and hhea tables must accommodate the tallest valid Tibetan stack — typically 3–4 consonants high. Advance widths must correctly reflect tsheg-based syllable spacing. Line-height recommendations must be documented with the font and verified on real text.

04

Hinting

PostScript or TrueType hinting aligns stems and strokes to pixel boundaries for screen rendering at small sizes (9–14px). Tibetan's complex stacked forms require hinting decisions for each level of the stack — the most labour-intensive part of font production, and the most commonly skipped.

05

Cross-Platform Testing

Tibetan shaping is handled differently by HarfBuzz (Linux, Chrome, Firefox), Uniscribe (Windows legacy apps), and CoreText (macOS/iOS). Fonts must be tested against all three shaping engines using dedicated test suites covering every valid Unicode Tibetan sequence.

06

Cultural Verification

Every stroke decision — the angle of a hairline, the weight of a headstroke, the proportions of a three-consonant stack — must be verified against traditional calligraphic models by qualified practitioners. Technical Unicode compliance without cultural accuracy does not produce a legitimate Tibetan typeface.


Part Five

Our Solution.

Three typefaces being built from zero — with the full specification above applied to each.

Scholarly Serif

Terma Serif

Rooted in classical Uchen manuscript tradition and re-engineered for the 21st century. Optimised for long-form reading, academic publishing, parallel-text layouts, and interlinear glossing. Complete Unicode coverage with a planned variable weight axis — from Light for body text to Bold for headings.

Books · Academia · Scripture · Long-form digital · Footnotes
UI Sans-Serif

Terma Sans

The first Tibetan sans-serif designed from the ground up for digital interfaces. Geometric proportions, optical corrections for small sizes, dark-mode tested, accessible contrast ratios. Designed to sit naturally alongside Latin, Chinese, and Devanagari in multilingual products. The UI font Tibetan app developers have never had.

Apps · UI · Navigation · Web · Signage · Multilingual layouts
Child-Friendly Display

Terma Lotsawa

Rounded terminals, open counters, generous proportions — designed alongside educators to feel approachable to young learners while remaining typographically authentic. Developed in direct response to the single most-reported barrier to Tibetan language transmission in diaspora communities: "the writing looked too hard."

Children's books · Education apps · Learning games · Heritage media
Support This Work

These fonts will be free — forever.

All three typefaces will be released under the SIL Open Font License — free for personal and commercial use, open to the entire Tibetan-speaking world. To get there, we need funding for master calligraphic originals, glyph drawing, OpenType engineering, cross-platform testing, and educator review cycles. Every contribution directly funds a glyph that doesn't yet exist.

Support the Foundry → Full Story Meet the Team Available Fonts Now