Comma · by Hoverfly

Voice-typed text,
ready to read.

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.

Get started View source

Free up to 10k monthly active devices · No API key · On Maven Central · Android, iOS, desktop, web

comma.restore(text)
Can you pick up the kids at 5? I am stuck in a meeting.
Live demo

Try the real model, right here

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.

Loading the model (~8 MB)…

Restored

added marks and capitals are highlighted
Updates as you type
Why Comma

Readable text, without the cloud

No server, no API key, no per-request bill. A small Kotlin library that you can read, test and ship.

Made for Indian text

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.

The right marks

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.

No dependencies

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.

Private & offline

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.

~10ms
Per message
Android emulator, once warm
~8MB
On-device
model + tokenizer
19
Languages
plus Hinglish and Tanglish
0
Dependencies
no native code
On device

Type it plain, read it right

Real output from the sample app on an Android emulator. These are not mockups.

Comma restores an English message

English

"Can you pick up the kids at 5? I am stuck in a meeting."

Comma restores a Hindi message with a danda

Hindi

"आप कैसे हैं? मैं ठीक हूँ।"

Comma restores a Hinglish message

Hinglish

"Kal milte hain, OK, bye. Take care."

Same library on every platform

The Kotlin Multiplatform sample app, built from the published artifacts, gives the same result on Android, iOS, desktop and the web.

Comma sample on Android

Android

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

Comma sample on iOS

iOS

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

Comma sample on Desktop (JVM)

Desktop (JVM)

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

Comma sample on Web (Wasm)

Web (Wasm)

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

Install

Add it to your build

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.

Maven Central live
// 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
Build with a prompt
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.
Usage

One call per message

Load once and reuse the instance. restore() is thread-safe.

Kotlin
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()
Java
try (Comma comma = new Comma()) {
    String text = comma.restore(
        "can you pick up the kids at 5 i am stuck in a meeting");
}
Use cases

Where Comma fits

Anywhere text arrives without punctuation.

Voice typing & dictation

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.

Voice notes & transcripts

Turn a long transcript into readable sentences; long text is handled in overlapping windows.

a 2-minute voice note → paragraphs with full stops

Chat & captions

Tidy fast-typed messages or live captions for display, search or reading aloud.

"आप कैसे हैं मैं ठीक हूँ" → आप कैसे हैं? मैं ठीक हूँ।

Before other text models

Sentence boundaries and capitals help translation, summarisation and text-to-speech downstream.

split into sentences → speak each one
App ideas

20 apps you could build with Comma

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

Quality

Honest numbers

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.

CommaXLM-R punctuation + true-case (47 languages)XLM-R base, punctuation only
Hinglish chat, punctuation / capitals0.83 / 0.920.49 / 0.700.41 / —
English chat, punctuation / capitals0.86 / 0.960.72 / 0.910.75 / —
Hand-written messages, punctuation / capitals0.74 / 0.890.70 / 0.750.69 / —
Hand-written messages fully right43%26%—
Formal text, 18 languages, punctuation / capitals0.65 / 0.790.76 / 0.660.73 / —
Size7.8 MB1.1 GB1.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.

Reference

API at a glance

MemberDescription
Comma()Loads the bundled model. Implements AutoCloseable.
restore(text)Returns the text with punctuation and capitals restored. Existing punctuation is replaced; blank text returns "".
Pricing & license

Free until you're big.

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.

Commercial
Let's talk

For products above 10,000 monthly active devices on any platform.

  • One license per product, per model
  • Pricing that fits your scale
  • Direct support from the people who built it
  • Early access to model updates
Custom models
Built for you

A small, fast on-device model trained for your language, domain or task.

  • Punctuation, moderation, classification, replies and more
  • Tuned on your use case and your users' languages
  • Shipped as a plain Kotlin library, like Comma
  • Private: your model runs on your users' devices

How devices are counted

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.

What the license does not allow

  • Selling or redistributing Comma or its model on its own, or inside another SDK
  • Extracting, modifying or fine-tuning the model weights
  • Using the model or its outputs to train or distill another model
  • Reverse engineering the model or its file format
  • Offering it as a hosted API for others

Questions about licensing? Email raju348636@gmail.com or call / WhatsApp +91 63533 21951. Full terms: Hoverfly Community License.

FAQ

Questions

What is Comma?

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.

Which languages does it support?

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.

What if my text already has some punctuation?

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.

How long can the text be?

Any length. Long text is cut into overlapping windows, so every word is judged with context on both sides.

Does it run on device?

Yes. Inference runs entirely on the device in plain Kotlin. It makes no server calls, needs no network permission and sends no telemetry.

Is the Kotlin port exact?

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.

How much does Comma cost?

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.

Can you build a model for my app?

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.

A note from the creator

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.

Raju ShingadiyaAndroid developer · creator of Hoverfly
Meet the maker
The Hoverfly family

Comma is one of eight.

Eight small on-device models, one job each. Same install, same free tier, and the same promise: nothing leaves the device.

MojiEmoji suggestionsThe right emoji for any message, in 22 languages. BeaconLanguage detectionLanguage and script of any text, Hinglish included.
CommaPunctuationTurns voice-typed text into readable sentences.You're here
ComebackSmart repliesThree tap-to-send replies for every message. EmotionEmotion detection28 emotions and an overall mood, per message. GatekeeperToxicity detectionCatches abuse and threats in Indian chat. HideoutPersonal info hidingHides phones, UPI, Aadhaar and more. ChalkDoodle recognitionGuesses 345 things from pen strokes, live.
View all models Hoverfly home