Back to Insights
typographyi18nux

Building for Cyrillic Keyboards: What Nobody Tells You About CIS UX

Designing interfaces for users who switch between Cyrillic, Kazakh extended characters, and Latin every day requires more than font choices — it demands rethinking layout, input, and typographic scale.

By Erlan NurlanovichApr 15, 2026

When a client in Almaty asked why their checkout form kept frustrating mobile users, the answer wasn't in the payment gateway. It was in the keyboard. Specifically, the gap between the Kazakh Cyrillic layout on Android and the Latin fallback that appeared when their form's autocomplete triggered the "email" field type — bumping users out of their native input flow mid-sentence.

This is the kind of problem that doesn't appear in a Figma review.

The Three-Script Reality

Users across Kazakhstan, Russia, and Central Asia routinely operate across three distinct script environments:

  1. Cyrillic Russian — the baseline for most interfaces
  2. Kazakh Cyrillic — 42-character alphabet with letters like Ә, Ғ, Қ, Ң, Ө, Ұ, Ү, Һ not present in Russian
  3. Latin — creeping in via English loanwords, brand names, and Kazakhstan's ongoing script transition policy

A search field that works perfectly in Russian will visually break when a Kazakh user types "Нұр" — because the glyph metrics for Ұ and Ү are wider than their Russian counterparts and most "safe" CIS font stacks never tested for them.

The assumption that "Cyrillic support" means Russian support has cost more than one CIS product its local market.

Typography: What Actually Works

After building interfaces for clients in Almaty, Tashkent, and Novosibirsk, here's what we've landed on:

Font stack for CIS interfaces:

body {
  font-family:
    'Inter',
    'PT Sans',
    'Noto Sans',
    system-ui,
    -apple-system,
    sans-serif;
}

Inter covers most Latin and Cyrillic glyphs well. PT Sans was designed specifically for Russian-language publishing and handles the optical weight balance that generic sans-serifs miss. Noto Sans is the nuclear fallback — it covers every Unicode block, including all Kazakh extended characters.

Sizing considerations:

Cyrillic text reads about 10–15% wider than equivalent Latin text at the same point size. Budget this into your layout:

  • Navigation items with Cyrillic labels need 20% more horizontal space than English designs
  • Truncation breakpoints should account for worst-case Cyrillic string length
  • Line-height should be 1.5–1.6 for body text, not the 1.4 common in English-first designs

Input Fields and IME Conflicts

The most common bug we fix on CIS projects: form validation that fires on every keystroke instead of on blur. In Latin input, this is merely annoying. With Cyrillic and especially with Kazakh IME (Input Method Editor), where composing a character sometimes requires multiple keystrokes, it's actively broken.

/* Don't do this for CIS forms */
input:invalid {
  border-color: red; /* fires mid-composition */
}

/* Do this instead */
input:invalid:not(:focus) {
  border-color: red;
}

The :not(:focus) rule ensures validation feedback only appears after the user has left the field — after their Cyrillic composition is complete.

The Keyboard Toggle Problem

One detail that burned us on a Tashkent e-commerce project: users switch keyboards constantly. A product search in Russian, a promo code in Latin, a phone number that starts Cyrillic and ends in an international format. Every keyboard toggle is a cognitive interruption.

Our mitigation strategy:

  • Use inputmode="numeric" for phone and OTP fields to invoke the numeric keyboard directly, bypassing the script question entirely
  • For name fields, add autocomplete="name" so the OS can autofill without triggering a layout recalc when the keyboard opens
  • Test every form on a real Android device with a CIS locale — iOS emulation is not sufficient because the CIS Android keyboard ecosystem (SwiftKey, GBoard CIS packs, Samsung keyboard with Kazakh) behaves differently

Testing Checklist

Before shipping any CIS-facing interface, run through:

  • [ ] Render a 42-character Kazakh alphabet string in every text container
  • [ ] Test tab flow through all form fields on a Cyrillic-layout keyboard
  • [ ] Confirm truncation at mobile breakpoint with а Kazakh-length product name
  • [ ] Verify that validation errors appear on blur, not on input
  • [ ] Check that placeholder text in Cyrillic doesn't get clipped by the input's line-height

The keyboard is where your users actually live. Design for it.

More from Tengri Insights