Language Tech •
6 min read
•
March 1, 2026

Architecting Zero-Telemetry Indic Keyboards: Overcoming Complex Conjuncts in Assamese & Bodo

How Borluit.tech engineered the Barna Assamese Keyboard with zero-latency phonetic transliteration, custom Unicode conjunct mapping, and strict local sandboxing.

Borluit.tech Engineering Team
Borluit.tech Engineering Team Language Technology Division

Introduction: The Challenge of Regional Script Input

Typing in Brahmic script derivatives such as Assamese (অসমীয়া) and Bodo presents unique computational hurdles that standard Latin keyboard architectures fail to address. Unlike alphabetic writing systems where each keystroke corresponds directly to an isolated glyph, Indic scripts rely on complex ligatures, vowel signs (matras), virama (hasant), and multi-consonant conjuncts (Yuktakshar যেমন: ক্ষ, জ্ঞ, ঙ্ক, ঙ্গ).

When global operating systems initially deployed Indic keyboards, users were frequently frustrated by broken character joining, laggy transliteration dictionaries, and intrusive cloud telemetries capturing sensitive keystroke data.

At Borluit.tech, we set out to build Barna Assamese Keyboard—a native Android Input Method Editor (IME) engineered with three fundamental architectural mandates:

  1. Zero-Latency Transliteration: Sub-millisecond keystroke-to-glyph resolution.
  2. Absolute Privacy Sandboxing: 100% offline execution with zero internet permissions.
  3. Ergonomic Dual Layout: Frictionless toggling between phonetic Romanized typing and standard Inscript layouts.

1. Deterministic Trie Engine for Phonetic Transliteration

Standard Latin-to-Indic transliteration frequently relies on heavy neural models that require either constant network access or massive on-device weights exceeding 80MB. For mobile users in northeastern India—often operating entry-tier hardware with constrained RAM—this approach causes perceptible typing latency and battery drain.

We designed a lightweight Prefix-Compressed Trie Engine implemented in Kotlin and optimized with native C++ bindings for hot lookups.

// Simplified illustration of the transliteration node traversal
class IndicTransliterationTrie {
    private val root = TrieNode()

    fun insert(phoneticKey: String, unicodeGlyph: String, priority: Int) {
        var current = root
        for (char in phoneticKey) {
            current = current.children.getOrPut(char) { TrieNode() }
        }
        current.glyph = unicodeGlyph
        current.priority = priority
    }

    fun resolve(buffer: CharSequence): TransliterationResult {
        var current = root
        var longestMatch = ""
        var matchLength = 0
        
        for (i in buffer.indices) {
            val char = buffer[i]
            current = current.children[char] ?: break
            if (current.glyph != null) {
                longestMatch = current.glyph!!
                matchLength = i + 1
            }
        }
        return TransliterationResult(longestMatch, matchLength)
    }
}

Solving Yuktakshar Ligature Ordering

In Assamese Unicode (U+0980 to U+09FF), a conjunct is formed by placing a Virama (্ / U+09CD) between two consonants. For example:

  • ক (U+0995) + ্ (U+09CD) + ষ (U+09B7) = ক্ষ (ksha)
  • জ (U+099C) + ্ (U+09CD) + ঞ (U+099E) = জ্ঞ (gya / jnya)

Our engine dynamically detects multi-keystroke combinations in real-time, handling ambiguous phonetic roots and substituting canonical Unicode normalizations (NFC) before delivering the commit string to the active InputConnection.


2. The Keystroke Privacy Sandbox

Keyboards operate with the highest security privileges on mobile devices. An unscrupulous IME can harvest passwords, credit card credentials, and personal chats.

To guarantee unbreakable user confidentiality, Barna Keyboard operates in a hardened offline sandbox:

  • Zero Network Permissions in Manifest: The application manifest does not request android.permission.INTERNET or ACCESS_NETWORK_STATE. Android’s kernel physically prevents the process from opening socket connections.
  • On-Device Dictionary Storage: User dictionary additions and custom vocabulary are stored locally in an encrypted Room SQLite database using SQLCipher.
  • No Background Diagnostics: Crash reports and performance metrics are handled via standard Android system vitals through the Play Console, eliminating third-party analytics SDKs.
<!-- Manifest Security Isolation: No Internet Allowed -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.sltdassam.rodalikeyboard">

    <!-- Only IME and Vibrate service permissions -->
    <uses-permission android:name="android.permission.VIBRATE" />
    
    <!-- Explicitly NO INTERNET PERMISSION -->
</manifest>

3. Memory & Render Optimization

To ensure seamless 60fps keyboard drawing across all Android versions (from Android 5.0 Lollipop to Android 15), we eliminated XML view inflation during keypress rendering.

  1. Hardware-Accelerated Canvas Keyboards: Key layouts are rendered on a single custom SurfaceView/Canvas rather than nested View hierarchies, keeping layout hierarchy depth to $O(1)$.
  2. Sub-8MB Binary Size: All Unicode tables, phonetic mapping dictionaries, and UI themes are packed into a compressed binary asset format, resulting in an install footprint under 7.5 MB.
  3. Zero Garbage Collection Stutters: Key event dispatchers reuse pre-allocated object pools, preventing GC pauses during high-speed typing bursts.

Summary & Future Roadmap

By pairing deterministic algorithmic structures with strict privacy architecture, we proved that regional language tools can match the speed and responsiveness of global software while preserving user rights.

Our next iterations focus on:

  • Next-word predictive modeling using quantized on-device n-gram Markov chains.
  • Expanded phonetic layouts for Tai-Ahom and Dimasa languages.
  • Voice typing integration using offline on-device speech recognition models.

Explore Barna Assamese Keyboard on Google Play or inspect our application catalog.