Emo: On-device Emoji Suggestions
On-device emoji suggestions that read a short piece of text and return the emoji that actually fit it, in 23 languages, in under 10 milliseconds.
Emo predicts relevant emoji from short text like tasks, calendar entries, and messages. "Dentist appointment" returns 🦷 🪥 🏥 🩺; "Pay my bills" returns 💰 💳 🧾. Emo is tuned for how people actually write, and supports skin-tone variants.
Emo suggests emoji from meaning; it is not an emoji picker. A picker shows a grid to browse. Emo reads the text and proposes the fitting emoji, the way a predictive keyboard proposes the next word. A compact two-stream text classifier keeps it small and fast enough to run on every keystroke.
Demo
Performance
Sub-10 ms suggestions from a <6 MB model, across 23 languages.
Internal measurements. Emoji semantics are approximate, so near-ties at the top of the ranking are expected.
Use cases
Keyboard and autocomplete
Suggest emoji as the user types, the way a predictive keyboard suggests words, entirely on device.
Calendar and task entries
Tuned for short entries: "Dentist appointment" returns 🦷 🪥 🏥 🩺, so a scheduling app can label events automatically.
Messaging
Surface fitting emoji for a draft message across languages, with no network round-trip.
Complements a picker
Emo works from meaning, so it sits alongside the emoji grid rather than replacing it.
What it does
- Curated vocabulary of ~800 everyday emoji, with skin-tone variants.
- Multilingual: 23 languages, including CJK, Arabic, Thai, and Hindi.
- Prediction in under 10 ms on modern phones.
- Small model, no server inference.
Platforms and install
// Swift Package Manager
.package(url: "https://github.com/Desert-Ant-Labs/emo", from: "0.8.0")
import Emo
let emo = Emo()
let suggestions = try await emo.suggestions(for: "Pay my bills")
// ["💰", "💳", "🧾"]
// build.gradle.kts (Maven Central)
implementation("ai.desertant:emo:0.8.0")
import ai.desertant.emo.Emo
val emo = Emo(context)
val suggestions = emo.suggestions("Pay my bills")
// [EmoSuggestion("💰", ...), ...]
npm i @desert-ant-labs/emo @litertjs/core
import { Emo } from "@desert-ant-labs/emo";
const emo = await Emo.load();
const results = await emo.suggestions("Pay my bills");
// [{ emoji: "💰", confidence: 0.62 }, ...]
Add Emo from Desert Ant Labs to this project.
On-device emoji suggestions that read a short piece of text and return the emoji that actually fit it, in 23 languages, in under 10 milliseconds.
SDKs (use the one that matches this project's platform):
Swift (iOS, macOS)
Repo: https://github.com/Desert-Ant-Labs/emo
// Swift Package Manager
.package(url: "https://github.com/Desert-Ant-Labs/emo", from: "0.8.0")
Kotlin (Android)
Repo: https://github.com/Desert-Ant-Labs/emo
// build.gradle.kts (Maven Central)
implementation("ai.desertant:emo:0.8.0")
JavaScript / TypeScript (Web, Node.js)
Repo: https://github.com/Desert-Ant-Labs/emo
npm i @desert-ant-labs/emo @litertjs/core
Reference:
- Model page: https://desertant.com/models/emo/
- Full catalog and other models: https://desertant.com/llms.txt
Add the SDK that matches this project's platform, then follow its README for the exact API and current version. Do not invent API names or method signatures; confirm them against the README.
Specs
- Languages
- 23, including CJK, Arabic, Thai, and Hindi
- On-device size
- ~5 MB on device (model + tokenizer)
- Latency
- Under 10 ms per suggestion
- Approach
- Two-stream text classifier: lexical n-grams plus a multilingual embedding
FAQ
What is Emo?
On-device emoji suggestions that read a short piece of text and return the emoji that actually fit it, in 23 languages, in under 10 milliseconds.
Does Emo run on device?
Yes. Emo runs entirely on device: inference happens locally with no server call, so data never leaves the device.
Which platforms does Emo support?
Emo ships as native on-device SDKs for Swift, Kotlin, JavaScript / TypeScript.
How much does Emo cost?
Every model is free up to 100k monthly active devices per SDK. Unlimited inference per user. Contact us for custom licenses.
How accurate or fast is Emo?
Sub-10 ms suggestions from a <6 MB model, across 23 languages.