Turn any text into ranked emoji suggestions in about half a millisecond โ computed on the device (Android, iOS, desktop or the web), with nothing sent to a server. Drop it into a keyboard, chat, or composer in three lines of Kotlin.
Free up to 10k monthly active devices ยท No API key ยท On Maven Central ยท Android, iOS, desktop, web
This is the actual Moji library, compiled to WebAssembly and running in your browser. Type anything, in any language. Your text never leaves this page.
No server round trip means no latency budget, no API bill, and no user text ever leaving the phone. Everything runs in-process, in plain Kotlin.
Pure Kotlin inference โ no ONNX Runtime, no TFLite, no native code. Nothing else to version-bump, conflict, or bloat your build. Adds about 5 MB to your APK.
The model ships inside the library on every platform. No network calls, no permissions, no telemetry โ one less thing to explain in your privacy policy.
~0.5 ms per suggestion once warm on Apple silicon, ~2 ms on a mid-range phone. Fast enough to run on every keystroke, not just on submit.
Works across languages and scripts. Top-1 and top-5 predictions match a Python reference implementation exactly on all 443 test vectors.
Real output from the sample app on a Pixel emulator โ not mockups. Same model, three languages, no network round trip.
"เคเคฟเคฎ เคเคพเคจเคพ เคนเฅ" โ โ ๐ฅ ๐ ๐ ๐
"Partido de fรบtbol esta noche" โ โฝ ๐ ๐ ๐ ๐๏ธ
"Rรฉserver un vol pour Paris" โ โค๏ธ ๐ ๐ โ โญ
The Kotlin Multiplatform sample app, built from the published artifacts, gives the same result on Android, iOS, desktop and the web.

Pay my bills โ ๐ฐ 36% ยท ๐ธ 31%

Pay my bills โ ๐ฐ 36% ยท ๐ธ 31%

Pay my bills โ ๐ฐ 36% ยท ๐ธ 31%

