Technical Specification
Yapiri Script
A complete formal description of the Yapiri writing system for Kokborok — covering glyph inventory, phonological mapping, PUA encoding, OpenType layout, and design rationale.
§ 1
Introduction
Yapiri (ᵧₐₚᵢᵣᵢ — yapiri) is an original writing system created for the Kokborok language, the mother tongue of the Borok people of Tripura, Northeast India. The name yapiri means "footprints" in Kokborok, reflecting the essential nature of all writing: traces of a living voice, preserved across time.
Kokborok is a Tibeto-Burman language spoken by approximately one million people. It has historically been written in the Bengali script, and more recently in the Roman script — neither of which maps cleanly to Kokborok phonology. Several dedicated scripts have been proposed over the decades (including Aima and Kókmari), but none has achieved broad adoption. Yapiri represents a new effort: a script designed from first principles, shaped entirely by the phonological requirements of the language.
This document constitutes the authoritative technical specification for the Yapiri script, version 1.0. It is intended for linguists, font engineers, software developers, keyboard layout designers, educators, and community members who wish to understand, implement, or extend the system.
§ 2
Design Principles
Yapiri was designed according to five core principles:
Phonological primacy. Every character in the Yapiri inventory corresponds to a phoneme (or phoneme cluster) that is functional in Kokborok. No characters are included for historical, aesthetic, or borrowing reasons alone. Loanword phonemes (f, v, z) are included but marked as secondary.
Systematic visual grammar. Related phonemes share visual elements. Aspirated consonants are derived from their plain counterparts through a consistent modification. Voiced pairs of voiceless stops share structural DNA. This makes the script learnable as a system rather than a set of arbitrary symbols.
Phonemic alphabet structure. Yapiri is a phonemic alphabet: every character — whether consonant or vowel — is a full, independent letter representing exactly one phoneme. There are no inherent vowels, no combining diacritics for vowels, and no hidden sounds. Every sound heard in a word must be written explicitly.
Visual elegance. Glyphs were drawn by hand in Inkscape using Bézier curves with rounded linecaps and linejoin, producing an aesthetic that is organic without being decorative. The script is designed to look natural at both display and text sizes.
Digital-first design. Yapiri was built for the digital age from the start. The font is distributed as OTF/TTF/WOFF2 with full OpenType GPOS/GSUB support. PUA encoding ensures compatibility across all Unicode-compliant software. Keyboard input tools are provided alongside the font.
§ 3
Script Type
Yapiri is classified as a phonemic alphabet. Every sound in the Kokborok language — both consonants and vowels — is represented by its own independent, full-sized character. Consonant glyphs represent only the consonant sound. Vowel glyphs represent only the vowel sound. Letters are written sequentially in a linear string, where each glyph carries equal weight.
For example, the consonant glyph for /p/ represents only /p/ — never /pa/. To write the syllable /pa/, the consonant /p/ must be followed by the vowel /a/. This strict one-to-one mapping between sound and symbol is the defining feature of Yapiri.
Sounds that are traditionally written as digraphs in the Latin-based Kokborok script (such as ph, th, kh, ch, chh, ng) are represented by single, unique glyphs in Yapiri. These are called atomic phonemes — they carry the same structural weight as any other independent character and are not decomposed in writing.
Yapiri is written left-to-right, in the same direction as the Latin and Bengali scripts used alongside it. There is no distinction between uppercase and lowercase. Words are separated by a space character.
§ 4
Phonological Scope
Kokborok has a rich consonantal inventory including plain stops, aspirated stops, voiced stops (plain and breathy), nasals, liquids, glides, and fricatives. Yapiri covers this full inventory natively. The following phonological categories are represented:
| Category | Phonemes | Notes |
|---|---|---|
| Velar stops | k, kh, g, ṅ, ng | Plain, aspirated, voiced, breathy voiced, nasal |
| Palatal stops / affricates | ch, chh, j | Plain, aspirated, voiced affricate |
| Dental / alveolar stops | t, th, d | Plain, aspirated, voiced, breathy voiced |
| Bilabial stops | p, ph, b | Plain, aspirated, voiced, breathy voiced |
| Nasals | m, n | Bilabial, alveolar |
| Liquids | r, l | Rhotic and lateral |
| Glides | w, y | Labio-velar, palatal |
| Sibilant / fricatives (native) | s, h | Alveolar fricative, glottal fricative |
| Fricatives (loanword) | f, v, z | For words borrowed from Bengali, English, Hindi |
| Vowels | a, i, u, e, o, ə | Six vowel phonemes; ə () = high central/mid central unrounded |
The vowel ə () is a distinctive phoneme in Kokborok and receives an independent glyph form in Yapiri.
§ 5
Consonant Inventory
The Yapiri consonant inventory comprises 25 characters (codepoints U+E006–U+E01E). They are organized into four phonological groups below.
Note on loanword consonants. The three fricatives f (U+E018), v (U+E019), and z (U+E01A) are not native to Kokborok phonology. They were added to support loanwords from Bengali, Hindi, and English. Their glyphs follow the same visual design grammar as the rest of the consonant set, but they are distinguished in educational materials as secondary characters.
| Codepoint | Romanization | IPA | Category | Notes |
|---|---|---|---|---|
| Velars | ||||
| U+E000 | k | /k/ | Stop, voiceless | Velar, unaspirated |
| U+E001 | kh | /kʰ/ | Stop, aspirated | Velar, aspirated |
| U+E002 | g | /g/ | Stop, voiced | Velar |
| U+E004 | ng | /ŋ/ | Nasal | Velar nasal |
| Palatals | ||||
| U+E005 | ch | /tɕʰ/ | Affricate, voiceless | |
| U+E006 | chh | /tɕʰ/ | Affricate, aspirated | |
| U+E007 | j | /dʑ/ | Affricate, voiced | |
| Dentals / Alveolars | ||||
| U+E008 | t | /t/ | Stop, voiceless | |
| U+E009 | th | /tʰ/ | Stop, aspirated | |
| U+E00A | d | /d/ | Stop, voiced | |
| Bilabials | ||||
| U+E00C | p | /p/ | Stop, voiceless | |
| U+E00D | ph | /pʰ/ | Stop, aspirated | |
| U+E00E | b | /b/ | Stop, voiced | |
| Nasals, Liquids, Glides | ||||
| U+E010 | m | /m/ | Nasal | Bilabial |
| U+E011 | n | /n/ | Nasal | Alveolar |
| U+E012 | r | /r/ | Liquid | Rhotic |
| U+E013 | l | /l/ | Liquid | Lateral |
| U+E014 | w | /w/ | Glide | Labio-velar |
| U+E015 | y | /j/ | Glide | Palatal |
| Fricatives | ||||
| U+E016 | s | /s/ | Fricative | Native |
| U+E017 | h | /h/ | Fricative | Native, glottal |
| U+E018 | f | /f/ | Fricative | Loanword |
| U+E019 | v | /v/ | Fricative | Loanword |
| U+E01A | z | /z/ | Fricative | Loanword |
§ 6
Vowel System
Yapiri has six independent vowel letters, each representing a distinct vowel phoneme of Kokborok. As a phonemic alphabet, every vowel is written explicitly as a full, standalone character — there are no inherent vowels, no diacritics, and no hidden sounds. Every sound heard must be written.
Vowels are placed after consonants horizontally in a linear sequence to form syllables. For example, the syllable /pa/ is written as the consonant /p/ followed by the vowel /a/. All six vowels carry equal character weight to consonants in the script.
| Codepoint | Letter | Phoneme | IPA | Notes |
|---|---|---|---|---|
| Vowel Letters — All Independent Full Characters | ||||
| U+E01B | a | /a/ | [a] | Open central unrounded |
| U+E01C | i | /i/ | [i] | Close front unrounded |
| U+E01D | u | /u/ | [u] | Close back rounded |
| U+E01E | e | /e/ | [e] | Close-mid front unrounded |
| U+E01F | o | /o/ | [o] | Close-mid back rounded |
| U+E020 | ə | /ə/ | [ə] | High central unrounded; distinct from consonant /w/ |
| Combining Diacritics — Tone & Reduplication Only | ||||
| U+0301 | ◌́ | — | — | High tone mark; placed above the vowel of the syllable |
| U+030B | ◌̋ | — | — | Reduplication shorthand; marks a repeated morpheme |
§ 7
Numeral System
Yapiri includes a complete set of 10 digit glyphs (0–9) at codepoints U+E026–U+E02F, plus a standalone ten-glyph conceived as a generative base for positional notation. The Yapiri numeral system uses a staff-and-crossbar design grammar: each digit is built from a vertical staff with a distinctive crossbar pattern, giving the set a systematic, learnable visual family.
Numerals combine with standard decimal positional notation. The digit 0 at U+E026 is visually distinct from the alphabetic characters and functions as a true zero. Larger numbers are formed by stringing digits left-to-right in the normal positional manner.
§ 8
Unicode & PUA Mapping
Yapiri is currently encoded in the Unicode Private Use Area (PUA), occupying a contiguous block of 48 codepoints from U+E000 to U+E02F. The PUA is a permanent part of the Unicode standard reserved for scripts and characters that have not yet received official Unicode allocations, or for private/community use. Its use here is fully conformant with Unicode practice.
The block is organized in sequential order: consonants first (U+E000–U+E01A), followed by vowel letters (U+E01B–U+E020), and numerals (U+E021–U+E02A), with punctuation at (U+E02B–U+E02F). This ordering facilitates both visual browsing and font engineering.
| Range | Count | Category |
|---|---|---|
| U+E000–U+E01A | 25 | Consonants |
| U+E01B–U+E020 | 6 | Vowel Letters (independent) |
| U+E021–U+E02A | 10 | Numerals (0–9) |
| U+E02B–U+E02F | 5 | Punctuation |
| U+0301, U+030B | 2 | Combining Diacritics (tone & reduplication) |
| Total | 48 | — |
To render Yapiri text, the Yapiri OTF/TTF font must be installed. Without it, PUA codepoints render as boxes or missing glyph indicators in all applications. This is normal behavior for PUA-encoded scripts and is not a font error.
The font's internal name is Yapiri. It should be selected by that name in word processors, design applications, and CSS (font-family: 'Yapiri').
§ 9
OpenType Features
The Yapiri font implements the following OpenType layout features:
| Feature Tag | Table | Description |
|---|---|---|
| mark | GPOS | Mark-to-base positioning for diacritics on consonant bases |
| kern | GPOS | Kerning pairs, covering almost all the possible pairs in Kokborok phonology |
GPOS mark-to-base anchors are defined on all consonant glyphs (U+E000–U+E01A) as base marks, and on the diacritics (U+E021–U+E025) as combining marks. Each base glyph carries a named anchor point (top_anchor) and each diacritic carries a corresponding attachment point (top_attach), allowing the OpenType shaping engine to position diacritics correctly regardless of the base glyph's advance width.
Kerning is implemented via GPOS pair-adjustment lookups.
Note on application compatibility. Full GPOS support requires an OpenType-aware application (InDesign, modern Word, LibreOffice, web browsers). Some older applications may not apply GPOS kerning or mark positioning. In such cases, diacritics may not be positioned correctly relative to their base glyphs. This is an application limitation, not a font defect.
§ 10
Encoding Rules
The following rules govern the correct encoding of Yapiri text in Unicode:
| # | Rule | Example |
|---|---|---|
| R1 | Every sound must be written — consonants and vowels are both full independent letters | = /p/ only; to write /pa/ write + |
| R2 | Consonant + vowel = consonant codepoint followed immediately by vowel codepoint | + = /pi/ |
| R3 | A word or syllable beginning with a vowel = vowel codepoint with no preceding consonant | alone = /a/ |
| R4 | Consonant clusters are written by placing consonant codepoints sequentially with no vowel between | + = /pr/ |
| R5 | High tone is marked by U+0301 placed after the vowel codepoint of the syllable | ́ = /á/ (high tone /a/) |
| R6 | Reduplication is marked by U+030B on the repeated morpheme | Marks abbreviated repeated forms |
| R7 | Spaces separate words; no special word-joiner is required | U+0020 space as normal |
| R8 | Numerals are standalone independent characters | – used independently |
§ 11
Input Methods
Three input methods are available for typing Yapiri text:
1. Web keyboard tool. The Yapiri website includes an interactive on-screen keyboard that outputs PUA codepoints directly. No installation required. Suitable for occasional use and for copying text into other applications. Accessible at yapiriscript.com/#keyboard.
2. Keyman keyboard layout. A Keyman keyboard layout is provided for native system-level input on Windows, macOS, iOS, and Android. Keyman is an open-source input method platform maintained by SIL International. The Yapiri layout uses a phoneme-based QWERTY mapping: pressing k inserts U+E000, g inserts U+E002, and so forth. Aspirated consonants are typed as digraphs (e.g., k+h = U+E001). Vowel diacritics are entered after the consonant base. ZWNJ (for cluster breaking) is mapped to a dedicated key.
3. Direct Unicode input. Any application that supports Unicode PUA entry (via Alt+code on Windows, or the Unicode hex input method on macOS) can be used to enter Yapiri codepoints directly.
The Keyman layout file (.kmp package) is the recommended input method for sustained writing. It can be downloaded from the Yapiri website and installed in minutes. Once installed, users switch to the Yapiri layout the same way they switch between any system input languages.
§ 12
Romanization System
The Yapiri romanization is a practical orthographic transcription system used alongside the script — for learner materials, technical documentation (including this specification), and transliteration. It is not intended as a replacement for the script.
The system follows these conventions:
| Romanization | Phoneme | IPA | Notes |
|---|---|---|---|
| k, g, t, d, p, b | /k/, /g/, /t/, /d/, /p/, /b/ | as IPA | Plain stops |
| kh, gh, th, dh, ph, bh | /kʰ/, /gʱ/, /tʰ/, /dʱ/, /pʰ/, /bʱ/ | as IPA | Aspirated / breathy |
| ng | /ŋ/ | [ŋ] | Velar nasal |
| c, ch | /tɕ/, /tɕʰ/ | [tɕ], [tɕʰ] | Palatal affricates |
| j | /dʑ/ | [dʑ] | Voiced palatal affricate |
| m, n, r, l, w, y | /m/, /n/, /r/, /l/, /w/, /j/ | as IPA | Sonorants and glides |
| s, h, f, v, z | /s/, /h/, /f/, /v/, /z/ | as IPA | f, v, z = loanword |
| a, i, u, e, o | /a/, /i/, /u/, /e/, /o/ | as IPA | Core vowels |
| ɨ | /ɨ/ | [ɨ] | High central unrounded; also written ë in some sources |
| | (pipe) | — | — | Romanization marker for ZWNJ (cluster break) |
§ 13
Unicode Submission Roadmap
The long-term goal for Yapiri is formal inclusion in the Unicode Standard, which would give the script permanent, globally recognized codepoints outside the PUA. This is a multi-phase process governed by the Unicode Technical Committee (UTC) and coordinated by the Script Encoding Initiative (SEI) at the University of California, Berkeley.
If you are a linguist, Unicode specialist, or institutional representative interested in supporting the Yapiri Unicode submission, please reach out via the community contact form at yapiriscript.com.