Moji ยท by Hoverfly

The right emoji,
every keystroke.

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.

Get started View source

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

moji.suggestions(text)
Pay my bills ๐Ÿ’ฐ
๐Ÿ’ฐ๐Ÿ’ธ๐Ÿงพ๐ŸŽŸ๏ธ๐Ÿ˜๐Ÿ’ต๐Ÿ’ณ๐Ÿ’ฏ
Live demo

Try the real model, right here

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.

Loading the model (~5 MB)โ€ฆ
Skin tone
Tap an emoji to add it to the text
Why Moji

Built for a keyboard, not a datacenter

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.

No dependencies

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.

Private & offline

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.

Fast

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

22+ languages

Works across languages and scripts. Top-1 and top-5 predictions match a Python reference implementation exactly on all 443 test vectors.

~0.5ms
Per suggestion
once warm, on device
~5MB
On-device
model + tokenizer, inside the library
22+
Languages
1000
Emoji vocabulary
On device

One model, 22+ languages

Real output from the sample app on a Pixel emulator โ€” not mockups. Same model, three languages, no network round trip.

Moji suggesting emoji for Hindi text เคœเคฟเคฎ เคœเคพเคจเคพ เคนเฅˆ

Hindi

"เคœเคฟเคฎ เคœเคพเคจเคพ เคนเฅˆ" โ†’ โœ… ๐Ÿ‘ฅ ๐Ÿ“‹ ๐Ÿ‘€ ๐Ÿ™

Moji suggesting emoji for Spanish text Partido de fรบtbol esta noche

Spanish

"Partido de fรบtbol esta noche" โ†’ โšฝ ๐Ÿˆ ๐Ÿ€ ๐Ÿƒ ๐ŸŸ๏ธ

Moji suggesting emoji for French text Rรฉserver un vol pour Paris

French

"Rรฉserver un vol pour Paris" โ†’ โค๏ธ ๐Ÿ† ๐Ÿ“ โœ… โญ

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.

Moji sample on Android

Android

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

Moji sample on iOS

iOS

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

Moji sample on Desktop (JVM)

Desktop (JVM)

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

Moji sample on Web (Wasm)

Web (Wasm)

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

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 waitlist, no API key.

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

Three lines to suggestions

Load once, reuse the instance, and call suggestions() on every keystroke โ€” it's thread-safe and fast enough for it.

Kotlin
val moji = Moji()

val top = moji.suggestions("Pay my bills").first()
top.emoji   // "๐Ÿ’ฐ"

moji.close()
Java
try (Moji moji = new Moji()) {
    List<MojiSuggestion> s =
        moji.suggestions("Pay my bills");
}
Use cases

Where Moji fits

Anywhere text is composed, one call turns it into an emoji rail โ€” no server, no delay.

Custom keyboards & IMEs

Power a live emoji suggestion bar above the keyboard, updated on every keystroke without leaving the device.

"Pay my bills" โ†’ ๐Ÿ’ฐ ๐Ÿ’ธ ๐Ÿงพ

Chat & messaging apps

Suggest reactions or inline emoji as a user types a message, the way modern chat apps auto-complete tone.

"Walk the dog" โ†’ ๐Ÿถ โค๏ธ ๐Ÿšถ

Social & caption composers

Recommend emoji for post captions and status updates while the user is still writing them.

"Movie night at home" โ†’ ๐Ÿฟ ๐Ÿ›‹๏ธ ๐ŸŽฌ

Support & chatbot UIs

Give automated responses a quick, on-brand emoji reaction without a round trip to a moderation or NLP service.

"Great job thumbs up" โ†’ ๐Ÿ‘ ๐Ÿ‘ ๐Ÿ˜Ž

Notes & journaling apps

Tag entries with a mood or topic emoji automatically, useful for journal timelines and mood tracking.

"Dentist appointment tomorrow" โ†’ ๐Ÿ‘‡ ๐Ÿง‘โ€โš•๏ธ ๐Ÿ˜ฌ

Reviews & feedback forms

Turn free-text reviews into a quick emoji sentiment tag alongside the star rating, computed on-device.

"Amazing service, highly recommend" โ†’ ๐Ÿ˜ ๐Ÿ”ฅ โค๏ธ

Notifications & quick replies

Offer emoji-only quick-reply chips generated from the incoming notification text.

"Happy birthday! ๐ŸŽ‰" โ†’ ๐Ÿ˜‚ ๐ŸŽ‚ ๐Ÿ˜˜

Accessibility & low-effort input

Let users express a full thought with a single tap on a suggested emoji instead of typing it out.

"เคœเคฟเคฎ เคœเคพเคจเคพ เคนเฅˆ" โ†’ โœ… ๐Ÿ‘ฅ ๐Ÿ“‹
App ideas

20 apps you could build with Moji

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.

Reference

API at a glance

MemberDescription
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 โ€ฆ DARKApplied to people/hand emoji that support it. applyTo(emoji) is also public.
Pricing & license

Free until you're big.

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.

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.

  • Moderation, classification, detection, replies and more
  • Tuned on your use case and your users' languages
  • Shipped as a plain Kotlin library, like Moji
  • 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 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.

What the license does not allow

  • Selling or redistributing Moji 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 Moji?

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.

Does Moji run on device?

Yes. Inference happens entirely on-device in plain Kotlin โ€” no server call, no network permission, no telemetry.

Which platforms does Moji support?

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.

How accurate is it?

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.

How fast and how big is it?

About 0.5 ms per suggestion once warm, and about 5 MB added to your APK for the model and tokenizer.

How much does Moji 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.

What happens when my app passes 10,000 monthly active devices?

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.

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. Get in touch on the same email or number.

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

Moji 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.You're here
BeaconLanguage detectionLanguage and script of any text, Hinglish included. CommaPunctuationTurns voice-typed text into readable sentences. 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