Skip to content

figma tutorial \u00b7 beginner · 20 min

Setting Up Thai Typography in Figma

Setting Up Thai Typography in Figma

What you’ll make

A Figma file configured for production Thai UI work: self-hosted Thai fonts loaded, five text styles defined (Display, Heading, Body, Caption, Label) with correct 1.55+ line-heights, bilingual font fallback for Thai-Latin mixed strings, and Figma Variables tokens for per-language overrides. The setup takes 20 minutes and is the foundation for every Thai product design project — bypass it and your team will spend months correcting collapsed line-heights and broken tone marks downstream.

What you need

Step 1: Install Thai fonts locally and verify in Figma

Install all four fonts at the OS level first. macOS: Font Book > File > Add Fonts. Windows: right-click font file > Install. Relaunch Figma Desktop — browser Figma picks up OS fonts too but desktop is more reliable. Open a new file and create a text frame (T). Type a Thai test string: สวัสดีครับ ThaiGraph 2026. Open the font picker in the right panel. Type Sarabun — if the font appears and renders the Thai correctly with proper tone-mark positioning, setup is good. If Thai renders as boxes (tofu), restart Figma and check that the font is installed at the OS level, not just available in Figma’s cloud font list.

Step 2: Create the five-style typography system

In Figma, open Assets panel > Text Styles (or just ⌘/Ctrl+K to search). Define five text styles with these specs — the Thai values, not the Latin defaults:

For each, click the + next to Text Styles in the right panel, name as above, save. The 1.55+ line-height rule applies because Thai tone marks need vertical headroom — see Google Fonts Thai Typography Primer for the full explanation.

Step 3: Duplicate for Latin with smaller line-heights

Thai line-heights are optically too tall for pure-Latin content. Create parallel Latin styles with tighter leading. Right-click each Thai style > Duplicate Style. Rename to Display / Latin, Heading / Latin, etc. Change each:

If your product is Thai-only, skip this step. If bilingual, both style sets are mandatory. Pair Sarabun with Inter for the Latin body — the x-heights match closely (Sarabun 500, Inter 510 at 1000 em).

Step 4: Build language Variables (modes)

Figma Variables with modes is the 2024+ pattern for per-language typography tokens. Open Local Variables (right panel) > + Create Variable. Create a Collection named Typography. Add two modes: Thai and Latin. Create Variables: font-family-body, font-family-heading, line-height-body, line-height-heading. For each variable, assign different values per mode — Thai mode uses Sarabun and 1.625; Latin mode uses Inter and 1.5. Bind these variables to your text styles via the Apply Variable button on each style setting. Now a single style adapts to language context automatically when a frame is switched to Thai or Latin mode.

Step 5: Set up bilingual character fallback

Thai-Latin mixed strings (brand names inside Thai copy) need a font-family fallback chain. Figma does not natively support CSS-style fallback chains, but it respects Unicode ranges when the designer inserts characters in mixed scripts. Best practice: use a font family that covers both scripts natively. Sarabun, Kanit, Noto Sans Thai, and IBM Plex Thai all ship with Latin character sets. For consistent bilingual rendering, use Sarabun for body (Thai + Latin) rather than pairing Sarabun/Inter — the latter only matters when the product brief requires a specifically European-feeling Latin.

Step 6: Create a Thai-aware component library

Create a new file named ThaiGraph Design System / Typography. Publish the five Thai text styles and the five Latin text styles as a shared library (Assets > Publish Library). Every product file in the organisation subscribes to this library via Assets > Libraries. Add a cover page with a specimen showing all ten styles side by side, both Thai and Latin text samples in each, and a note on the 1.55+ rule. The specimen is documentation; it prevents the common mistake of designers applying a Latin Heading style to Thai text and collapsing the line height.

Step 7: Test with real Thai content

Open a product screen. Paste in actual Thai content — product descriptions, button labels, error messages in full sentences. Watch for four specific failure modes: (1) tone marks that collide with the line above, (2) descender-heavy words like ปู or ญาติ that collide with the line below, (3) bilingual mix-ups where an embedded English word breaks the Thai baseline, (4) button labels where the Thai text is 30-50% longer than the English equivalent and overflows the button. Adjust Variables or components as needed. Ship with confidence that the Thai side of the product matches the Latin side in craft.

Cultural considerations

Thai UI font choice is a silent audience signal. Loopless sans (Sarabun, Kanit, IBM Plex Thai) reads as modern and startup-oriented to Thai users; looped serif (Angsana, Cordia) reads as government, legacy enterprise, or intentional retro. The Digital Government Development Agency’s UX/UI standards (DGA, 2023) specify Sarabun as the default for consumer-facing government services — its clean looped sans is the compromise between traditional readability and modern cleanliness. For non-government consumer products in 2026, loopless is the dominant choice; IBM Plex Thai is the current darling for fintech and SaaS, Kanit for consumer apps, Sarabun for mixed contexts. The one context where Angsana and Cordia remain correct is contractual, legal, and academic typesetting where reader expectation is conservative.

Common mistakes

Source files and next steps

Download the ThaiGraph Figma Thai Typography starter library from the font directory — the file is shared at library link on each font page. Key fonts: Sarabun, Kanit, IBM Plex Thai, Noto Sans Thai. For broader bilingual typography rules see Thai + Latin: Bilingual Typography Guide and the pillar Complete Guide to Thai Typography. Next Figma tutorial: Building a Thai Design System in Figma.

Information verified as of April 2026

Sources

  1. Figma added native Thai text shaping support for tone marks and combining diacritics in the 2022 desktop release, ending a decade of workarounds for Thai UI designers.Figma Changelog — Complex Script Support (April 2022) (accessed Apr 8, 2026)
  2. Thai text requires a minimum line-height of 1.55 in UI work to prevent tone mark collisions with descenders on the line above.Google Fonts — Thai Typography Primer (2024) (accessed Apr 5, 2026)
  3. Figma's Variables feature supports per-language typography tokens, allowing bilingual products to maintain separate Thai and Latin font-size and line-height tokens without duplicating styles.Figma — Variables and Modes Documentation (2024) (accessed Apr 8, 2026)
  4. Sarabun is the most used Thai UI font in production Thai government applications, per Digital Government Development Agency technical standards.Digital Government Development Agency (DGA), Thailand — UX/UI Design Standards for Government Services, 2023 (accessed Apr 9, 2026)