Add commas, full stops, question marks and capitals to unpunctuated text on the device itself (Android, iOS, desktop or the web). English, Hinglish, Hindi, Tamil, Telugu, Bengali, Urdu and more, with each script's own marks, in a 8 MB library.
Free up to 10k monthly active devices · No API key · On Maven Central · Android, iOS, desktop, web
This is the actual Comma library, compiled to WebAssembly and running in your browser. Type without punctuation or capitals and watch it put them back. Your text never leaves this page.
Restored
No server, no API key, no per-request bill. A small Kotlin library that you can read, test and ship.
Hinglish and Tanglish chat, and Hindi, Bengali, Marathi, Gujarati, Punjabi, Tamil, Telugu, Kannada, Malayalam and Urdu in their own scripts, plus English and six European languages.
A full stop is । in Hindi, Marathi, Bengali and Punjabi and ۔ in Urdu, where questions end in ؟. Capitals for sentence starts, names and acronyms like NASA.
Pure Kotlin inference. There is no ONNX Runtime, TFLite, ML Kit or native code, and it runs on Android (minSdk 21), iOS, macOS, JVM desktop, JavaScript and WebAssembly, from Kotlin or Java.
The model ships inside the library on every platform. It makes no network calls, needs no permissions and sends no telemetry, so what people dictate never leaves the phone.
Real output from the sample app on an Android emulator. These are not mockups.
"Can you pick up the kids at 5? I am stuck in a meeting."
"आप कैसे हैं? मैं ठीक हूँ।"
"Kal milte hain, OK, bye. Take care."
The Kotlin Multiplatform sample app, built from the published artifacts, gives the same result on Android, iOS, desktop and the web.

Hi, Rahul. Are you free tomorrow? I need help with the report.

Hi, Rahul. Are you free tomorrow? I need help with the report.

Hi, Rahul. Are you free tomorrow? I need help with the report.

