Pure Python emoji toolkit -- encoding, lookup, search, CLI, MCP server, and API client for 3,781 emojis from Unicode Emoji 16.0.
Project description
emojifyi
Pure Python emoji toolkit for developers. Encode any emoji into 8 representations, look up metadata for 3,781 emojis, search and browse by category -- all with zero dependencies. Includes a CLI, MCP server for AI assistants, and an API client for emojifyi.com.
Browse all emojis at emojifyi.com -- search emojis, browse categories, emoji encoding tools, emoji collections
Table of Contents
- Install
- Quick Start
- What You Can Do
- Advanced Usage
- CLI
- MCP Server
- API Client
- API Reference
- Data Types
- Features
- Learn More About Emoji
- FYIPedia Developer Tools
- License
Install
pip install emojifyi # Core library (zero dependencies)
pip install emojifyi[cli] # + CLI (typer, rich)
pip install emojifyi[mcp] # + MCP server for AI assistants
pip install emojifyi[api] # + HTTP client for emojifyi.com API
pip install emojifyi[all] # Everything
Quick Start
from emojifyi import encode, get_emoji, search
# Encode any emoji into 8 representations
result = encode("\U0001f600")
print(result.codepoint) # U+1F600
print(result.utf8_bytes) # 0xF0 0x9F 0x98 0x80
print(result.html_entity) # 😀
print(result.css_content) # \1F600
print(result.python_literal) # \U0001F600
print(result.java_literal) # \uD83D\uDE00
# Look up emoji metadata
info = get_emoji("red-heart")
print(info.character) # Red heart emoji
print(info.category) # smileys-and-emotion
print(info.emoji_version) # 1.0
# Search emojis by name
for emoji in search("fire")[:5]:
print(f"{emoji.character} {emoji.cldr_name}")
What You Can Do
Emoji Encoding
Every emoji can be represented in multiple encoding formats depending on the platform and programming language. The Unicode Consortium defines codepoints, but developers need UTF-8 bytes for web servers, HTML entities for markup, CSS content values for pseudo-elements, and language-specific escape sequences for source code. The encode() function computes all 8 representations in a single call.
| Format | Example (U+1F600) | Use Case |
|---|---|---|
| Codepoint | U+1F600 |
Unicode documentation, character charts |
| UTF-8 Bytes | 0xF0 0x9F 0x98 0x80 |
Web servers, file encoding, network protocols |
| UTF-16 Surrogates | 0xD83D 0xDE00 |
JavaScript internals, Java strings, Windows APIs |
| HTML Entity | 😀 |
HTML documents, email templates |
| CSS Content | \1F600 |
CSS content property, pseudo-elements |
| Python Literal | \U0001F600 |
Python source code, string escapes |
| JavaScript Literal | \u{1F600} |
ES6+ JavaScript/TypeScript source code |
| Java Literal | \uD83D\uDE00 |
Java source code (surrogate pairs) |
from emojifyi import encode
# Convert any emoji to all 8 encoding formats at once
result = encode("\U0001f525")
print(result.codepoint) # U+1F525
print(result.utf8_bytes) # 0xF0 0x9F 0x94 0xA5
print(result.html_entity) # 🔥
print(result.css_content) # \1F525
print(result.javascript_literal) # \u{1F525}
print(result.java_literal) # \uD83D\uDD25
Learn more: Emoji Unicode Lookup Tool · Emoji Encoding Converter
Emoji Lookup & Search
The package includes a complete dataset of 3,781 emojis from Unicode Emoji 16.0 with rich metadata for each entry: CLDR short name, category, subcategory, emoji version, unicode version, year added, and type classification. Zero-Width Joiner (ZWJ) sequences -- where multiple codepoints combine into a single visible emoji like family or profession emojis -- are fully supported with the is_zwj flag. Skin tone modifiers are tracked via has_skin_tones.
from emojifyi import get_emoji, get_emoji_by_char, search
# Look up emoji metadata by slug identifier
info = get_emoji("red-heart")
print(info.character) # (red heart emoji)
print(info.cldr_name) # red heart
print(info.category) # smileys-and-emotion
print(info.emoji_version) # 1.0
print(info.is_zwj) # False
# Look up by the emoji character itself
fire = get_emoji_by_char("\U0001f525")
print(fire.slug) # fire
print(fire.added_year) # 2010
# Search emojis by name with natural language queries
for emoji in search("heart")[:5]:
print(f"{emoji.character} {emoji.cldr_name} (v{emoji.emoji_version})")
Learn more: Emoji Search Engine · Browse Emoji Categories
Browse by Category
The Unicode Consortium organizes all 3,781 emojis into 10 top-level categories and 100 subcategories. Each category groups semantically related emojis -- from facial expressions and hand gestures to flags, food, and travel symbols. You can also filter by emoji version to discover which emojis were added in each Unicode release.
| Category | Slug | Emojis | Description |
|---|---|---|---|
| Smileys & Emotion | smileys-and-emotion |
184 | Facial expressions, hearts, hand gestures |
| People & Body | people-and-body |
393 | People, professions, body parts, skin tones |
| Animals & Nature | animals-and-nature |
151 | Animals, plants, weather, earth |
| Food & Drink | food-and-drink |
134 | Fruits, meals, beverages, utensils |
| Travel & Places | travel-and-places |
264 | Vehicles, buildings, maps, sky |
| Activities | activities |
82 | Sports, arts, games, celebrations |
| Objects | objects |
299 | Tools, clothing, music, office supplies |
| Symbols | symbols |
224 | Arrows, math, zodiac, geometric shapes |
| Flags | flags |
275 | Country flags, regional flags, flag symbols |
| Component | component |
9 | Skin tone modifiers, hair components |
from emojifyi import by_category, by_version, categories, emoji_count
# Browse all emojis in the food and drink category
food = by_category("food-and-drink")
print(f"{len(food)} food & drink emojis")
# Discover new emojis added in Unicode Emoji 16.0
new_emojis = by_version("16.0")
for e in new_emojis[:5]:
print(f"{e.character} {e.cldr_name}")
# List all 10 top-level emoji categories
for cat in categories():
print(f"{cat.icon} {cat.name}")
# Total emoji count in the dataset
print(f"Total: {emoji_count()} emojis") # 3781
Learn more: Browse Emoji Categories · Emoji Versions & Release History
Advanced Usage
from emojifyi import (
get_emoji_by_char, by_category, by_version,
categories, subcategories, all_emojis, emoji_count,
)
# Look up by character
info = get_emoji_by_char("\U0001f525")
print(info.slug) # fire
# Browse by category
animals = by_category("animals-and-nature")
print(len(animals)) # 151 emojis
# New emojis in a specific version
new = by_version("16.0")
print(len(new)) # Latest additions
# Category metadata
for cat in categories():
print(f"{cat.icon} {cat.name} ({cat.slug})")
# Total count
print(emoji_count()) # 3781
CLI
Requires the cli extra: pip install emojifyi[cli]
# Look up emoji by slug
emojifyi lookup grinning-face
# Look up by character
emojifyi char "\U0001f600"
# Search emojis
emojifyi search heart
emojifyi search fire --limit 5
# Show all 8 encodings
emojifyi encode "\U0001f600"
# List categories
emojifyi categories
# Browse a category
emojifyi browse smileys-and-emotion
# Dataset statistics
emojifyi stats
MCP Server
Requires the mcp extra: pip install emojifyi[mcp]
Add to your claude_desktop_config.json:
{
"mcpServers": {
"emojifyi": {
"command": "python",
"args": ["-m", "emojifyi.mcp_server"]
}
}
}
Available tools:
| Tool | Description |
|---|---|
emoji_lookup |
Look up emoji by slug or character |
emoji_search |
Search emojis by name |
emoji_encode |
Encode emoji into 8 representations |
emoji_categories |
List all 10 categories |
emoji_by_category |
Browse emojis in a category |
emoji_stats |
Dataset statistics |
API Client
Requires the api extra: pip install emojifyi[api]
from emojifyi.api import EmojiFYI
with EmojiFYI() as api:
# Get emoji details
info = api.emoji("grinning-face")
print(info["character"])
# Search emojis
results = api.search("heart")
for r in results["results"]:
print(r["character"], r["cldr_name"])
# List categories
cats = api.categories()
print(cats["count"]) # 10
# Get random emoji
lucky = api.random()
print(lucky["character"], lucky["cldr_name"])
Full API documentation at emojifyi.com/developers.
API Reference
Encoding
| Function | Description |
|---|---|
encode(char) -> EncodingResult |
All 8 encodings at once |
char_to_codepoint(char) -> str |
Character to U+XXXX |
encode_utf8(char) -> str |
UTF-8 byte representation |
encode_utf16(char) -> str |
UTF-16 surrogates |
encode_html(codepoint) -> str |
HTML numeric entity |
encode_css(codepoint) -> str |
CSS content value |
encode_python(codepoint) -> str |
Python literal |
encode_javascript(codepoint) -> str |
JavaScript literal |
encode_java(char) -> str |
Java literal (with surrogates) |
Lookup and Search
| Function | Description |
|---|---|
get_emoji(slug) -> EmojiInfo | None |
Look up by slug |
get_emoji_by_char(char) -> EmojiInfo | None |
Look up by character |
search(query, limit=20) -> list[EmojiInfo] |
Case-insensitive name search |
all_emojis() -> list[EmojiInfo] |
All 3,781 emojis |
emoji_count() -> int |
Total emoji count |
Browse
| Function | Description |
|---|---|
by_category(slug) -> list[EmojiInfo] |
Filter by category |
by_version(version) -> list[EmojiInfo] |
Filter by emoji version |
categories() -> list[Category] |
All 10 categories |
subcategories(slug?) -> list[Subcategory] |
All or filtered subcategories |
Data Types
EncodingResult-- 8-field NamedTuple: codepoint, utf8_bytes, utf16_surrogates, html_entity, css_content, python_literal, javascript_literal, java_literalEmojiInfo-- 12-field NamedTuple: character, slug, cldr_name, codepoint, category, subcategory, emoji_version, unicode_version, added_year, emoji_type, is_zwj, has_skin_tonesCategory-- 4-field NamedTuple: slug, name, icon, orderSubcategory-- 4-field NamedTuple: slug, name, category_slug, order
Features
- 8 encoding types: UTF-8 bytes, UTF-16 surrogates, HTML entity, CSS content, Python/JavaScript/Java literals, codepoint
- 3,781 emojis: Full Unicode Emoji 16.0 dataset with metadata
- 10 categories, 100 subcategories: Browse and filter
- ZWJ support: Multi-codepoint sequences, flags, keycaps, skin tones
- Zero dependencies: Core library is pure Python with bundled JSON data
- CLI: Rich terminal interface for emoji lookup, search, and encoding
- MCP server: AI assistant integration with 6 tools
- API client: HTTP client for emojifyi.com REST API
- Type-safe: Full type annotations,
py.typedmarker (PEP 561)
Learn More About Emoji
- Browse: Emoji Browser · Search Emojis · Categories
- Tools: Unicode Lookup · Encoding Tool
- Collections: Emoji Collections · Versions
- API: REST API Docs · OpenAPI Spec
FYIPedia Developer Tools
Part of the FYIPedia open-source developer tools ecosystem.
| Package | PyPI | npm | Description |
|---|---|---|---|
| colorfyi | PyPI | npm | Color conversion, WCAG contrast, harmonies -- colorfyi.com |
| emojifyi | PyPI | npm | Emoji encoding & metadata for 3,781 emojis -- emojifyi.com |
| symbolfyi | PyPI | npm | Symbol encoding in 11 formats -- symbolfyi.com |
| unicodefyi | PyPI | npm | Unicode lookup with 17 encodings -- unicodefyi.com |
| fontfyi | PyPI | npm | Google Fonts metadata & CSS -- fontfyi.com |
| distancefyi | PyPI | npm | Haversine distance & travel times -- distancefyi.com |
| timefyi | PyPI | npm | Timezone ops & business hours -- timefyi.com |
| namefyi | PyPI | npm | Korean romanization & Five Elements -- namefyi.com |
| unitfyi | PyPI | npm | Unit conversion, 220 units -- unitfyi.com |
| holidayfyi | PyPI | npm | Holiday dates & Easter calculation -- holidayfyi.com |
| cocktailfyi | PyPI | -- | Cocktail ABV, calories, flavor -- cocktailfyi.com |
| fyipedia | PyPI | -- | Unified CLI: fyi color info FF6B35 -- fyipedia.com |
| fyipedia-mcp | PyPI | -- | Unified MCP hub for AI assistants -- fyipedia.com |
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file emojifyi-0.2.1.tar.gz.
File metadata
- Download URL: emojifyi-0.2.1.tar.gz
- Upload date:
- Size: 435.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1ced942c53d4a467705411e7ea19564dded6643194dee5c50f4653ae9a7d462
|
|
| MD5 |
d4466d0402306a7ab9e067041529910a
|
|
| BLAKE2b-256 |
1eaa444cbc7884184c6a9879bfc480021db7143f899d09d8be3dacb2c8dd53a9
|
File details
Details for the file emojifyi-0.2.1-py3-none-any.whl.
File metadata
- Download URL: emojifyi-0.2.1-py3-none-any.whl
- Upload date:
- Size: 103.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f6e7287af14fa97817f787108698c4ee97375a14f9c1b70acb698d50b17d8e3
|
|
| MD5 |
c1ebb77fed54e7a509b0ceb987846026
|
|
| BLAKE2b-256 |
3ccaa850bb54216c74faadd3fb7a31d8a319dca03c810b29ac6408ac04d50f2e
|