Desert Ant Labs

Emo: On-device Emoji Suggestions

Emoji suggestionsAvailable

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 馃挵 馃挸 馃Ь. It is tuned for how people actually write, and it 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.

<10 ms
Per suggestion
<6 MB
On-device
23
Languages
~800
Emoji vocabulary

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 bundled model, no server call

Platforms and install

SwiftiOS, macOS
Install
// Swift Package Manager
.package(url: "https://github.com/Desert-Ant-Labs/emo-swift", from: "0.5.0")
Example
import Emo

let emoji = try await Emo.suggestions(for: "Pay my bills")
// ["馃挵", "馃挸", "馃Ь"]
KotlinAndroid
Install
// build.gradle.kts (via JitPack)
implementation("com.github.Desert-Ant-Labs:emo-kotlin:0.5.0")
Example
import ai.desertant.emo.Emo

val emoji = Emo.suggestions("Pay my bills")
// ["馃挵", "馃挸", "馃Ь"]
JavaScript / TypeScriptWeb, Node.js
Install
npm i @desert-ant-labs/emo
Example
import { suggestions } from "@desert-ant-labs/emo";

const results = await suggestions("Pay my bills");
// [{ emoji: "馃挵", confidence: 0.62 }, ...]

Specs

Languages
23, including CJK, Arabic, Thai, and Hindi
On-device size
~5 MB bundled (model + tokenizer)
Latency
Under 10 ms per suggestion
Approach
Two-stream text classifier: lexical n-grams plus a multilingual embedding

Resources