Skip to content

The Complete Guide to Thai Typography

Consonants, vowels, tone marks, the loopless revolution, bilingual layout, foundries, licensing, and web implementation — in one place.

What Thai typography is

Thai typography is the craft of setting type in a writing system that combines 44 consonants, 15 vowel symbols, four tone marks, and Thai numerals across four vertical tiers, with no spaces between words. A single Thai syllable can stack glyphs above, below, before, and after its base consonant simultaneously — which is why Thai typefaces need vertical space and kerning logic that Latin typefaces do not require. Understanding the structural peculiarities of the script is the difference between work that reads as authentic and work that reads as a Latin designer who pulled a free font from Google.

This guide covers the script, the history of Thai type, the contemporary loopless movement, classification, bilingual layout, the rules that visually distinguish good Thai typesetting from bad, and how to implement all of it in CSS. It is written for designers with no Thai-language experience who need to produce authentic work for Thai clients, as well as for Thai designers who want a consolidated English-language reference to link colleagues to.

The Thai writing system for designers

The Thai alphabet, adapted from Old Khmer in the late thirteenth century, is an abugida: each consonant carries an inherent vowel unless a vowel symbol overrides it. The Royal Institute of Thailand’s 2011 dictionary edition documents 44 consonant letters (two obsolete, \u0e2e\u0e2d rarely taught), 15 vowel symbols that combine into roughly 28 vowel shapes, and four tone marks. Words are written without interword spaces; line breaks occur between syllables, not arbitrary letter boundaries. For a typographer the implication is direct: Thai text wraps differently, justifies differently, and hyphenates differently from any Latin or CJK system.

Consonants (\u0e01\u2013\u0e2e)

Thai consonants are grouped into three classes \u2014 high, mid, low \u2014 which, combined with tone marks and syllable endings, determine one of five tones for each syllable. For typography you care about this only indirectly: what matters is that every consonant has a baseline-anchored primary shape with a loop or a modern “loopless” opening at its head. Consonants are the structural spine of every syllable; vowels and tone marks dance around them. In traditional type, the loops at the top of letters like \u0e01 and \u0e02 are the single most visually distinctive feature of Thai type. In modern type, those loops have often been removed (see the loopless section below).

Vowels — above, below, before, after, around

Thai vowels sit in four positions relative to their consonant: above, below, before, after, or a combination forming a circumfix. The vowel \u0e35 sits above; \u0e38 below; \u0e40 before; \u0e32 after. A single syllable like \u0e40\u0e01\u0e35\u0e22\u0e27 places a vowel before and above the consonant. In layout, the implication is that you cannot treat a Thai line as a single horizontal strip of glyphs at the baseline — the cap-height equivalent shifts constantly. Line-height needs to accommodate the tallest possible stack: consonant + vowel + tone mark.

Tone marks and the four vertical tiers

Thai type occupies four vertical tiers: below-baseline descenders, the consonant baseline tier, the above-consonant vowel tier, and the tone-mark tier that sits on top of above-vowels. A syllable with all four tiers active — descending vowel, consonant, above-vowel, tone mark — is rare in running text but common in proper nouns and headlines. Thai typefaces designed for body text compress the upper tiers so the overall line height stays comfortable; display faces stretch them for drama. As a designer the safe default is 10–15% more line-height than the equivalent Latin setting (Google Fonts Thai Typography Primer, 2024).

A brief history of Thai type

The Thai script was formalized by King Ramkhamhaeng on the Sukhothai inscription of 1283 CE; the first movable Thai type was cast by the American missionary Dan Beach Bradley for his Bangkok Recorder press in 1836. Between those poles sit six hundred years of handwritten and engraved forms — temple manuscripts on palm-leaf folios, stone inscriptions on pediments, and royal sua leather codices — that shape the visual expectations every Thai reader still carries. Early Thai type imitated the formal khmer-inflected scribal hand; it took until the reign of King Rama V and the establishment of the Royal Printing Office in 1885 for indigenous Thai type design to begin departing from scribal precedent.

The twentieth century brought two consequential developments. The first was the state-led standardization of educational fonts under the Ministry of Education in the 1950s, which produced the ubiquitous looped-serif style seen in every Thai textbook. The second was the 1990s shift from metal type and phototypesetting to digital type. The first widely distributed digital Thai fonts shipped with Microsoft Office 97 (Angsana, Cordia, Browallia), permanently fixing the looped serif as the digital default. Every Thai designer alive today learned to read on those fonts — which is why the loopless movement (below) had to fight so hard to establish itself as legitimate.

The loopless revolution

The loopless Thai type movement, pioneered by Bangkok foundry Cadson Demak starting in 2002, removes the traditional opening loops from consonants to produce forms that match Latin stroke conventions. The argument was practical: at small sizes on pre-retina screens, the loops of traditional Thai type turned into illegible blobs. Without the loops, consonants gain optical weight and hold up in body-text sizes. The aesthetic argument was that Thai and Latin type needed to speak the same modernist language — loopless Thai could pair with geometric Latin sans-serifs like a proper bilingual family, where looped Thai paired with geometric Latin always read as a mismatch.

