animated-fluent-emojis
| Install | |
|---|---|
npm install animated-fluent-emojis |
|
| Latest Version: | 0.8.0 |
| Vue: | 3 |
| License: | MIT |
| Last Updated: | Oct 21, 2026 |
| Links: | GitHub · npm |
Animated Fluent Emojis
Fluent emojis, but they move.
Drop Microsoft's animated Fluent emojis into a React, Vue, Svelte or Astro app,
or any page through the <fluent-emoji> element: one import, one tag. They play
on load or on hover, rest on a still frame when someone asks for less motion,
and hold their space in the layout while they load.
<Emoji id="1f44b_wavinghand" />
The artwork belongs to Microsoft. The code is MIT. This project is not affiliated with or endorsed by Microsoft. See Assets and licensing.
Table of Contents
Features
- One component.
<Emoji id="…" />, withsize,skinToneand more, in each supported framework. - Plays when you want. On load, on hover or focus, or driven by
playing. - Rests when asked. Under reduced motion it stays on its poster frame.
- Holds its space. An empty placeholder of the final size keeps the layout steady while it loads. The manifest is fetched on first render, never at import.
- Sharp on HD screens. Emojis with an HD sprite sheet are served at 2x to high-density displays.
- Described by default.
altcomes from the emoji's description, andalt=""marks it decorative. - Fails softly. A sprite sheet that does not load shows the emoji's native
character, or your own
fallback. - Findable.
animated-fluent-emojis/lookupturns a character or a description into an id, with no framework. - Typed. TypeScript types, with autocomplete for emoji ids.
Installation
Install the package. It is ESM-only. Every framework peer is optional, so you
only install the one you use (react and react-dom 18 or 19, vue, svelte,
astro, solid-js or preact):
bun add animated-fluent-emojis
Works with
One package, one import path per framework. Each row links to its install and usage steps.
| Framework | Import | Guide |
|---|---|---|
| React | animated-fluent-emojis/react |
Usage |
| Vue | animated-fluent-emojis/vue |
Usage |
| Svelte | animated-fluent-emojis/svelte |
Usage |
| Astro | animated-fluent-emojis/astro |
Usage |
| Plain HTML | animated-fluent-emojis/element |
Usage |
| Angular | animated-fluent-emojis/element |
How-to |
| Solid | animated-fluent-emojis/element |
How-to |
| Preact | animated-fluent-emojis/element |
How-to |
| No framework | createEmoji from animated-fluent-emojis |
Usage |
Lit, Alpine and htmx use <fluent-emoji> too.
Usage
Import the component and the stylesheet once, for example in your app entry. The stylesheet carries the animation keyframes; without it emojis render as static sprite sheets.
import { Emoji } from 'animated-fluent-emojis/react'
import 'animated-fluent-emojis/style.css'
;<Emoji id="1f44b_wavinghand" size={64} playOnHover skinTone="medium" />
The manifest is fetched on first render, never at import; see the usage guide for loading and failure behavior.
Next.js and server components
The bundle starts with "use client";, so a server component can import
Emoji. Import the stylesheet once, in the root layout. It renders a
placeholder on the server and the emoji after hydration. Call configureEmojis
and preloadEmojis from a client module, not a Server Component.
Props
These are the React props; the other adapters take the same set in their own spelling, see the usage guide.
| Prop | Type | Default | Description |
|---|---|---|---|
| id | EmojiId or string |
- | The emoji to render; known ids autocomplete |
| size | number or string | 100 | Pixels, or any CSS length such as 2rem |
| playOnHover | boolean | false | Play on hover and on keyboard focus |
| animationIterations | number or 'infinite' | 2 | How many times to play on load |
| autoPlay | boolean | true | Play on mount |
| playing | boolean | - | Controls playback: true plays, false pauses |
| onPlaybackEnd | function | - | Called when a finite run ends |
| skinTone | SkinTone | 'default' | Skin tone for emojis that have variants |
| alt | string | description | Accessible text; "" marks it decorative |
| fallback | ReactNode | glyph | Rendered when the id is unknown or the image or manifest fails |
className, style, ref, onLoad, onError and any other <span>
attribute are also accepted. Every prop, with edge cases, is in the
usage guide.
Documentation
| Doc | Covers |
|---|---|
| Usage guide | Frameworks, props, playback, fallback, lookup |
| How-to guides | Angular, Solid, Preact, Next.js and more |
| Use without code | Slack, Notion, Docs, email, a README |
| Docs index | Every document in this repository |
| Troubleshooting | Fixes for common problems, by symptom |
| Security design | Threat model and assurance case |
| Changelog | Release notes |
| Roadmap | Project direction |
| Governance | Decisions and project continuity |
| Contributing | Setup, conventions and merging |
| Code of Conduct | Community standards |
Migrating from 0.4
- The fallback glyph is the new default: a failed sprite sheet shows the emoji's
native character. Pass
fallback={null}to restore the 0.4 behavior. Emojinow forwardsrefand any<span>attribute to its root span, and mergesclassNameandstyle.- A failed manifest load is retried on the next mount,
preloadEmojiscall oronlineevent, andonErrornow reports it. - Autoplay waits for the image, the viewport and a visible tab; see Playback.
- The runtime reads the versioned asset layout (
/v1/) with a compact manifest. If you mirror the asset site, publish that layout with the 0.5 pipeline; see the changelog, ADR 0010 and ADR 0011. - An unknown
idnow rendersfallback(nothing by default) and never callsonError. - Emojis with more than 81 frames lost their HD sheet.
sizealso accepts a CSS length string.
Terms such as fallback glyph and asset layout version are defined in
CONTEXT.md.
Emoji Categories
Every emoji, with its id, Unicode, description and keywords, is in the Emoji List, split by category: Activities, Animals, Food, Hand Gestures, Objects, People, Smileys, Symbols and Travel and Places.
Contributing
Contributions to Animated Fluent Emojis are welcome. Read CONTRIBUTING for setup and conventions, and the development guide for scripts and tooling. Everyone taking part follows the Code of Conduct. To report a vulnerability, follow SECURITY.
Support the Project
If you find Animated Fluent Emojis useful, please consider supporting it:
License
The code is free for commercial and personal use. It is licensed under the MIT © Andry Orellana. The emoji artwork is Microsoft's; see Assets and licensing.
Assets and licensing
The manifest and sprite sheets are served from the asset site on Cloudflare
Pages (animated-fluent-emojis-cdn.andryore.dev), generated by scripts/assets
and refreshed automatically. Most emojis come from the animated Fluent emoji set
that Microsoft Teams publishes; the rest come from Microsoft's MIT-licensed
fluentui-emoji-animated repository. The
sprites remain Microsoft's assets: this package's MIT license covers the code
only. The MIT notice for Microsoft's repository is published at
/LICENSE-fluentui-emoji-animated.txt on the asset site.
Every emoji and skin tone is also a plain file (GIF, WebP and PNG) on the files
site, animated-fluent-emojis-files.andryore.dev, for people who use them
without the library; see Use without code.
The artwork is Microsoft's and its use is subject to Microsoft's terms. The site
publishes the notice for the emojis from Microsoft's MIT-licensed repository at
/LICENSE-fluentui-emoji-animated.txt and the attribution at /NOTICE.txt.
Acknowledgements
- Microsoft for their Fluent Emoji set
- Tarikul Islam Anik for the Animated Fluent Emojis project, which served as inspiration for this library
Related Packages
: a framework-free emoji picker custom element with Emojisense search.
Declarative keyboard, mouse and wheel shortcuts for React, Preact, Vue, Svelte,...
react-native-reanimated 4 and react-native-worklets for SymbioteNative — one fra...
Version History
| Version | Released | Vue | License |
|---|---|---|---|
| 0.8.0 | ^3.3.0 | MIT | |
| 0.7.0 | ^3.3.0 | MIT | |
| 0.6.0 | ^3.3.0 | MIT | |
| 0.5.3 | MIT | ||
| 0.5.2 | ISC | ||
| 0.5.1 | ISC | ||
| 0.4.0 | ISC | ||
| 0.3.0 | ISC | ||
| 0.2.0 | ISC | ||
| 0.1.2 | ISC | ||
| 0.1.1 | ISC |