Contribute

Where to start

Most of what would help here is not code. A missing word is one line in a text file, a useful bug report is three lines, and four platforms have nobody on them at all.

Three things you could do this afternoon

  1. Add a word the keyboard does not know

    The loanword list is two columns, Bangla then English: অ্যাকাউন্ট beside account. English enters Bangla faster than any list keeps up with, and one line in en_bn_loanwords.tsv adds one. This is the easiest first contribution in the project.

  2. Report a word that comes out wrong

    Three lines: the Roman you typed, the Bangla you got, the Bangla you wanted. A report in that shape usually becomes a test the same week.

  3. Type on a phone nobody here has

    Say what device, what iOS version, and what app. The bugs that survive to release are the ones that only happen on somebody else’s phone.

Everything is on GitHub under github.com/unmukto-org, and all of it is MIT licensed.

Take a platform nobody has started

Linux, Android, Windows and ChromeOS are marked Coming across this site, and coming means nobody has started them. No dates, no repositories, no work in progress. Each one is yours if you want it.

  • Linux IBus or Fcitx5

    This is two jobs. X11 and Wayland handle text input differently enough that finishing one does not hand you the other. It is the same C ABI the Apple apps call, so the Rust underneath is a header and a link step.

  • Android InputMethodService, JNI

    A keyboard drawn from nothing, over a JNI layer on the ABI. The engine README already lists an Android keyboard among the callers the cabi feature is for. The largest of the four by some distance, and nearly all of that size is the keyboard rather than the engine under it.

  • Windows TSF text service

    Plus the parts nobody enjoys: an installer, code signing, and getting a text service to behave in applications older than the framework it belongs to.

  • ChromeOS IME API extension

    Nothing to link at all: the engine already runs in a browser, and the box on the guide page is an optimized WebAssembly build of about 390 KB. The smallest of the four.

None of the four is a transliteration problem: the engine is written and tested, and you reach it through a stable C ABI. Open an issue and say which platform before you start. That is not to ask permission; it is so two people do not spend three months on the same keyboard, and so the repository is public from its first commit.

Find out which part is wrong

Type the same thing somewhere else and the answer falls out. If a letter is wrong, use the box on the guide page: it runs the deterministic core compiled to WebAssembly, the same rules the keyboard runs, so a wrong letter there is the engine.

The box stops at the letters. If the letters are right and a correction or a next-word suggestion is wrong, the engine playground runs that layer too. If both are right and the app still gets it wrong, it is the app.

Then file it in the repository that owns it. The list is at the foot of this page, and if you are not sure, file it against the app you were using. Moving an issue is easier than writing it twice.

Write a report someone can reproduce

The Roman
Exactly what you typed. This is the part people leave out, and without it there is nothing to reproduce.
What came out
Pasted, not photographed. A screenshot of Bangla cannot be copied into a test, though a screenshot is the right thing for anything about layout or spacing.
What you wanted
The Bangla you expected instead.
Where
The app, the device and the OS version. On iPhone and iPad, the About screen in the Obadh app has a Copy Build Details button, and that is what to paste.

Build the engine in five commands

The engine is Rust and builds on its own.

git clone https://github.com/unmukto-org/obadh_engine
cd obadh_engine
./init.sh
cargo test
cargo run --features cli --bin obadh -- 'aji e probhate robir kor'

init.sh pulls the data submodules and the Git LFS objects, which is where the lexicon and the model artifacts live. Both apps need more of a toolchain: Xcode, XcodeGen, and a Rust toolchain that can build the static library the Swift side links. ./scripts/bootstrap.sh in either app repo does the setup, and how the pieces fit together is worth ten minutes before the first pull request.

Two things in the tree will cost you an afternoon if nobody warns you. The Xcode projects are generated from project.yml, so edits to the .xcodeproj are thrown away the next time anyone runs XcodeGen. And on macOS, do not delete and recopy the installed input-method bundle, and do not launch it with open: either one eventually swallows every keystroke until you repair it. Both are hazards of doing by hand what the installer does properly.

What gets a change merged is a test, and the habits are already in the tree to copy. A change to the deterministic core will get more questions than any other kind, because the rule you are changing is a rule somebody’s fingers already know, on every platform at once. Bring the reason: what a native speaker expects, what the orthography says, what it costs at the keyboard.

Work for a Bangla speaker

A person who knows how Bangla is spelled can fix in an afternoon what a programmer cannot fix at all. Most of it is a text file and a pull request.

  • The lexicon

    obadh_autocorrect_dataset

    845,461 Bangla entries with frequencies, built from curated EPUBs, Bangla Wikipedia and Bangla newspapers and then filtered. Corpora carry their own misspellings, their own OCR damage and their own gaps: names, dialect words, anything that entered the language recently. Autocorrect is only as good as this file.

  • The loanword list

    lexicons/loanwords/en_bn_loanwords.tsv

    1,815 entries resolving to 1,776 distinct English keys, because a few dozen English words have more than one Bangla spelling that people actually write. অ্যাডাপ্টার sits beside adapter; if the spelling you use is missing, it is one more line.

  • Emoji keywords

    obadh-ios

    Unicode’s CLDR is descriptive, so its Bangla annotation for the heart is হার্ট. People type ভালোবাসা. The curated map takes only words where a native speaker would expect one specific emoji and no other, which makes every entry a judgment call, and each spelling needs its own line.

  • The rules themselves

    data/rules/

    data/conjuncts.csv carries 352 conjuncts with their components and an example word each. If you think a rule is wrong, that is a bug report with a linguistics argument attached, and it is welcome. Aliases are not added because another keyboard accepts them.

  • The apps in Bangla

    obadh-ios, obadh-macos

    Neither app has a Bangla interface yet: the setup screens, the settings rows and the buttons are all English. Every page of this site was written as Bangla instead of translated into it, machine-translated pages are not published, and the apps’ strings need the same hand.

  • Design

    everything except the keyboard

    The emoji panel, the containing app and this website are open, and each of the four platforms above arrives with an interface to draw from nothing. The keyboard itself is the exception: its geometry and colour are pinned by measurement, so a proposal that moves them needs the measurement that justifies it.

Where everything lives

Five repositories, and the line under each one says what belongs in it.

  • The Rust engine, and the part every platform shares. Transliteration, the writing scheme and autocorrect ranking are bugs here, along with the rule sources, the C ABI, the command-line tools and the WebAssembly playground.

  • The iPhone and iPad keyboard, and the app that sets it up. Anything you can see or touch on a phone: the layout, key sizes, the suggestion strip, the emoji panel, haptics, the setup flow.

  • The macOS input method. The underlined text before you commit, the candidate bar and where it sits, input-source registration, the disk image.

  • The lexicons, the loanword list, and the FST artifacts built from them. A wrong or missing word belongs here. Data only, no code.

  • The sentence corpus, the vocabulary, and the next-word models.

The engine playground runs the autocorrect and suggestion layers as well as the deterministic core, which the box on the guide page does not.

Before you file, and after

Some questions are faster asked than filed: whether something is a bug or a typing habit, what a rule was supposed to do, whether anyone has started on Android. Ask them in the Discord. The server is new and the apps are at 0.1.0, so expect a quiet room rather than a crowd.

GitHub issues are the record, and questions are fine there too. An issue that turns out not to be a bug has still told the project that something was unclear, and unlike a message in a chat it is still findable in a year.

Reviews can be slow. An issue can sit for a month, usually because the person who read it was deep in something else. What you get back is a project that fits in your head: one engine, two apps so far, a couple of data repositories, and no framework you have to learn before you can read the code. A rule you fix reaches every platform at once, because there is one implementation of it.