Fast and efficient emoji picker with keyboard-driven navigation. Available as GUI and TUI.
- Packed with 3940 emojis ๐คฉ including 2030 variants (skin tones, gender, โฆ) and 5249 symbols ฮ-โฆ in 35 groups โฏ.
- Fast keyboard โจ๏ธ and mouse ๐ฑ๏ธ navigation.
- Combined favorites โญ๏ธ and recent โฒ list.
- Powerful search ๐.
- Grouping of people emojis differing just by gender ๐ ๐คถ๐งโ๐.
- TUI/Terminal ๐๏ธ version available.
- Localization ๐ณ๏ธโ๐ where available.
- Customizable keyboard layouts (US, DE, Bone Corne, โฆ).
- Cross-platform: Linux (Wayland/Hyprland), Windows, โฆ
GUI:
emoji-kbd-gui-0.1.0.mp4
TUI:
emoji-kbd-term-0.1.0.mp4
Speed and efficiency. Get any favorite emoji in just 3 keystrokes:
- Win-. โ Open Emoji Kbd
- key โ Select emoji (each emoji has a keyboard key assigned)
- Enter โ Insert and close
No mouse needed. No scrolling through categories. Just fast keyboard navigation.
# Clone and setup
git clone https://github.com/robertwidfen/emoji-kbd
cd emoji-kbd
python -m venv .venv
source .venv/bin/activate
pip install -e . # or uv sync
# Test run
python src/guikbd.pyLinux (Arch/Hyprland):
# Install dependencies
sudo pacman -S python openbsd-netcat wl-clipboard wtype kitty noto-fonts-emojiHyprland < 0.55 - add key binding to ~/.config/hypr/bindings.conf:
unbind = SUPER, period
bindd = SUPER, period, Emojis, exec, /PATH_TO/scripts/emoji-kbd-gui-wl
#bindd = SUPER, period, Emojis, exec, /PATH_TO/scripts/emoji-kbd-kitty-hl-open
Hyprland >= 0.55 - add key binding to ~/.config/hypr/bindings.lua:
hl.unbind("SUPER + period")
hl.bind(
"SUPER + period",
hl.dsp.exec_cmd("/PATH_TO/scripts/emoji-kbd-kitty-hl-open"),
{ description = "Emojis" }
)
Windows (11):
Run with AutoHotkey (overrides Win-.)
scripts\emoji-kbd.ahkSee Installation for detailed platform-specific setup.
Top left is the emoji input field and on the right the search field.
In the middle is a (key)board like overview of emoji groups resp. emojis. Each one has a key associated with it that opens the group or inserts the emoji into the input field.
At the bottom is a status field showing information about the currently selected emoji.
Enter in the input field will copy the content of the input field to the clipboard and and inserts it into your app.
If your window manager supports it, a left click in left half of status allows for moving the window and in right half allows for resizing.
| Key ๐ฎ | Action |
|---|---|
| Global | |
| Cursor, Home, End | navigate around |
| Ctrl-I | focus input |
| Ctrl-F | focus search |
| PageUp/PageDown | scroll page up/down |
| Esc | back to previous board |
| > Input and ๐ Search | |
| Down | focus board |
| Tab | focus board and keep focus |
| > Input | |
| key on board | select and insert emoji |
| Enter | close and insert/print result |
| Right at end | focus search |
| ๐ Search | |
| Enter | insert first match |
| Right at end | select next match |
| Left at start | focus input |
| โจ๏ธ Board | |
| key on board | select and insert emoji |
| Space + key on board | open variants |
| Enter | insert selected emoji |
| Up in first row | focus input |
| โฒ Recent Board additional keys | |
| Shift-Left/Right | move selected left/right |
| Shift-Enter | toggles favorite state |
| Space + key on board | toggles favorite state |
| Shift-Delete | delete selected |
| ๐ฑ๏ธ Mouse | |
| LeftClick | insert emoji |
| LeftClick in upper right corner | open variants |
| DoubleLeftClick | insert emoji and close |
| RightClick | back to previous board |
| Wheel | scroll pages |
Inserted emojis will be put to the recent list.
Items will be added without variants (skin tone, gender, โฆ).
Every item has a score and items are sorted by score when new ones are added.
A score โฅ 100 makes an item a favorite and it will not change its score or position anymore.
When an item is inserted into the input its score will increase by 10 and the score of all others - except favorites - decreases by 1.
Enter the search field and type to filter emojis. Results are sorted by relevance score. Search terms are separated by space.
Empty search displays all available emojis.
Search patterns:
| Pattern | Example | Matches |
|---|---|---|
| Plain text | heart |
|
#tag |
#love |
๐ค๐๐ฉ๐ฅฐ๐๐๐๐ปโฆ |
group,subgroup |
smileys,tongue |
๐๐๐๐คช๐๐ค |
,subgroup |
,mammal |
๐ต๐๐ฆ๐ฆง๐ถ๐๏ธโฆ |
+hexcode |
+221e |
โ |
Core:
- Python 3.12+
- Noto Color Emoji font (auto-downloaded on first run)
Platform-specific:
| Platform | Dependencies |
|---|---|
| Linux (Hyprland) | nc, wl-copy, wtype, kitty, noto-fonts-emoji |
| Windows | AutoHotkey v2 |
Required Python packages are installed automatically with pip install -e .
Data sources which will be automatically downloaded:
- Emoji data: Emojibase (MIT License)
- Unicode data: UnicodeData (Unicode License)
Choose your platform and follow the integration steps:
Install dependencies - in Arch by:
sudo pacman -S openbsd-netcat wl-clipboard wtype kitty noto-fonts-emojiAdd hotkey to ~/.config/hypr/bindings.conf:
unbind = SUPER, period
# Option 1: TUI if you have kitty installed
bindd = SUPER, period, Emojis, exec, /PATH_TO/scripts/emoji-kbd-kitty-hl-open
# Option 2: GUI
# bindd = SUPER, period, Emojis, exec, /PATH_TO/scripts/emoji-kbd-gui-wlAdd window rules for fast opening (noanim) and floating window to ~/.config/hypr/hyprland.conf:
Hyprland โฅ 0.53:
windowrule {
name = Emoji Kbd
match:title = ^(Emoji Kbd)$
tag = -floating-window
tag = -terminal
no_anim = on
float = on
center = on
max_size = 800 600
min_size = 500 200
}Hyprland โค 0.52:
windowrulev2 = tag -floating-window, title:^Emoji Kbd$
windowrulev2 = tag -terminal, title:^Emoji Kbd$
windowrulev2 = noanim, title:^Emoji Kbd$
windowrulev2 = float, title:^Emoji Kbd$
windowrulev2 = center, title:^Emoji Kbd$
windowrulev2 = unset size, title:^Emoji Kbd$
windowrulev2 = size 600 285, title:^Emoji Kbd$Optionally copy res/emoji-kbd.desktop to ~/.local/share/applications/
for a launcher entry and adjust the paths in the copied file.
Setup:
- Install AutoHotkey v2
- (Optional) Install Windows-compatible Noto Color Emoji font
- If you already have Noto Color Emoji, replace it with the Windows-compatible version to avoid slow flag rendering
- Run
scripts\emoji-kbd.ahk(double-click or add to startup)
Default hotkey: Win-. (overrides Windows emoji picker)
To change the hotkey, edit scripts/emoji-kbd.ahk and modify the #.:: line.
First startup note: Initial launch downloads emoji databases and Noto font. You might see a daemon startup warning. Check logs if issues persist.
Terminal compatibility:
| Terminal | Emoji Support | Notes |
|---|---|---|
| Kitty | โ Full | Perfect rendering, all flags and graphemes |
| Ghostty | Minor rendering issues | |
| Alacritty | โ Limited | Misaligned columns, monochrome emojis |
| Others | โ | Font configuration needed for Noto Color Emoji |
See res/emoji-kbd.toml for all available options.
Copy res/emoji-kbd.toml or parts to ~/.config/emoji-kbd/emoji-kbd.toml and edit it.
For example, change the locale and layout (case-sensitive) as follows:
[board]
locale = "de"
layout = "DE"Add own layout:
[[layout]]
โฆFor everything else - change the code ๐.
Issue: Emojis not displaying, monochrome, flags show as ๐ฆโ๐งโ๐จ, โฆ
- Cause: Missing or old Noto Color Emoji font.
- Fix Linux:
sudo pacman -S noto-fonts-emoji(Arch) or equivalent. - Fix Windows: Download Windows-compatible Noto Color Emoji.
- Fix Terminal: Configure font fallback (fontconf, โฆ) to use Noto font.
Issue: TUI misalignment
- Cause: Terminal doesn't handle complex graphemes.
- Fix: Use Kitty terminal (recommended) or switch to GUI.
Issue: Slow first startup
- Expected: First run downloads ~5 MB of emoji data and Noto font on Windows. May cause startup warning on Windows.
- Fix: Wait 30-60 seconds for downloads to complete.
- Subsequent runs: Uses cache (~ms startup).
Issue: Win-. not working (Windows)
- Check: AutoHotkey script is running (
scripts\emoji-kbd.ahk) - Check: No other app is overriding Win-.
Emojis from news Unicode standard are missing
- Clear cache to update emojis: From the โ๏ธ menu select โป๏ธ and restart.
- Update Noto font.
| Path | Purpose |
|---|---|
~/.config/emoji-kbd/emoji-kbd.toml |
User configuration |
~/.local/state/emoji-kbd/recent.txt |
Recent/favorite emojis list |
~/.local/state/emoji-kbd/*.log |
Log files |
~/.cache/emoji-kbd/* |
Emoji databases, caches, Noto font |
When the environment variable EMOJI_KBD_DEV is set to a value the config file is taken from
res/emoji-kbd.toml and all other files go to .local in the repo. It can be set also to a
comma separated list of words, currently only "no_cache", to disable use of cache.
Run terminal version for testing:
python src/termkbd.pyRun kitty helper script:
./scripts/emoji-kbd-kitty-hl-openGUI daemon: Daemon mode keeps the app loaded in memory for instant opening. Communicates by socket. If not reachable starts a new daemon.
python src/guidmn.py get # Wait for result
python src/guidmn.py show # Show onlyCheck emoji grouping:
python src/emojis.pyCheck and query config:
python src/config.py
python src/config.py board.layout| Feature | Emoji Kbd | Others |
|---|---|---|
| Keyboard first | โ | โ |
| Favorites โญ | โ | โ |
| Advanced Grouping โฏ | โ | โ |
| Advanced Search ๐ | โ | โ Often just name |
| Cross Platform | โ | โ Often just one |
Why Emoji Kbd?
- Keyboard-first design - navigate fast without mouse
- Favorites for fast access by muscle memory
- Large recent list with smart scoring
- Advanced search by name, tags, (sub)groups, code
- Gender variant grouping (๐ ๐คถ๐งโ๐)
- See meta data code, name, group, subgroup, tags
- Cross-platform Linux + Windows + โฆ
Origin story: I disliked the new picker from Windows 11 as it had a much smaller recent list than the Windows 10 version. Looking for alternatives I found https://github.com/gilleswaeber/emoji-keyboard from Gilles Weber and added the recent emojis board and was very happy with it for years.
But when switching back to Linux for the desktop I could not find a proper alternative and thus made my own one - Emoji Kbd - inspired by emoji-keyboard.
Kaomoji and GIFs will never be added. ๐
- Emoji Kbd: GPL-3.0-or-later
- Emojibase: Copyright (c) Miles Johnson. License: MIT License.
- UnicodeData: Copyright ยฉ 1991-2026 Unicode, Inc. All rights reserved. Distributed under the Unicode License Agreement.