✦ Research release · 100% on-device · No server

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.

⚠ Research only · not for commercial use 68.09% top-1 · Aksharantar Hindi test 3-bit weights CC BY-SA 4.0
⚖️Research and evaluation only. These weights were distilled in part from CC-BY-SA 4.0 data, so they carry share-alike terms. For commercial Hindi transliteration use AksharaLP-1M-v2 (Apache-2.0).
0.78 MBwhole download, gzipped
68.09%top-1, 9,991 test words
91.21%top-8 recall
1.2Mparameters in total
0network calls after load
word-by-word decoding · top-5 per word
Romanized Hindi
देवनागरी
देवनागरी यहाँ दिखेगी
click any word for its top-5
Top‑5
Type a roman word, or tap an example, then click any output word to see all five candidates.
Latency—
Download0.78MB gz
Parameters1.21M
Lexicon180K words
Runs onYour device 🔒
Downloading model…
Size leadership

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.
Bar chart: points of top-1 accuracy per MB of download. Kosh 87.5, AksharaLP-1M-v2 8.8, IndicXlit beam 8 1.29, beam 4 1.28, full package 0.17.

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.

  1. 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.

  2. 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.

  3. 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.

Benchmarks · one scored run per system

Accuracy, measured

Aksharantar Hindi test set, 9,991 romanized words, the same scoring script for every system. Brackets are 95% bootstrap intervals.

SystemDownloadTop-1 %Top-3 %Top-8 %Top-1 per MB
AksharaLP-Kosh-1.2M this release0.78 MB68.09[67.20–69.00]85.2991.2187.5
Sub-megabyte reference transliterator0.87 MB65.89[64.97–66.83]82.5687.2975.6
AksharaLP-1M-v2 commercial7.92 MB70.04[69.16–70.90]88.3193.638.8
IndicXlit, model only, beam 846.0 MB59.16[58.14–60.13]79.9588.291.29
IndicXlit, model only, beam 446.0 MB58.88[57.89–59.82]79.4982.601.28
IndicXlit, full package404 MB69.33[68.44–70.23]85.4088.290.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.

Use it in your app

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
What the recipe makes possible

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.

CC BY-SA 4.0 · research only

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.

→

Commercial use

Use AksharaLP-1M-v2 (Apache-2.0, 7.92 MB, 70.04% top-1) instead.

Data & teachers (full list on the model card)
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
Citation (BibTeX)
@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}
}