Hi, Rahul. Are you free tomorrow? I need help with the report.
One line in your Gradle file, from Maven Central. Works in commonMain for Android, iOS, macOS, JVM desktop, JavaScript and WebAssembly. No API key, no account.
// build.gradle.kts: commonMain, or any platform source set
dependencies {
implementation("io.github.rajumark:comma:2.0.0")
}
// Gradle picks the right artifact per platform:
// comma-android · comma-jvm · comma-iosarm64 · comma-iossimulatorarm64
// comma-macosarm64 · comma-js · comma-wasm-js
Add Comma from rajumark to this Kotlin Multiplatform or Android project.
What it does: on-device punctuation and capitalisation. Given unpunctuated or voice-typed text, it adds commas, full stops, question marks, exclamation marks and capitals. English, Hinglish, Hindi and other Indian languages. ~8 MB, no dependencies, no network.
Install (Maven Central, no extra repository):
build.gradle.kts (commonMain or any source set): implementation("io.github.rajumark:comma:2.0.0")
Platforms: Android, iOS, macOS, JVM desktop, JavaScript, WebAssembly
Usage:
val comma = Comma() // off the main thread, keep one instance
val text = comma.restore(transcript) // "Can you pick up the kids at 5? I am stuck in a meeting."
Repo: https://github.com/rajumark/comma#readme
Add the dependency, then follow the README for the exact API and current version.
Load once and reuse the instance. restore() is thread-safe.
val comma = Comma()
comma.restore("where are you we are all waiting outside")
// "Where are you? We are all waiting outside."
comma.restore("آپ کیسے ہیں میں ٹھیک ہوں")
// "آپ کیسے ہیں؟ میں ٹھیک ہوں۔"
comma.close()
try (Comma comma = new Comma()) {
String text = comma.restore(
"can you pick up the kids at 5 i am stuck in a meeting");
}
Anywhere text arrives without punctuation.
Clean up speech-to-text output before it goes into a message, note or form.
"where are you we are all waiting outside" → Where are you? We are all waiting outside.Turn a long transcript into readable sentences; long text is handled in overlapping windows.
a 2-minute voice note → paragraphs with full stopsTidy fast-typed messages or live captions for display, search or reading aloud.
"आप कैसे हैं मैं ठीक हूँ" → आप कैसे हैं? मैं ठीक हूँ।Sentence boundaries and capitals help translation, summarisation and text-to-speech downstream.
split into sentences → speak each oneReal problems Comma solves today. Pick one and ship it.
Voice typing keyboard · Punctuate dictated text before it lands in the text box.
Voice notes app · Turn a long rambling voice note into readable sentences.
Live captions · Add full stops and capitals to live captions so they are easy to follow.
Dictate emails · Speak an email and send it properly punctuated, no manual fixing.
Meeting minutes · Clean meeting transcripts into sentences before summarising them.
Doctor dictation · Clinical notes dictated in Hinglish, punctuated privately on the phone.
Voice journal · Speak your diary every night and read it back as clean paragraphs.
Lecture recorder · Students get readable lecture transcripts, even offline in class.
Better translation · Split text into sentences first so translation stops mangling run-on speech.
Natural text-to-speech · Real commas and full stops give TTS voices proper pauses.
Clean input for LLMs · Punctuate speech-to-text before sending it to a summariser or chatbot.
Subtitle generator · Break speech-to-text output into proper subtitle sentences.
Call transcripts · Make support-call transcripts readable for review and QA.
Driving mode messages · Dictate a message hands-free and send it with correct punctuation.
Voice-first accessibility · People who can't type send messages that read like typed ones.
Field data collection · Field workers dictate reports in Hindi or Telugu and get clean text.
Complaint & FIR apps · Citizens dictate complaints in their own language, saved as clean sentences.
Chat "tidy up" button · Fix fast lowercase messages with one tap before sending.
Podcast show notes · Turn raw episode transcripts into readable notes and quotes.
Search indexing · Split transcripts into sentences so search can show exact matching lines.
Word-level F1 for the four marks (punctuation) and for capitalised words (capitals), on held-out test sets never used for training and on 70 hand-written messages in 15 languages.
| Comma | XLM-R punctuation + true-case (47 languages) | XLM-R base, punctuation only | |
|---|---|---|---|
| Hinglish chat, punctuation / capitals | 0.83 / 0.92 | 0.49 / 0.70 | 0.41 / — |
| English chat, punctuation / capitals | 0.86 / 0.96 | 0.72 / 0.91 | 0.75 / — |
| Hand-written messages, punctuation / capitals | 0.74 / 0.89 | 0.70 / 0.75 | 0.69 / — |
| Hand-written messages fully right | 43% | 26% | — |
| Formal text, 18 languages, punctuation / capitals | 0.65 / 0.79 | 0.76 / 0.66 | 0.73 / — |
| Size | 7.8 MB | 1.1 GB | 1.1 GB |
| Latency, one message, 1 CPU thread (laptop) | ~0.3 ms | ~39 ms | ~22 ms |
Comma is clearly better on chat and messages and capitalises better everywhere, at about 1/140 of the size. On long formal text (news, encyclopedia prose) the much larger XLM-R models place commas better. "!" vs "." is a judgement call it sometimes makes differently.
| Member | Description |
|---|---|
Comma() | Loads the bundled model. Implements AutoCloseable. |
restore(text) | Returns the text with punctuation and capitals restored. Existing punctuation is replaced; blank text returns "". |
No API key, no sign-up, no license file. Add Comma to your project and ship. It stays free until your product passes 10,000 monthly active devices, and there's never a limit on how often each device runs it.
For indie developers, startups and growing apps, up to 10,000 monthly active devices.
For products above 10,000 monthly active devices on any platform.
A small, fast on-device model trained for your language, domain or task.
A monthly active device is a phone, tablet or other device that runs Comma at least once in a calendar month.
The 10,000 limit applies separately to each product, each platform (Android, iOS, web…) and each Hoverfly model. Crossed it? You have 30 days to get a commercial license.
Questions about licensing? Email raju348636@gmail.com or call / WhatsApp +91 63533 21951. Full terms: Hoverfly Community License.
A Kotlin Multiplatform library (Android, iOS, macOS, JVM desktop, JavaScript, WebAssembly) that adds punctuation and capitals to text that has none, like voice typing, speech-to-text output or fast-typed chat.
English, Hinglish and Tanglish, Hindi, Bengali, Marathi, Gujarati, Punjabi, Tamil, Telugu, Kannada, Malayalam and Urdu, plus Spanish, French, German, Portuguese, Italian, Russian and Indonesian. Chinese, Japanese and Thai are not supported, because they don't put spaces between words. To detect the language first, use Beacon.
Comma removes the marks it predicts (commas, full stops, question and exclamation marks) and adds its own, and re-cases the text. Other characters like apostrophes, numbers, emails and links are kept.
Any length. Long text is cut into overlapping windows, so every word is judged with context on both sides.
Yes. Inference runs entirely on the device in plain Kotlin. It makes no server calls, needs no network permission and sends no telemetry.
Token ids, every word's label and the restored text match the reference implementation on all 94 test vectors, both on the JVM and on an Android device.
Nothing for products with up to 10,000 monthly active devices per platform, including commercial apps. There is no API key or account, and no limit on how often it runs. Above that, a commercial license is needed; see Pricing.
Yes. Hoverfly trains custom on-device models for your language, domain or task and ships them as a small library like this one. Email raju348636@gmail.com or call / WhatsApp +91 63533 21951.
Built by a developer, for developers.
Every model here started as a problem I hit in my own apps. I made them small, private and free to start, so you can spend your time on the part your users will love.
Eight small on-device models, one job each. Same install, same free tier, and the same promise: nothing leaves the device.