# node-emojis

> Modern, tree-shakeable emoji library for Node.js with TypeScript, search, skin tones, and aliases 🎉

Latest version **1.0.0** (published 2025-07-05) · MIT license · 0 weekly downloads

## Install

```sh
npm install node-emojis
pnpm add node-emojis
yarn add node-emojis
bun add node-emojis
```

## Health

**Score 50/100 (C)** — status: stable.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

Negative: stale.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2025-07-05 |
| First published | 2019-08-11 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=20.0.0 |
| Dependencies | 0 |
| Unpacked size | 214.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Jesse Palmer |
| Maintainers | jesselpalmer |
| Keywords | emoji, emojis, unicode, emoticons, smileys, typescript, skin-tone, aliases, search, tree-shaking, es-modules, commonjs, emoji-search, emoji-picker, unicode-emojis, emoji-aliases, emoji-library, nodejs, javascript, zero-dependencies |

## Links

- npm: https://www.npmjs.com/package/node-emojis
- Repository: https://github.com/jesselpalmer/node-emojis
- Homepage: https://github.com/jesselpalmer/node-emojis#readme
- Issues: https://github.com/jesselpalmer/node-emojis/issues
- npm.io page: https://npm.io/package/node-emojis

## Alternatives

- [@fortawesome/react-fontawesome](https://npm.io/package/@fortawesome/react-fontawesome.md) — 2.2M weekly downloads
- [roboto-fontface](https://npm.io/package/roboto-fontface.md) — 196.0K weekly downloads
- [@react-native-vector-icons/common](https://npm.io/package/@react-native-vector-icons/common.md) — 150.4K weekly downloads
- [@procore/core-icons](https://npm.io/package/@procore/core-icons.md) — 4.6K weekly downloads
- [@react-md/material-icons](https://npm.io/package/@react-md/material-icons.md) — 1.6K weekly downloads

## Recent versions

- 1.0.0 (latest) — 2025-07-05
- 0.0.5 — 2019-08-31
- 0.0.4 — 2019-08-28
- 0.0.3 — 2019-08-26
- 0.0.2 — 2019-08-11
- 0.0.1 — 2019-08-11

## README

[![npm version](https://img.shields.io/npm/v/node-emojis.svg)](https://www.npmjs.com/package/node-emojis)
[![npm downloads](https://img.shields.io/npm/dw/node-emojis.svg)](https://www.npmjs.com/package/node-emojis)
[![CI](https://github.com/jesselpalmer/node-emojis/workflows/CI/badge.svg)](https://github.com/jesselpalmer/node-emojis/actions)
[![bundle size](https://img.shields.io/bundlephobia/min/node-emojis)](https://bundlephobia.com/package/node-emojis)
[![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue.svg)](https://www.typescriptlang.org/)
[![license](https://img.shields.io/npm/l/node-emojis.svg)](https://github.com/jesselpalmer/node-emojis/blob/master/LICENSE)

# node-emojis 🎉

A modern, tree-shakeable emoji library for Node.js and browsers with TypeScript support.

## ✨ Features

- 🌳 **Tree-shakeable** - Import only what you need
- 📦 **360+ emojis** from Unicode 1.0 to 15.0
- 🔍 **Smart search** with keyword matching
- 🎨 **Skin tone support** for 150+ human emojis
- 🔄 **Emoji aliases** (thumbsup/+1/thumbs_up)
- 📝 **TypeScript** support with full type definitions
- 🚀 **Zero dependencies**
- ⚡ **Optimized** for performance

## 📋 Requirements

- Node.js 20.0.0 or higher
- TypeScript 5.0+ (for TypeScript users)

## 📦 Installation

```bash
npm install node-emojis
```

## 🚀 Quick Start

```javascript
// Import everything (backward compatible)
const emojis = require('node-emojis')
console.log(emojis.fire) // 🔥

// Import only what you need (recommended)
const { search } = require('node-emojis/search')
const { applySkinTone } = require('node-emojis/skin-tones')
```

### ES Modules

```javascript
import emojis from 'node-emojis'
import { search } from 'node-emojis/search'
import { applySkinTone } from 'node-emojis/skin-tones'
```

## 📖 API

### Basic Usage

```javascript
const emojis = require('node-emojis')

// Access emojis directly
emojis.fire        // 🔥
emojis.pizza       // 🍕
emojis.unicorn     // 🦄
emojis['+1']       // 👍 (alias support)
```

### 🔍 Search

```javascript
const { search, getByCategory } = require('node-emojis/search')

// Search by keyword
const results = search('happy')
// Returns: [{ name: 'smile', emoji: '😊', keywords: [...], score: 0.8 }, ...]

// Get all emojis in a category
const animals = getByCategory('animals')
// Returns: [{ name: 'dog', emoji: '🐕', ... }, ...]
```

### 🎨 Skin Tones

```javascript
const { applySkinTone, supportsSkinTone, getAllSkinToneVariations } = require('node-emojis/skin-tones')

// Apply skin tone
applySkinTone('👋', 'medium')     // 👋🏽
applySkinTone('👋', '3')          // 👋🏽 (Fitzpatrick scale)

// Check if emoji supports skin tones
supportsSkinTone('wave')          // true
supportsSkinTone('fire')          // false

// Get all variations
getAllSkinToneVariations('👋')
// { light: '👋🏻', 'medium-light': '👋🏼', medium: '👋🏽', ... }
```

### 🔄 Aliases

```javascript
const { getAliases, getPrimaryName, isSameEmoji } = require('node-emojis/aliases')

// Get aliases
getAliases('fire')                // ['flame', 'hot', 'lit', 'snapstreak']

// Get primary name
getPrimaryName('+1')              // 'thumbs_up'

// Check if two names refer to the same emoji
isSameEmoji('thumbsup', '+1')     // true
```

### 🎯 Filters

```javascript
const { filterByCategory, filterByVersion, filterByKeyword } = require('node-emojis/filters')

// Filter by category
const foods = filterByCategory('food')

// Filter by Unicode version
const modernEmojis = filterByVersion('10.0', 'min')  // Unicode 10.0+
const oldEmojis = filterByVersion('1.0', 'exact')    // Only Unicode 1.0

// Filter by keyword
const hearts = filterByKeyword('heart')
```

### 🔧 Utilities

```javascript
const { getNameFromEmoji, isValidEmoji, isValidEmojiName } = require('node-emojis')

// Reverse lookup
getNameFromEmoji('🔥')            // 'fire'

// Validation
isValidEmoji('🔥')                // true
isValidEmojiName('fire')          // true
```

## 🌲 Tree Shaking

Import only what you need to minimize bundle size:

```javascript
// ❌ Imports entire library
import emojis from 'node-emojis'

// ✅ Imports only search functionality
import { search } from 'node-emojis/search'

// ✅ Import multiple features
import { search } from 'node-emojis/search'
import { applySkinTone } from 'node-emojis/skin-tones'
import { getAliases } from 'node-emojis/aliases'
```

## 📊 Bundle Size Comparison

| Import Style | Size (minified) |
|-------------|-----------------|
| Full library | ~85KB |
| Search only | ~15KB |
| Skin tones only | ~8KB |
| Aliases only | ~6KB |
| Direct data import | ~60KB |

## 📚 Documentation

For comprehensive documentation, examples, and guides:

- **[Complete Documentation](./docs/)** - All guides and references
- **[Getting Started](https://github.com/jesselpalmer/node-emojis/wiki/Getting-Started)** - Installation and basic usage
- **[API Reference](https://github.com/jesselpalmer/node-emojis/wiki/API-Reference)** - Complete API documentation
- **[FAQ](https://github.com/jesselpalmer/node-emojis/wiki/FAQ)** - Frequently asked questions
- **[Migration Guide](https://github.com/jesselpalmer/node-emojis/wiki/Migration-Guide)** - Upgrading from v0.x
- **[GitHub Wiki](https://github.com/jesselpalmer/node-emojis/wiki)** - Online documentation

## 🎯 Examples

See the [examples](./examples) directory for more usage examples:

- [Basic usage](./examples/basic-usage.js) - CommonJS examples
- [Modern usage](./examples/modern-usage.js) - Tree-shaking examples

## 🤝 Contributing

Contributions are welcome! Please see our [Contributing Guide](./CONTRIBUTING.md) for details.

We use [Conventional Commits](https://www.conventionalcommits.org/) for commit messages.

## 📄 License

MIT © Jesse Palmer

## 🙏 Acknowledgments

Emoji data sourced from Unicode.org and Emojipedia.

---
_Source: https://npm.io/package/node-emojis · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
