The smallest Hindi transliterator we measured.
0.78 MB, running in this tab.
Romanized Hindi → Devanagari, word by word. 1.2M parameters, a 180,000-word lexicon and the runtime, all inside 777,970 bytes gzipped. Nothing you type leaves the device.
Why it is the smallest of its kind
Every claim below is a number from the same scored test run, or simple arithmetic on it.
Six things that are literally true
- 1One download, nothing deferred. 777,970 B gzipped (0.78 MB) contains the forward model, a 180,000-word lexicon, the reverse-channel student, the reranker and the runtime. There is no second fetch, no dictionary pack, no cache warming.
- 2Most accurate model under 1 MB on this benchmark. 68.09% top-1 against 65.89% for the next smallest system measured, at 0.78 MB against 0.87 MB.
- 3Smallest system measured that crosses 68% top-1. The next smallest above it in this family is AksharaLP-1M at 4.53 MB (70.37% on its own card) — about 5.8× the download — then AksharaLP-1M-v2 at 7.92 MB (70.04%), about 10×. IndicXlit's full package is about 404 MB (69.33%), about 500×.
- 4Best top-8 recall in its size class. 91.21% against 87.29% for the other sub-megabyte system. Not the best overall: AksharaLP-1M-v2 is higher at 93.63%.
- 5About 87 points of top-1 per MB of download. IndicXlit full is about 0.17 and AksharaLP-1M-v2 about 8.8. A ratio derived from the table, not a published metric.
- 6+8.93 points over IndicXlit's standalone model at 1/59th of its size. 68.09% against 59.16% (beam 8); +9.21 over beam 4. And it lands within 1.24 points of IndicXlit's full package, which ships a 358 MB rescoring dictionary.
Points of top-1 accuracy per MB of download, derived from the benchmark table. Read it as: how much accuracy a device gets for each megabyte it must fetch.
Caveat, stated plainly: a large part of that accuracy comes from lexicon coverage. With every one of the 9,991 test reference words removed from the list, the same model scores 32.70% top-1. Out-of-list words — new names, slang, rare spellings — are where it fails. IndicXlit's full package still leads top-1 by 1.24 points.
How 988,928 parameters fit in 375 KB
Three compressions stacked, each one reversible in the browser.
- 13-bit, trained that way
Quantisation-aware training at 3 bits per weight, with a shared 256-entry log-spaced fp16 scale codebook. 3.06 bits per parameter in the file.
- 2XQC1 entropy coding
A context-mixing arithmetic coder for the quantised integers, with a pure-JavaScript decoder. Same idea, WLC1, for the word list: front-coding, 16 log-frequency bands, cross-word context — 1.6 bytes per word.
- 3One file set, no pack
Lexicon, student, reranker and runtime all travel with the weights, so a device is ready after a single 0.78 MB download.
Real outputs
Produced by the shipped bundle, running in your browser right now. Failures included.
Accuracy, measured
Aksharantar Hindi test set, 9,991 romanized words, the same scoring script for every system. Brackets are 95% bootstrap intervals.
| System | Download | Top-1 % | Top-3 % | Top-8 % | Top-1 per MB |
|---|---|---|---|---|---|
| AksharaLP-Kosh-1.2M this release | 0.78 MB | 68.09[67.20–69.00] | 85.29 | 91.21 | 87.5 |
| Sub-megabyte reference transliterator | 0.87 MB | 65.89[64.97–66.83] | 82.56 | 87.29 | 75.6 |
| AksharaLP-1M-v2 commercial | 7.92 MB | 70.04[69.16–70.90] | 88.31 | 93.63 | 8.8 |
| IndicXlit, model only, beam 8 | 46.0 MB | 59.16[58.14–60.13] | 79.95 | 88.29 | 1.29 |
| IndicXlit, model only, beam 4 | 46.0 MB | 58.88[57.89–59.82] | 79.49 | 82.60 | 1.28 |
| IndicXlit, full package | 404 MB | 69.33[68.44–70.23] | 85.40 | 88.29 | 0.17 |
IndicXlit “model only” is the released fp32 checkpoint (about 46 MB); the full package adds its official 358 MB rescoring dictionary. Paired bootstrap, 2,000 resamples, seed 0: Kosh minus IndicXlit beam 8 is +8.93 [8.02, 9.85]; minus beam 4 is +9.21 [8.31, 10.14]; minus full is −1.24 [−2.03, −0.46]. The reference row is a third-party sub-megabyte system we measured with the same harness; it is not named here.
Four fetches, one constructor
The demo on this page is exactly this code: it fetches four files from model/ and calls word().
import { loadTiny } from "./kosh.min.mjs"; // the bundled runtime (46 KB)
const kosh = await loadTiny("./model/"); // fetches xlit.xqc, words.wlc, rev.xqc, params.json
kosh.word("kaise", 5); // → [{text:"कैसे",score:…}, …] top-5 candidates
Why this is groundbreaking
The interesting part here is not one Hindi model. It is that the whole thing is a recipe. A frequency lexicon, a distilled forward model, a small reverse student and a reranker fitted on validation put a language into under a megabyte. Hindi is the first language through it. Every other language with a roman input habit, a monolingual corpus and a teacher model can follow the same path — and the runtime and the coders do not change. Only the four artefacts do.
- Any language, same architecture. The coders, the quantisation and the browser runtime are language-independent. Adding Marathi, Bengali, Telugu or Tamil means retraining two small models and rebuilding a lexicon — not writing new infrastructure.
- Truly offline, by construction. 0.78 MB is small enough to ship inside an app, a kiosk, a robot or a field device, and the whole pipeline runs on a single CPU thread with no network call and no server cost per keystroke. That is what makes native-language input viable where connectivity is not.
- Native-language interaction for robotics and field science. A robot, a drone ground station or a field instrument that accepts spoken or typed local-language input needs the transliteration step on-device. 0.78 MB fits in the same envelope as the rest of an embedded stack, and the vocabulary can be specialised to a domain by rebuilding the lexicon.
- Data-sensitive environments. Hospitals, banks, government offices and defence systems can offer local-language input without sending keystrokes to a third-party API. The model is a file, not a service, so nothing leaves the device.
- Defence and disconnected operations. A sub-megabyte model can be pre-loaded on issued hardware and updated by file transfer, which suits environments where cloud dependency is a liability rather than a convenience.
- A path to a hundred languages. If each language costs under a megabyte, a hundred of them together still fit in the space of one conventional model.
None of this is claimed as deployed. What is measured is Hindi at 68.09% top-1 in 0.78 MB. Everything above is the shape of what the recipe makes possible, and the next languages are the test of it.
Licence & attribution
Research and evaluation only
Weights, lexicon and runtime are released under CC BY-SA 4.0. The training data includes CC-BY-SA 4.0 material, so derivatives carry share-alike terms. Do not assume commercial clearance.
Aksharantar (AI4Bharat) — CC-BY 4.0, includes Dakshina-derived pairs (CC-BY-SA 4.0) IndicCorp v2 (AI4Bharat) — CC0 IndicXlit hi-en (AI4Bharat) — MIT, distillation teacher
@software{dhua_aksharalp_kosh_2026,
author = {Dhua, Sourojit},
title = {AksharaLP-Kosh-1.2M: a 0.78 MB research Hindi transliterator},
year = {2026},
url = {https://huggingface.co/sourojitdotcom/AksharaLP-Kosh-1.2M},
note = {Research only, CC BY-SA 4.0}
}