Compatibility
Minecraft: Java Edition
Platforms
Supported environments
Links
Tags
Creators
Details
Emotify adds animated emotions above Minecraft players: a fast and quiet alternative to another chat message or a full-body emote.
NeoForge and Fabric players can share built-in and custom emotions across NeoForge, Fabric, Paper, and Purpur servers through the same bounded server-authoritative system.

✨ Features
- 162 built-in emojis with persistent favorites.
- Complete English and Russian localization.
- Localized search across emoji names and aliases.
- Nine persistent quick slots assigned through drag and drop and activated with the top-row or Numpad
1–9keys. - Personal custom emojis from PNG, JPG, JPEG, and animated GIF files.
- Multiplayer custom emoji sharing across all supported client and server combinations.
- Local saving of another player's custom emoji using Shift and right-click.
- Readable saved filenames with stable duplicate-lineage protection.
- Three distinct animated presentations: Elastic Pop, Ribbon Weave, and Lantern Release.
- A unified three-second emotion lifecycle with smooth entrance, steady presentation, and fade-out phases.
- Smooth world-space rendering that follows standing, crouching, swimming, sleeping, riding, and gliding players.
- Emotions remain behind blocks and respect first-person, invisibility, spectator, and visibility rules.
- Movement-friendly picker that does not take control away from the player.
- Automatic refresh when custom emoji files are added, changed, or removed.
- Client settings for incoming emotions, custom emotions, ignored players, sound volume, and Reduced Motion.
- Versioned client and server configuration with bounded migration and backup protection.
- Server-controlled cooldowns, custom emoji limits, visibility filtering, bounded payloads, and abuse protection.
Emotify keeps its visual language close to Minecraft: readable pixel sprites, smooth motion, and no particle noise competing with gameplay.
🖼️ Custom emojis
Place custom emoji files directly in:
<game directory>/emoji
The folder can also be opened using the folder button beside the emotion picker.
Supported static image sizes:
8×816×1632×3264×64128×128
Supported animated GIF sizes:
8×816×1632×3264×64
Each file must be no larger than 512 KiB. Images are never resized, so unsupported dimensions are ignored instead of losing quality.
GIF files are optimized automatically. Emotify can inspect up to 300 source frames, merge redundant frames, preserve visible timing, and prepare an animation with up to 30 transmitted frames, 15 FPS, and a three-second presentation cycle. Longer animations are clipped without accelerating the retained portion.
Custom emojis appear in their own picker tab and can be searched, added to favorites, or assigned to any of the nine quick slots. Compatible servers share them automatically with nearby Emotify players.
Only content-addressed decoded pixels, frame durations, a bounded display name, and a stable origin ID are transferred. Original image containers, local paths, and image metadata never leave the client.
To save another player's active custom emotion, hold Shift and right-click the interaction area above the player. The hit test uses the normal Minecraft block-interaction distance, respects block occlusion, and does not require aiming directly at a moving sprite.
Saving reuses the custom asset already cached by the client and sends no additional network packet. Static assets are stored losslessly as PNG files and animated assets as normalized looping GIF files. A vanilla pickup sound confirms successful saving and follows the client sound-volume setting.
Server owners can disable custom emojis or reduce the maximum accepted static and animated resolutions.
🌐 Compatibility
| Component | Supported version |
|---|---|
| Minecraft | 1.21.1 |
| NeoForge | 21.1.234 or newer |
| Fabric Loader | 0.19.3 or newer |
| Fabric API | 0.116.15+1.21.1 or newer compatible release |
| Fabric Language Kotlin | 1.13.12+kotlin.2.4.0 or newer compatible release |
| Paper / Purpur | 1.21.1 |
| Java | 21 |
| Kotlin for Forge | 5.12.0 or a newer compatible 5.x release |
All supported platforms use the same Emotify protocol. NeoForge and Fabric clients can connect to either modded server platform or to Paper and Purpur servers running the plugin.
Players without the Emotify client can still join normally, but they cannot send or see emotions.
Important: Emotify uses separate NeoForge, Fabric, and Paper files. Install only the file intended for the platform on which it runs.
📦 Installation
NeoForge
Install the NeoForge Emotify file in the mods folder.
Kotlin for Forge 5.12.0 or a newer compatible 5.x release is required.
The same file supports NeoForge clients, singleplayer, and NeoForge dedicated servers.
Fabric
Install the Fabric Emotify file in the mods folder together with:
- Fabric API;
- Fabric Language Kotlin.
The same file supports Fabric clients, singleplayer, and Fabric dedicated servers.
Mod Menu is optional. Emotify settings remain available through the emotion picker without it.
Paper or Purpur
Install the Paper Emotify file in the server's plugins folder.
No additional server dependencies are required. Players connect using either the NeoForge or Fabric Emotify client.
A separate Purpur build is not required.
Do not install multiple Emotify platform files in the same game or server instance.
⚙️ Client settings
The shared settings screen is available from the gear button beside the emotion picker. It can also be opened from the NeoForge Mods screen or Fabric Mod Menu when installed.
Available settings include:
- show or hide emotions from other players;
- independently show or hide custom emotions;
- manage a persistent ignored-player list;
- enable Reduced Motion;
- adjust the saved-emoji confirmation and future emotion-sound volume.
Your own emotions remain visible when incoming emotions are disabled.
Favorites and quick slots are managed directly in the emotion picker. Drag any built-in or custom emoji card onto a slot, press its number while the picker is open to use it, or right-click a filled slot to clear it.
Quick slots are stored independently from favorites. Built-in and custom assignments persist across game restarts. When a local custom-emoji file is removed, its assignment is cleared after a complete stable library refresh. Incomplete scans, decoding failures, capacity limits, and directory limits preserve existing assignments.
🛡️ Server administration
Server settings are stored in:
| Platform | Configuration file |
|---|---|
| NeoForge | <world>/serverconfig/emotify-server.toml |
| Fabric | config/emotify-server.properties |
| Paper / Purpur | plugins/Emotify/config.yml |
Server owners can configure:
- whether Emotify is enabled;
- whether custom emojis are allowed;
- maximum static and animated custom emoji resolutions;
- emotion cooldown;
- emotion allow and deny lists;
- visibility radius;
- bounded broadcast and network ingress limits.
The default emotion cooldown is 3000 milliseconds, matching the complete three-second presentation lifecycle.
All server formats use versioned configuration schema 1. Valid versionless configurations from earlier releases are backed up and migrated automatically. Future configuration schemas are never overwritten by an older Emotify build.
NeoForge and Fabric apply server settings during startup.
Paper and Purpur settings can be applied without restarting:
/emotify reload
Invalid Paper or Purpur reloads are rejected without replacing the active server policy. Invalid Fabric configuration is rejected during startup. NeoForge uses its standard configuration correction behavior.
Paper and Purpur permissions
| Permission | Default | Purpose |
|---|---|---|
emotify.use |
Everyone | Send emotions |
emotify.receive |
Everyone | Receive emotions |
emotify.admin.reload |
Operators | Reload the plugin configuration |
The plugin uses the standard Bukkit permission API and does not require direct LuckPerms integration.
🐛 Bug reports
Report problems through the GitHub issue tracker.
Please include:
- Emotify and Minecraft versions;
- client loader and server platform;
- relevant client and server
latest.logsections; - clear reproduction steps;
- a screenshot or short recording for visual problems.
Remove private server addresses, access tokens, and personal information before uploading logs.
🎨 Asset credits
The 162 bundled 8×8 emoji assets come from Happy's Better Emojis by Happy_AlexRO.
The artwork is included without visual modification and remains licensed under Creative Commons Attribution 4.0 International.
Emotify provides its own catalog, stable identifiers, categories, atlas coordinates, localization, animations, interface, and multiplayer system.
📄 License
Emotify's source code and original project material are available under the MIT License.
The bundled Happy's Better Emojis artwork remains subject to CC BY 4.0.
Emotify is an independent project and is not affiliated with Mojang Studios, Microsoft, NeoForge, Fabric, PaperMC, Purpur, Kotlin for Forge, Happy_AlexRO, or the Happy's Better Emojis project.


