Introduction
The emoji toolkit for the modern web
Emoteer is a framework-agnostic toolkit for building rich emoji experiences — pickers, reactions, autocomplete, and emoji-aware inputs — with primitives that are headless by default and styled when you want them to be.
It ships a shared data and state core (@emoteer/core) plus thin framework bindings. React and Svelte 5 are production-ready today; Vue is on the roadmap.
What's in the box
EmoteList
Searchable, virtualized emoji picker with tabs, keyboard navigation and preview.
ReactionCounter
Grouped reaction chips with counts, active states and toggles.
EmoteAutocomplete
Inline shortcode suggestions triggered by typing `:` in any input.
EmoteInput
Single-line and multi-line inputs that auto-convert `:shortcode:` to unicode.
ReactionSlider
Emoji-based intensity sliders for feedback and ratings.
ReactionButton
Sticker-style reaction buttons with burst animations and an optional picker.
Design principles
- Headless first. Compound primitives give you full control over markup, ARIA and styling. Defaults are opt-in.
- Framework agnostic. The core package ships data, search and state; bindings are a thin layer.
- Typed end-to-end. Every event, slot and prop is typed. No
anys in public APIs. - Zero config. Ship a full picker in ten lines. Customize only what you need.
Packages
| Package | Status | Description |
|---|---|---|
@emoteer/core | stable | Data, search, shortcodes and state machines |
@emoteer/react | stable | React bindings and styled components |
@emoteer/svelte | stable | Svelte 5 bindings and styled components |
@emoteer/vue | soon | Vue bindings |