animated-fluent-emojis

Microsoft's animated Fluent emojis as one component. They play on load or hover, rest under reduced motion and hold their space while they load.
3,190 1
Install
npm install animated-fluent-emojis
Latest Version:0.8.0
Vue:3
License:MIT
Last Updated:Oct 21, 2026
Links: GitHub  ·  npm
Maintainer: andryore

Animated Fluent Emojis

Animated Fluent Emojis

CI npm version License OpenSSF Scorecard npm downloads Bundle size Types

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.

Rocket Launch Fire Hundred Points

Table of Contents

Features

  • One component. <Emoji id="…" />, with size, skinTone and 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. alt comes from the emoji's description, and alt="" 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/lookup turns 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.
  • Emoji now forwards ref and any <span> attribute to its root span, and merges className and style.
  • A failed manifest load is retried on the next mount, preloadEmojis call or online event, and onError now 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 id now renders fallback (nothing by default) and never calls onError.
  • Emojis with more than 81 frames lost their HD sheet. size also 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.

Contributors

Support the Project

If you find Animated Fluent Emojis useful, please consider supporting it:

GitHub Stars GitHub Follow X Follow Ko-fi

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

Related Packages

@formkit/auto-animate

Add motion to your apps with a single line of code.

42,768,396 13,935
@emojisense/web-component

: a framework-free emoji picker custom element with Emojisense search.

0 2
jervis-icons

Universal icon/image web component that works with any framework

30,773
browser-shortcuts

Declarative keyboard, mouse and wheel shortcuts for React, Preact, Vue, Svelte,...

520 0
@symbiote-native/reanimated

react-native-reanimated 4 and react-native-worklets for SymbioteNative — one fra...

254 72

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