Cross-platform C++ library that implements the Khipro compositional Bangla input method. Two layout variants are bundled:
- Default — desktop keyboard layout, sourced from
rank-coder/khipro-m17n - Touchscreen — phone/tablet variant, sourced from
KhiproTeam/khipro-mim-touchscreen
Both .mim specs follow the m17n format and are embedded into the library at build time.
make linux # native Linux static + shared lib
make windows # cross-compile Windows DLL (via MinGW container)
make android # cross-compile Android .so per ABI
make wasm # WebAssembly module
make test # Linux build + conformance testsAll builds run inside Docker containers (see container/) so the host needs only docker and make. The Android AAR build (with Kotlin bindings) additionally needs the Android SDK/NDK and Gradle installed — see scripts/targets/android.sh.
core/ C++ library: engine, m17n parser, C ABI
bindings/ Language bindings (Android Kotlin, Web JS/Wasm)
container/ Dockerfiles for cross-platform builds
cmake/ CMake helper modules
resources/ Bundled bn-khipro.mim specs + .lock (fetch provenance)
tests/ Conformance tests against khipro-testcases TSV
scripts/ Build orchestration, m17n sync, codegen
khipro.meta Single source of truth for package metadata + version
library_version = ${layout_version}-${library_patch} — for example 35.0.1-1.
layout_versiontracks the upstream m17n tag (e.g.v35.0.1). Bumps when a new m17n release is pulled in.library_patchcounts library-only changes (build fixes, ABI tweaks, etc.). Resets to0whenlayout_versionbumps.
Both fields live in khipro.meta; CMake, Python codegen, and bash scripts all read from there.
A scheduled CI job runs daily, checks the upstream m17n repositories for a new stable tag, and if one exists:
- Pulls the new
.mimfiles - Bumps
layout_version, resetslibrary_patch=0 - Rebuilds all platforms and runs conformance tests
- On success: commits, tags
v${layout_version}-0, and publishes a GitHub release - On failure: nothing is published — the repo stays on the previous version
Library-only patch releases (bumping library_patch without an m17n change) are done manually by editing khipro.meta and pushing a tag.
MIT License — see LICENSE.