Every writing system is, at its core, a solution to a problem: how do you take the sounds of a living language and give them a stable, visual form? The answer is never obvious. It requires decisions — about which sounds matter, how to represent them, and how to make the system learnable and consistent.

This post walks through how those decisions were made for Yapiri — from the first phonological analysis of Kokborok to the final exported font file.

Step One — Listening to the Language

Before drawing a single glyph, I had to understand what sounds Kokborok actually uses. This is called phonological analysis — the process of identifying every distinct sound in a language that can change the meaning of a word.

Kokborok is a Tibeto-Burman language. Like many languages in that family, it has a rich consonant inventory that includes plain stops, aspirated stops, and nasal consonants that do not exist in most European languages. It has six vowels, including a schwa — the neutral central vowel heard in the unstressed syllables of many Kokborok words. And it uses tone and reduplication in ways that required dedicated diacritic marks.

The inventory I settled on:

25 consonants — including plain and aspirated pairs for p/ph, t/th, k/kh, ch/chh, and a palatal nasal variant n' · 6 vowels — a, e, i, u, o, and schwa (ə) · 10 numerals — a dedicated set of Yapiri digits · 5 punctuation marks — comma, full stop, exclamation, question, and quotation · · 2 diacritics — a high tone mark and a reduplication mark, both combining characters that attach to base glyphs · 1 adopted symbol — the hyphen (U+002D), borrowed from global punctuation but given a specific structural role as the reduplication connector for whole-word repetition

That is 49 characters in total. Every one of them earned its place by representing a sound or function that is genuinely present in Kokborok — no borrowing from other scripts, no approximations.

Step Two — Designing the Glyphs

With the phonological inventory mapped, the design work began. The central question was: what should Yapiri look like?

The answer had to satisfy several constraints at once. The glyphs needed to feel visually unified — as if they all belonged to the same family. They needed to be legible at small sizes and on screens. They needed to be learnable, meaning that related sounds should have visually related symbols. And they needed to feel modern and clean — not a mimicry of any existing script, but something new.

Each glyph was drawn in Inkscape using Bézier curves. The stroke weight is consistent throughout, with rounded linecaps that give the script a fluid, contemporary quality. There are no serifs, no sharp terminals — just clean curves and deliberate angles.

      The six vowels of Yapiri — a, e, i, u, o, ə

One of the most important design decisions was how to handle aspirated consonants. In Kokborok, the difference between /p/ and /ph/ — or /t/ and /th/ — is phonemically significant. It changes meaning. So these pairs needed their own dedicated glyphs, but ideally ones where the relationship between plain and aspirated was visually obvious.

The solution was a consistent visual modification: each aspirated consonant is derived from its plain counterpart through a systematic addition to the base form. A learner who knows the glyph for /k/ will immediately recognise the glyph for /kh/ — because the latter is the former, with a specific stroke added. The phonological relationship is encoded directly into the visual design.

  p / ph
  t / th
  k / kh
Plain and aspirated pairs — p/ph · t/th · k/kh

The same logic applies to other phonologically related pairs. The nasal consonants, the fricatives, the affricates — each group has a visual coherence that makes the script easier to learn than a collection of arbitrary symbols would be.

The numeral set follows the same design principles as the rest of the script. Each of the ten digits — zero through nine — is a fully original glyph, drawn from scratch rather than borrowed or adapted from any existing numeral tradition. The stroke weight, linecap style, and general visual rhythm match the alphabet exactly, so numerals sit naturally alongside letters in running text without feeling like foreign elements inserted from another system.

The design priority for the numerals was the same as for the consonants: visual distinctiveness within a coherent family. Each digit had to be immediately distinguishable from every other, while still belonging unmistakably to the same script. They follow the standard decimal positional system — string them left to right to form any number — and they render cleanly at both display sizes and small text sizes on screen.

          Yapiri numerals — 0 through 9

Step Three — Building the Font

Once the glyphs were drawn in Inkscape, they were imported into FontForge — a professional font engineering application — where the real technical work began.

Because Yapiri's characters do not yet have official Unicode codepoints (that is a longer process, described below), the script uses the Unicode Private Use Area — a range of codepoints, U+E000 to U+E02D, that are reserved for exactly this kind of use. Each Yapiri character was assigned a specific PUA codepoint, forming a stable internal encoding that will remain consistent across all future versions of the font.

The font engineering involved several layers of work. Advance widths — the horizontal space each character occupies — were carefully calibrated so that text flows naturally. OpenType GPOS mark-to-base anchors were implemented for the two diacritic characters, ensuring that the high tone mark and reduplication mark attach correctly to whatever base glyph they follow. The font was then exported in two formats: TTF for broader compatibility, and WOFF2 for web use.

The result is a font that renders correctly in browsers, word processors, design applications, and — thanks to the Keyman keyboard package — in any text field on desktop or Android.

Step Four — The Keyboard

A font is only half of a writing system. The other half is input — a way for people to actually type in the script.

The Yapiri keyboard was built using Keyman, an open-source input method engine developed by SIL International that supports hundreds of languages and runs on Windows, macOS, Linux, and Android. The keyboard layout uses a phoneme-based mapping: the key for /a/ types the Yapiri vowel for /a/, the key for /p/ types the Yapiri consonant for /p/, and so on. Aspirated consonants use the Shift key — Shift+P for /ph/, Shift+T for /th/, Shift+K for /kh/.

On mobile, the layout organises characters by phoneme group — consonants on the main layer, vowels and numerals on a second layer — with Yapiri glyphs displayed directly on every key, so the user always sees the script they are typing.

What Comes Next — The Unicode Submission

The use of Private Use Area codepoints is the right approach for now — it allows the script to be used digitally immediately, while the longer process of formal Unicode encoding proceeds. But the long-term goal is official Unicode inclusion, which would mean Yapiri characters have permanent, universally recognised codepoints that any application can support without needing the Yapiri font installed.

That process runs through the Script Encoding Initiative at UC Berkeley, which reviews and advocates for the encoding of scripts used by minority and indigenous communities. The submission requires detailed documentation — glyph charts, phonological analysis, evidence of community use, and a formal proposal. It is not a short road, but it is the right one.

In the meantime, the font and keyboard are available now, free, for anyone who wants to read and write in Yapiri. The technical foundation is solid. What it needs next is people.