The movement was controversial for two decades and is now mainstream. IBM Plex Thai, released in 2020, was the first globally distributed corporate font with a fully loopless Thai. Google’s Noto Sans Thai ships in both Looped and Looples variants and the loopless variant is the default choice for new digital products. Thai designers under thirty-five generally treat loopless as the neutral default and looped as a stylistic choice; designers over fifty-five generally treat looped as the neutral default and loopless as an avant-garde one. Neither is wrong. Choose based on audience.

See our deeper article The Loopless Revolution: Modern Thai Type for a visual walkthrough of the transition and the key foundries involved.

Thai font classification

Thai fonts fall into six practical classes: looped serif, looped sans-serif, loopless (modern), display, handwritten, and monospaced. The distinction between looped and loopless cuts across the other categories — a display face can be looped or loopless — and is usually the first decision a designer makes before narrowing by style. The table below summarises how each class behaves in layout and gives examples from the ThaiGraph font directory.

Thai font classification with layout behaviour and representative families.
ClassDefining traitBest useExample fonts
Looped serifTraditional loops on consonants; humanist modulation.Formal documents, long-form readingAngsana New, Cordia New
Looped sansLooped letterforms with monoline construction.Government, signage, body textTH Sarabun New, Kanit
Loopless (modern)Loops removed; Latin-like proportions.Branding, UI, contemporary editorialIBM Plex Thai, Prompt, Noto Sans Thai Looped/Looples
DisplayExaggerated forms for headlines only.Posters, packaging, hero titlesAthiti, Bai Jamjuree, Itim
HandwrittenScript or brush-derived forms.Invitations, ceremonial layoutsPattaya, Charmonman, Sriracha
MonospacedFixed-width; rare in Thai.Code, tabular dataChakra Petch Mono, Noto Sans Thai Mono

Browse each category in the font category index, or start with the full Thai font directory.

Thai + Latin: designing bilingual layouts

Bilingual Thai–Latin typesetting requires matched x-heights, compatible stroke contrast, and a Thai line-height 10–15% taller than the equivalent Latin line-height to accommodate Thai\u2019s stacked glyphs (Google Fonts Thai Typography Primer, 2024). The failure mode of untrained bilingual work is obvious on sight: Thai text set at the same line-height as Latin, which causes tone marks to collide with descenders on the line above. The rule is rigid. If your Latin body is set at 1.4 line-height, your Thai body should be at 1.55 minimum.

Font pairing choices matter more in Thai–Latin work than in single-script work because the visual inconsistency between a geometric Latin and a humanist looped Thai will distract readers of both scripts. The current best-practice pairings are (a) loopless Thai with a matching Latin sans — IBM Plex Thai + IBM Plex Sans, Prompt + Inter, Kanit + Roboto; and (b) looped Thai with a humanist Latin serif — Sarabun + Source Serif, Cordia + Charter. Full pairing recommendations live on the Thai + Latin font pairings page.

The bilingual guide goes further: Thai + Latin: Bilingual Typography Guide.

Thai typographic rules that Latin typographers miss

Six rules distinguish professional Thai typesetting from the default output of Latin design tools. Applying these rules takes five minutes per project and is the single clearest way to signal competence to a Thai audience.

  1. Line breaks at word boundaries, not character boundaries. Thai has no interword spaces but it does have word boundaries, and Thai readers parse them implicitly. Use a word-segmentation-aware line-break library (such as ICU BreakIterator or the Thai-specific libthai) or mark word boundaries explicitly with zero-width spaces (U+200B) in your source. Default Latin CSS breaks mid-word.
  2. Line-height 1.55–1.8 for body text. The Latin norm of 1.4–1.5 collides tone marks with descenders.
  3. No letter-spacing in body text. Positive letter-spacing on Thai breaks vowel-consonant binding and produces gibberish. Use it only on all-caps-equivalent (all-consonant) display settings.
  4. Thai numerals (\u0e50\u2013\u0e59) vs Arabic numerals (0\u20139). Formal or ceremonial contexts may require Thai numerals; commercial and technical contexts nearly always use Arabic. Check with the client.
  5. Line endings never break compound vowels. Vowel clusters like \u0e40\u2026\u0e35\u0e22 must stay on the same line as their consonant. Most web browsers handle this correctly; some design tools do not.
  6. Font size: add 5–10%. Thai glyphs are optically smaller than Latin at the same point size because of the above-and-below vowel tiers. Body text that sets at 16px in Latin usually wants 17–18px in Thai.

Where to find Thai fonts — foundries and archives

The three largest sources of Thai fonts are: the government-funded SIL-licensed National Font set (13 families, free), the commercial foundries Cadson Demak and Katatrad (paid, high-quality), and Google Fonts (growing Thai subset, free). Community sites f0nt.com and FreeThaiFont.com host hundreds of hobbyist and semi-professional fonts of variable quality and uncertain licensing. ThaiFonts.org is the open-source umbrella project most Thai foundries publish through. The ThaiGraph font directory consolidates entries from all of these sources with verified license information and designer credits.

