← Portfolio

Interslavic Keyboards

Interslavic is a zonal constructed language — built so speakers of any Slavic language can read it without learning it. It had almost no first-class keyboard support. This project builds that support for five platforms from a single character table, and submitted the language to Keyman's official catalogue for the first time.

Python Swift Kotlin Keyman / KMN Windows KLC Open source

The problem

Written in standard orthography, Interslavic needs exactly four letters that a Polish or US keyboard cannot produce:

č š ž ě

Four characters is a small problem that becomes a large one across six platforms, because every platform solves it with a different spare modifier — and a phone has none at all. Before this project there was one aging third-party Windows layout, no phone support to speak of, and no swipe-typing dictionary in any Slavic conlang. Typing the language meant copy-paste or character maps.

How it is built

One canonical character table is the source of truth. Generator scripts in Python read it and emit each platform's artefact — the Windows .klc, the macOS .keylayout, the Keyman .kmn plus its touch layout, the lexical model, and a Windows autocorrect map. The layouts cannot drift apart, because nobody hand-edits them.

The scope is deliberately narrow. Interslavic also has an extended alphabet (ų ė ȯ ŕ ť ď ľ đ); it is cut from every shipped layout on purpose, because those letters are not written in new text. The testing checklist asserts this as a positive check — pressing the modifier with T / D / L must produce nothing. A layout that offers letters people should not type is a worse layout, not a more complete one.

Platform coverage

Platform What ships How the letters are reached Status
Windows Latin, Cyrillic and runic layouts (.klc → compiled DLLs, PowerShell installer) AltGr + letter Available
Android — layout Three XML layouts for Unexpected Keyboard (Latin / Cyrillic / runic) Swipe to the top-right of a key Available
Android — swipe typing main_isv.dict for HeliBoard — 253,273 inflected forms Glide typing with suggestions Available
iOS / iPadOS Keyman package isv_latin.kmp + a companion lexical model Flick up from the key; long-press as a fallback Available — verified on a real iPad
macOS KBDMSSTD.keylayout, generated from the same table Option + letter Generated; hardware check still open
Linux Points at the upstream packages rather than duplicating them AltGr + letter Upstream

Everything is a plain file download — no registration, no account, no e-mail. MIT licensed.

The dictionary

Swipe typing needs more than a layout: it needs a wordlist, and in a heavily inflected language it needs forms, not lemmas. You drag your finger across slovami, not slovo, so a lemma-only dictionary predicts almost nothing useful.

The Android dictionary carries 253,273 inflected forms, generated from an Interslavic dictionary database. The iOS lexical model is the same source trimmed: the full list compiles to a 33 MB trie, well past what an iOS keyboard extension is allowed to hold, so it is cut to forms at frequency ≥ 100 — about 5 MB, 39,777 forms. The interesting part is the exception: the corpus scores the word medžuslovjansky itself at f=26, so a plain frequency cut-off would have dropped precisely the vocabulary the keyboard's users type most. Project-specific stems are kept regardless of frequency.

Upstream: submitted to the Keyman catalogue

Keyman is the standard cross-platform keyboarding project, and its catalogue is how a keyboard reaches users who will never find a GitHub repository. Its API returns no keyboards and no lexical models for the language code isv. These two pull requests are the first submissions of Interslavic to either catalogue.

Both are open, not merged — status as reported by the GitHub API on 2026-08-10. Review on the lexical model produced a useful correction: the model was originally submitted as isv, which claims the whole language when it only covers the Latin script. It was renamed to isv-latn and returned for review.

In development

Two native keyboard apps are underway. Neither is downloadable yet, and both are listed here as work in progress rather than as shipped platforms.

  • iOS — Swift keyboard extension. Builds and runs in the simulator; not yet verified on a physical device. It exists mainly because the Keyman route requires "Allow Full Access" on iOS 16+ — a permission that by design lets a keyboard transmit what you type. A native extension declaring RequestsOpenAccess: false technically cannot send anything anywhere, which makes the project's "no account, no e-mail" claim true without an asterisk.
  • Android — Kotlin InputMethodService. An early-stage standalone IME, structured as a milestone plan and treated as a laboratory for the iOS app: no signing ceremony, no review queue, minutes per iteration. Android already has a good Interslavic keyboard via the shipped XML layout, so this app has to earn its place before it replaces anything.

Why this one is on the portfolio

It is a small, complete piece of engineering with a real user at the end of it: one source of truth, generated artefacts across five platforms, a documented scope decision, a testing checklist written for a stranger on a clean device, and contributions filed with an upstream project rather than kept private. The constraints — a 33 MB model against a keyboard-extension memory budget, a frequency cut-off that would have deleted the vocabulary that matters, four platforms with four different modifiers — are the kind that only show up once you ship to actual devices.