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

@hiraku-ai/react-native-emoji-picker

v1.2.3

Published

A flexible emoji picker for React Native.

Readme

React Native Emoji Picker

A powerful, flexible emoji picker for React Native with modal and inline modes, extensive customization, and cross-platform support.

Important note: This component was “vibe coded,” so it may have issues. Please use it with caution.

✨ Features

  • 🎯 Flexible Integration - Modal, inline, or headless with hooks
  • 🛠️ High Customization - Allows for almost total freedom
  • 🔍 Smart Search - Fast emoji search with debouncing
  • 📂 Category Navigation - Intuitive tab-based browsing
  • 🕐 Recent Emojis - Automatically tracks frequently used emojis
  • 🎨 Full Theming - Built-in dark mode + custom themes
  • ⚡ High Performance - Optimized FlatList rendering
  • 📱 Cross-Platform - iOS, Android, and Web ready

🎉 Expo Go Compatible

This library works seamlessly with Expo Go - no custom native code required! All dependencies are supported in Expo managed workflow. Just install and start using it in your Expo projects.

🎮 Live Demo

Try out the interactive demo with customization options: react-native-emoji-picker.netlify.app

📦 Installation

npm install @hiraku-ai/react-native-emoji-picker

Peer Dependencies

npm install @react-native-async-storage/async-storage react-native-svg

🚀 Quick Start

Modal Version

import React, { useState } from 'react';
import EmojiPickerModal, { emojiData } from '@hiraku-ai/react-native-emoji-picker';

function App() {
  const [visible, setVisible] = useState(false);

  return (
    <>
      <Button title="Pick Emoji" onPress={() => setVisible(true)} />
      <EmojiPickerModal
        visible={visible}
        onClose={() => setVisible(false)}
        onEmojiSelect={(emoji) => console.log(emoji)}
        emojis={emojiData}
      />
    </>
  );
}

Inline Version

import { EmojiPicker, emojiData } from '@hiraku-ai/react-native-emoji-picker';

<View style={{ height: 400 }}>
  <EmojiPicker
    emojis={emojiData}
    onEmojiSelect={(emoji) => console.log(emoji)}
    onClose={() => {}}
  />
</View>

Bottom Sheet / Gesture Handler

Pass BottomSheetFlatList for both props to fix scroll conflicts on Android when using @gorhom/bottom-sheet.

import { BottomSheetFlatList } from '@gorhom/bottom-sheet';
import { EmojiPicker, emojiData } from '@hiraku-ai/react-native-emoji-picker';

<EmojiPicker
  emojis={emojiData}
  onEmojiSelect={(emoji) => console.log(emoji)}
  FlatListComponent={BottomSheetFlatList}
  TabFlatListComponent={BottomSheetFlatList}
/>

Headless Mode

import { useEmojiPicker, useEmojiPickerRenderer, EmojiPickerThemeProvider, emojiData } from '@hiraku-ai/react-native-emoji-picker';

function CustomPickerContent() {
  const { flatListData, emojiSections, selectedSkinTone, searchQuery, getModifiedEmoji, updateRecentEmojis } = useEmojiPicker({
    emojis: emojiData
  });

  const { renderItem, renderEmptyComponent } = useEmojiPickerRenderer({
    onEmojiSelect: (emoji) => console.log(emoji),
    getModifiedEmoji,
    updateRecentEmojis,
    selectedSkinTone,
    emojiSections,
    searchQuery,
  });

  // Bring your own scroll component
  return (
    <YourFlatList
      data={flatListData}
      renderItem={renderItem}
      ListEmptyComponent={renderEmptyComponent}
      keyExtractor={(item) => item.id}
    />
  );
}

function CustomPicker() {
  return (
    <EmojiPickerThemeProvider>
      <CustomPickerContent />
    </EmojiPickerThemeProvider>
  );
}

📚 What's Included

🎯 Ready-to-Use Components

Drop these in and you're done:

  • EmojiPickerModal - Full-featured modal with everything built-in
  • EmojiPicker - Embeddable inline version

🔧 Building Blocks for Custom UIs

Mix and match these standalone components:

  • EmojiSearch - Search bar with debouncing
  • EmojiTabs - Category navigation tabs
  • SkinToneSelector - Skin tone picker button
  • All category icons - Use our icon set in your custom UI

🎨 Headless Mode for Total Control

Build completely custom interfaces:

  • useEmojiPicker - All logic: search, filtering, recent emojis, skin tones, category ordering
  • useEmojiPickerRenderer - Ready-made renderItem and renderEmptyComponent for your own scroll component
  • Complete control over layout — works with BottomSheetFlatList, FlashList, or anything FlatList-compatible

🎭 Theme System

  • EmojiPickerThemeProvider - Wrap your app for consistent theming
  • useEmojiPickerTheme - Access theme values anywhere
  • lightTheme / darkTheme - Pre-built themes
  • PartialTheme - Override specific colors

📦 Data & Utilities

  • emojiData - Complete emoji dataset (3600+ emojis)
  • SKIN_TONES - All skin tone modifiers
  • Category - Category constants
  • Full TypeScript types included

📖 Documentation

📄 License

Apache License 2.0

👨‍💻 Author

Stef Buzas (https://stefbuzas.com) at Hiraku (https://hiraku.ai)

🔗 Links