Type :emote: in Minecraft chat and pick it from a popup, just like commands.
English | Español
WaveMotes is a lightweight, client-side Fabric mod. Start typing : in
chat and a suggestion popup appears, the exact same one you get with / commands,
but full of emotes. Pick one and the rendered emote is inserted into your message.
It ships with an embedded emote pack that renders client-side, so your emotes show
up even if the server never sends you a resource pack. Optionally, it can also suggest
the full set of standard Discord emojis (:skull: → 💀, :fire: → 🔥, …).
One jar, no extra setup. No malilib, no YACL, no config files to copy by hand. Drop it in your
modsfolder and it works.
- 🗨️ Popup autocomplete: type
:to open the same dropdown as/commands, filtered live as you type. - 🔄 Live emote sync: new emotes added on the server show up on their own, no mod update needed. WaveMotes fetches a manifest the server publishes, caches the new textures locally and renders them. The bundled set stays as an offline fallback. On by default; force a refresh with
/wm sync. - 🖼️ Client-side rendering: the built-in emote textures are bundled in the jar, so they render even with no server resource pack.
- 🔠 Bigger than text: emotes are scaled up so they actually read as emotes, not tiny glyphs.
- 😀 Optional Discord emojis: 1900+ standard Discord shortcodes (Twemoji textures, rendered in color in-game), off by default. Enable them all, or add just the ones you want (e.g. only
:skull:). - 🎛️ In-game config screen: Tweakeroo-style On/Off switches. Open it with
/wmor bind a key. - 🪶 No dependencies beyond Fabric API. Single jar.
- Install Fabric Loader for Minecraft 1.21 or newer.
- Download Fabric API.
- Download WaveMotes and drop both jars into your
.minecraft/modsfolder. - Launch the game.
This is a client-side mod, so it does not need to be installed on the server.
| Action | How |
|---|---|
| Open the emote popup | Type : in chat (optionally keep typing to filter, e.g. :sku) |
| Insert an emote | Click it, or use the arrow keys + Tab/Enter like any suggestion |
| Open the config | Run /wm (or /wavemotes), or bind a key in Options → Controls → WaveMotes |
| Force a live sync | Run /wm sync (fetches newly added server emotes right away) |
The config screen (and the file at config/wavemotes.json) has:
- Built-in emotes: On/Off. The embedded pack, rendered client-side.
- Discord native emojis (all): On/Off, Off by default. Adds the full standard Discord emoji set to the popup.
- Add a single emoji: type a shortcode (e.g.
skull) and click Add to enable just that one without turning on the whole set. Clear added emojis wipes that list. - Live emote sync: On/Off, On by default. When on, the mod pulls new server emotes from a published manifest (
manifestUrlin the config file) and renders them without a mod update. Turn it off to stick to the bundled set only.
About Discord emojis: these are standard Unicode emoji rendered with bundled Twemoji textures, so they show in color in-game. A few hundred multi-codepoint ones (most country flags, ZWJ sequences like family emoji) can't be drawn as a single in-game glyph, so those render as their components locally, but they still travel correctly to Discord through a chat bridge. They're off by default to keep the picker focused on the built-in pack.
Too big? Too small? Every emote shares one size, so changing it is a single find-and-replace.
The jar is just a zip: open assets/minecraft/font/default.json inside it and change every
"height": 16 to whatever you like (bigger number = bigger emotes). "ascent": 11 nudges them
up or down; a safe rule of thumb is ascent ≈ height − 5. Restart the game and you're done.
Building from source? One command does it, then rebuild:
python tools/set_emote_size.py 20 # height 20, ascent auto (15)
./gradlew buildWaveMotes is the client half of a two-part system. It runs fine on its own, but it was built to sit next to a server side that does the heavy lifting.
- WaveMotes (this mod, client side): the
:emote:popup and client-side rendering. You see your emotes on any server, even if no resource pack ever reaches you, because the textures are embedded in the jar on purpose. - W4VE server side (the real workhorse): makes everyone on the server see the emotes,
even vanilla players with no mod, and bridges them to and from Discord. Three pieces:
- a resource pack with a custom PUA font that draws each emote, pushed to every client;
- Styled Chat, so typing
:tet:in-game turns into the emote for all players; - a patched ChatBridge that rewrites
:name:↔<:name:id>between Minecraft and Discord.
Run them together (as on MineWave) and you get the full experience: a Discord-style picker, emotes that everyone sees, and a live Discord bridge.
The mod still works alone. Solo, you get the picker and your own emotes rendered locally. What you don't get without the server side: other players seeing your custom emotes, and the Discord bridge.
The server side needs a dedicated server or VPS with full file/plugin access. It is not possible on locked-down shared hosts (Shockbyte, Aternos, etc.). It is bespoke infrastructure (a resource pack tied to a Discord guild, plus its own hosting), not a one-click download. So far the packaged piece is the chat bridge, ChatBridge; the rest lives in the wider CodeW4VE project.
- Minecraft 1.21+ (Fabric).
- Requires Fabric API.
- Client-side only; safe to use on servers that don't have it.
# JDK 21 required
export JAVA_HOME=/path/to/jdk-21
./gradlew buildThe built jar lands in build/libs/.
MIT © tvtvirus / CodeW4VE.
The bundled emote textures belong to the MineWave community and are included with permission. Discord emoji textures are from Twemoji (© Twitter / jdecked, licensed CC-BY 4.0).