Pay my bills โ ๐ฐ 36% ยท ๐ธ 31%
One line in your Gradle file, from Maven Central. Works in commonMain for Android, iOS, macOS, JVM desktop, JavaScript and WebAssembly. No waitlist, no API key.
// build.gradle.kts: commonMain, or any platform source set
dependencies {
implementation("io.github.rajumark:moji:2.0.0")
}
// Gradle picks the right artifact per platform:
// moji-android ยท moji-jvm ยท moji-iosarm64 ยท moji-iossimulatorarm64
// moji-macosarm64 ยท moji-js ยท moji-wasm-js
Add Moji from rajumark to this Kotlin Multiplatform or Android project.
What it does: on-device emoji suggestions from text, in 22+ languages, ~5 MB, no dependencies, no network.
Install (Maven Central, no extra repository):
build.gradle.kts (commonMain or any source set): implementation("io.github.rajumark:moji:2.0.0")
Platforms: Android, iOS, macOS, JVM desktop, JavaScript, WebAssembly
Usage:
val moji = Moji()
val top = moji.suggestions("Pay my bills").first()
top.emoji
Repo: https://github.com/rajumark/moji#readme
Add the dependency, then follow the README for the exact API and current version.
Load once, reuse the instance, and call suggestions() on every keystroke โ it's thread-safe and fast enough for it.
val moji = Moji()
val top = moji.suggestions("Pay my bills").first()
top.emoji // "๐ฐ"
moji.close()
try (Moji moji = new Moji()) {
List<MojiSuggestion> s =
moji.suggestions("Pay my bills");
}
Anywhere text is composed, one call turns it into an emoji rail โ no server, no delay.
Power a live emoji suggestion bar above the keyboard, updated on every keystroke without leaving the device.
"Pay my bills" โ ๐ฐ ๐ธ ๐งพ
Suggest reactions or inline emoji as a user types a message, the way modern chat apps auto-complete tone.
"Walk the dog" โ ๐ถ โค๏ธ ๐ถ
Recommend emoji for post captions and status updates while the user is still writing them.
"Movie night at home" โ ๐ฟ ๐๏ธ ๐ฌ
Give automated responses a quick, on-brand emoji reaction without a round trip to a moderation or NLP service.
"Great job thumbs up" โ ๐ ๐ ๐
Tag entries with a mood or topic emoji automatically, useful for journal timelines and mood tracking.
"Dentist appointment tomorrow" โ ๐ ๐งโโ๏ธ ๐ฌ
Turn free-text reviews into a quick emoji sentiment tag alongside the star rating, computed on-device.
"Amazing service, highly recommend" โ ๐ ๐ฅ โค๏ธ
Offer emoji-only quick-reply chips generated from the incoming notification text.
"Happy birthday! ๐" โ ๐ ๐ ๐
Let users express a full thought with a single tap on a suggested emoji instead of typing it out.
"เคเคฟเคฎ เคเคพเคจเคพ เคนเฅ" โ โ
๐ฅ ๐
Real problems Moji solves today. Pick one and ship it.
Keyboard emoji bar ยท Suggest the right emoji on every keystroke in a custom keyboard.
Chat composer ยท Show emoji chips above the send button that match what's being typed.
Caption writer ยท Add fitting emoji to Instagram-style captions in one tap.
Reaction picker ยท Suggest the best reaction for a message instead of the same six defaults.
To-do app icons ยท Auto-icon tasks: "buy milk" โ ๐ฅ, "gym" โ ๐๏ธ.
Calendar events ยท Auto-emoji event titles: "dentist" โ ๐ฆท, "flight to Goa" โ โ๏ธ.
Expense tracker ยท Auto-tag expenses: "Uber" โ ๐, "pizza" โ ๐.
Shopping list ยท Turn "apples, bread, eggs" into a scannable ๐ ๐ ๐ฅ list.
Mood journal ยท Tag each diary entry with an emoji that matches its mood.
Habit tracker ยท Give each new habit an icon automatically: "run 5k" โ ๐.
Folder & page icons ยท Suggest an emoji icon when users name a folder, page or playlist.
Group chat names ยท Suggest an emoji for new group names like "Goa trip" โ ๐๏ธ.
Review & feedback forms ยท Suggest emoji that match what the user writes in their review.
Notification reactions ยท React to a message straight from the notification with the right emoji.
Push notification copy ยท Add a fitting emoji to notification titles automatically.
Friendlier support bots ยท Add a matching emoji to bot replies so they feel less robotic.
Recipe apps ยท Show ๐ง ๐ ๐ง next to ingredients for quick scanning.
Kids reading app ยท Show an emoji next to new words to help children read.
Flashcards ยท Pair each vocabulary word with an emoji to make it stick, in 22+ languages.
Easy expression ยท Let users who find typing hard pick emoji that match a few words.
| Member | Description |
|---|---|
Moji() | Loads the bundled model. Implements AutoCloseable. |
suggestions(text, limit = 8, skinTone = null) | Best emoji first. Returns List<MojiSuggestion>. |
MojiSuggestion(emoji, name, confidence, supportsSkinTone) | One ranked result. |
SkinTone.LIGHT โฆ DARK | Applied to people/hand emoji that support it. applyTo(emoji) is also public. |
No API key, no sign-up, no license file. Add Moji 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 Moji 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): give it a task or a message and it returns the emoji that fit, ranked by confidence, in 22+ languages.
Yes. Inference happens entirely on-device in plain Kotlin โ no server call, no network permission, no telemetry.
Android (minSdk 21), iOS (device and simulator, arm64), macOS (arm64), JVM desktop, JavaScript and WebAssembly, from Kotlin, and from Java on Android and the JVM. Every platform gives the same results.
Top-1 and top-5 predictions match a Python reference implementation exactly on all 443 test vectors across every supported language, with a maximum numerical difference of about 0.0000024 between the two.
About 0.5 ms per suggestion once warm, and about 5 MB added to your APK for the model and tokenizer.
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.
Nothing breaks: Moji keeps working and never checks in with a server. You have 30 days to get a commercial license. Email raju348636@gmail.com or call / WhatsApp +91 63533 21951.
Yes. Hoverfly trains custom on-device models for your language, domain or task and ships them as a small library like this one. Get in touch on the same email or number.
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.