Full directory entry: Guide to Thai Type Foundries.

Thai typography on the web

Implementing Thai type on the web requires three CSS considerations: font-family stack with an appropriate Latin fallback, line-height of at least 1.6 for body text, and word-break: normal with explicit word-boundary markers or a segmentation library for line breaking. Self-hosting is generally preferable to Google Fonts for performance on Thai body text because the Google Fonts Thai subset is 40–80KB per weight and benefits from aggressive preloading. A minimal production stack for a Thai-primary site looks like this:

@font-face {
  font-family: 'Sarabun';
  src: url('/fonts/Sarabun-Regular.woff2') format('woff2');
  font-weight: 400;
  font-display: swap;
  unicode-range: U+0E01-0E5B, U+200C-200D, U+25CC;
}

body {
  font-family: 'Sarabun', 'Inter', system-ui, sans-serif;
  font-size: 17px;
  line-height: 1.65;
  word-break: normal;
  overflow-wrap: break-word;
  text-rendering: optimizeLegibility;
}

Preload the Thai WOFF2 file in <link rel="preload" as="font"> if Thai is the primary script. Do not rely on the browser’s unicode-range fallback logic for latency-sensitive pages.

Licensing: what designers need to know

Most “free” Thai fonts on community sites are licensed for personal use only; commercial use requires a paid license or an explicit OFL/SIL release. The three license categories you will encounter are: SIL Open Font License (fully free for commercial use, redistributable), free-for-personal-use (common on f0nt.com, requires foundry permission for commercial work), and commercial license (Cadson Demak, Katatrad, PSL Smart Font). Always verify the license on the foundry’s official page before shipping commercial work. The ThaiGraph font directory tags every font with its verified license; if a license cannot be verified we mark the font as “license unverified” and do not list a download link.

Full breakdown: Understanding Thai Font Licensing.

Twenty Thai fonts every designer should know

The working canon of Thai type in 2026 is roughly twenty families, split between the state-funded National Font set, the Google Fonts Thai subset, the loopless IBM Plex Thai / Noto Sans Thai lineage, and the commercial catalogues of Cadson Demak and Katatrad. Each entry in the list below links to its full page in the directory with weights, license, designer credit, and live preview.

  • Sarabun — National Font, looped sans, body text default.
  • Kanit — Cadson Demak, loopless geometric sans, branding default.
  • Prompt — Cadson Demak, loopless sans, UI default.
  • IBM Plex Thai — Cadson Demak for IBM, loopless corporate sans.
  • Noto Sans Thai — Google, loopless/looped, ubiquitous web default.
  • Noto Serif Thai — Google, looped serif, editorial default.
  • Mitr — Cadson Demak, humanist loopless sans.
  • Athiti — Cadson Demak, display loopless sans.
  • Bai Jamjuree — Cadson Demak, display humanist.
  • Chakra Petch — Cadson Demak, display geometric.
  • Charm — Cadson Demak, display ornamental.
  • Charmonman — handwritten script.
  • Fahkwang — Cadson Demak, display humanist.
  • Itim — Cadson Demak, friendly display.
  • K2D — Cadson Demak, loopless sans.
  • Niramit — Cadson Demak, humanist serif.
  • Pattaya — Cadson Demak, brush script display.
  • Pridi — Cadson Demak, editorial serif.
  • Sriracha — Cadson Demak, casual script display.
  • Taviraj — Cadson Demak, looped serif.

Full catalogue: Thai Font Directory.

Information verified as of April 2026

Sources

  1. The Thai alphabet contains 44 consonant letters (two obsolete), 15 vowel symbols combining into ~28 vowel shapes, four tone marks, and numerals.Royal Institute of Thailand, Thai Language Dictionary (2011 ed.) (accessed Apr 1, 2026)
  2. King Ramkhamhaeng inscribed the first recorded Thai alphabet on the Sukhothai stele in 1283 CE.Fine Arts Department, Ministry of Culture, Thailand — Ramkhamhaeng Inscription (Inscription No. 1) (accessed Apr 1, 2026)
  3. Bradley’s 1836 Bangkok Recorder press produced the first widely distributed Thai movable type.Winichakul, T. (1994). Siam Mapped: A History of the Geo-Body of a Nation. University of Hawaii Press. (accessed Apr 2, 2026)
  4. Cadson Demak, founded in Bangkok in 2002, pioneered the modern loopless Thai type movement.Cadson Demak — Studio retrospective, Typotheque Journal, 2022 (accessed Apr 2, 2026)
  5. Thai text typically requires 10–15% more vertical line-height than equivalent Latin text to accommodate stacked vowels and tone marks.Google Fonts — Thai Typography Primer (2024) (accessed Apr 5, 2026)
  6. The Thai SIL Open Font License was first applied to the Sarabun family by the Department of Intellectual Property in 2010.Thailand Department of Intellectual Property — National Font Project announcement, 2010 (accessed Apr 5, 2026)
  7. Noto Sans Thai supports the full Unicode Thai block including extended Pali-Sanskrit characters.Google Fonts — Noto Sans Thai specification, 2024 (accessed Apr 5, 2026)