Skip to content


Repository files navigation


A tool to build keyboard packages for a multitude of platforms using a single, simple text file definition. Supported outputs:

  • Linux (X11, m17n)
  • macOS
  • Windows
  • ChromeOS
  • iOS/iPadOS
  • Android
  • SVG
  • hit-error correction model as an FST, to be used with our spellers
  • CLDR keyboard definitions is presently missing, but is in the pipeline

We think it's pretty cool. Documentation (under construction -- how to update).

Runtime dependency

kbdgen uses convert which is part of imagemagick

For Mac: brew install imagemagick For Linux: <pkg-manager> install imagemagick


  1. get Rust
  2. clone this repo: git clone
  3. cd kbdgen
  4. cargo install --path . (this installs kbdgen to the path)

Alternatively - download a precompiled binary from nightly builds:

Extract the archive, and move the binary to somewhere on your $PATH.

Example Usage

cargo run -- target --bundle-path C:\Projects\Divvun\keyboards\keyboard-sme\sme.kbdgen --output-path C:\KbdgenBuilds\sme_mac macos generate

Let's build an android app. There's two. divvun-dev-keyboard and divvun-keyboard. The former is the unstable one where we do all the testing. The latter one gets pushed to production. Both are deployed as separate apps in google playstore.

Alas, I digress.

We want to build divvun-dev-keyboard. Clone divvun-dev-keyboard.

cd source/divvun
git clone
cd ../kbdgen
cargo run -- fetch -b /Users/srdkvr/source/divvun/divvun-dev-keyboard/divvun-dev.kbdgen #fetches deps
cargo run -- target --bundle-path /Users/srdkvr/source/divvun/divvun-dev-keyboard/divvun-dev.kbdgen --output-path ~/source/divvun/android_keyboard android build

Note - you will need imagemagick to run converting of images - so

$ brew install imagemagick@6
$ echo 'export PATH="/opt/homebrew/opt/imagemagick@6/bin:$PATH"' >> ~/.zshrc

Your typical commands are

  • ... android clone # Clones the base android repository
  • ... android generate # Generates all the layouts and speller configs, but doesn't clone stuff
  • ... android build # Both of the above.

TL;DR Android


For Android run two commands:

kbdgen target --bundle-path C:\Projects\Divvun\keyboards\keyboard-sme\sme.kbdgen --output-path C:\KbdgenBuilds\sme_android android clone
kbdgen target --bundle-path C:\Projects\Divvun\keyboards\keyboard-sme\sme.kbdgen --output-path C:\KbdgenBuilds\sme_android android generate


This project is licensed under either of

at your option.


Fork and PR on Github.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.