npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

emoji-picker-react

v4.22.2

Published

Emoji Picker component for React Applications on the web

Readme

Emoji Picker React

The most popular fully customizable emoji picker for React.

npm downloads

Live Demo | Report a Bug

image

reactions

Features

  • Fully customizable through props and CSS variables
  • Light, dark, and auto themes
  • Reactions picker mode and custom click handlers
  • Dozens of built-in languages
  • Custom image-based emojis
  • Apple, Google, Facebook, Twitter, and native emoji styles
  • Responsive and mobile-friendly
  • SSR-safe

Installation

npm install emoji-picker-react

Usage

import EmojiPicker from 'emoji-picker-react';

function App() {
  return (
    <EmojiPicker onEmojiClick={(emojiData) => console.log(emojiData.emoji)} />
  );
}

onEmojiClick receives an EmojiClickData object (unified code, names, image URL, active skin tone) and the underlying mouse event.

Configuration

<EmojiPicker
  theme="dark"
  emojiStyle="native"
  width={320}
  height={400}
  previewConfig={{ showPreview: false }}
/>

See PROPS.md for the complete props reference.

Styling

No stylesheet import needed. All styles are scoped via ShipStyles — generated class names are hashed, so the picker's CSS won't leak into or clash with your app's styles.

Restyle the picker by overriding CSS variables on .EmojiPickerReact:

.EmojiPickerReact {
  --epr-emoji-size: 32px;
}

Internationalization

Pass imported locale data via the emojiData prop:

import EmojiPicker from 'emoji-picker-react';
import es from 'emoji-picker-react/dist/data/emojis-es'; // Spanish

function App() {
  return <EmojiPicker emojiData={es} />;
}

See INTERNATIONALIZATION.md for the supported languages.

Customization

Custom emojis, custom category icons, preview configuration, and CSP nonces are covered in CUSTOMIZATION.md.

Server-Side Rendering

The picker renders on the server, with styles inlined into the server HTML — no setup needed. Since the picker is usually opened on demand rather than shown immediately, lazy-loading it is still recommended to keep the initial bundle small:

import dynamic from 'next/dynamic';

const Picker = dynamic(() => import('emoji-picker-react'));

Troubleshooting

global is not defined (Vite, versions before 4.20)

Since 4.20 the picker is SSR-safe and no longer references the Node-style global. If you see global is not defined, upgrade to the latest version. On older versions only, the workaround was adding this to your HTML:

<script>
  window.global = window;
</script>

More from the maintainer

Building complex forms? Check out Vest — a validation framework for stateful, async, and dependent validation.

Contributing

Contributions are welcome — see the Contributing Guide.

Design inspiration by Pavel Bolo.