Glyphie is a fast, lightweight, libcosmic-native emoji picker for COSMIC/Wayland. It's built for the "one emoji, right now" moment: open, search, click to copy, keep typing.
- A quick picker: minimal UI, predictable layout, closes after copy.
- Not a sticker/GIF browser: no online content, no accounts, no telemetry.
- Wayland-first: designed around COSMIC's modern stack.
- Fast search with trigram-indexed lookup across all Unicode 18.0 emojis by name and keywords
- Starts in Recent for quick repeat picks
- 10 categories including a persistent Recent category
- Recent emojis history (up to 36)
- Skin tone preference for supported emojis (6 tones)
- Gender filter for People & Body emojis (All / Female / Male, with neutral emojis still visible)
- Multiselect mode to copy multiple emojis at once
- Optional subcategory headings within a category
- Configuration and state managed via
cosmic-configwith live external updates - i18n ready with Fluent-based localization
- Fixed-size window designed for quick, repeatable use
- Click to copy to clipboard and automatically close
- Single-instance guard to prevent multiple windows stacking up
| Key | Action |
|---|---|
Esc |
Clear search (if searching), clear selection, or close window |
Enter |
Copy the highlighted emoji, first search result, or selected emojis |
Ctrl + C |
Copy the highlighted emoji or selected emojis |
↑ / ↓ |
Move highlighted emoji by row |
← / → |
Move highlighted emoji by item, also while typing a search |
Ctrl / Shift + ← / → |
Move or select through the search text |
Glyphie doesn't ship its own global hotkey. Instead, bind it in COSMIC:
- Open Settings → Keyboard → Custom Shortcuts
- Name:
Glyphie Emoji Picker - Command:
glyphie - Shortcut:
Super + ;(or any key you prefer; COSMIC usesSuper + .for Zoom In by default)
Glyphie runs on Linux desktops with COSMIC or another Wayland session. Download the package for your system from the latest release.
The .deb is for amd64 on Ubuntu 24.04, Pop!_OS 24.04, Debian 13, or newer. apt pulls in wl-clipboard and the emoji font:
sudo apt install ./glyphie_0.4.0_amd64.debRemove it with sudo apt remove glyphie.
flatpak install --user glyphie-0.4.0.flatpak
flatpak run com.lkbddh.GlyphieThe Freedesktop runtime comes from Flathub automatically. wl-copy is bundled.
You need Rust 1.93 or newer, just, and wl-clipboard. A system color emoji font is optional: Glyphie brings its own, and the line below installs one for the apps you paste into. On Pop!_OS and Ubuntu:
sudo apt install build-essential git pkg-config libdrm-dev libwayland-dev libxkbcommon-dev wl-clipboard fonts-noto-color-emoji
cargo install just # or install it from your package managerThen build and install:
git clone https://github.com/lkbddh/glyphie.git
cd glyphie
just build-release
sudo just installThis installs the binary, desktop entry, metainfo, and icons to /usr. Use sudo just install prefix=/usr/local for another prefix, and sudo just uninstall to remove it.
Each release's packages are built by the Release workflow when a version tag is pushed. To build them locally:
-
.deb:just build-release && just deb. It lands intarget/deb/. -
Flatpak: install
flatpak-builderand the Freedesktop 26.08 runtime, SDK, and Rust extension, then build and install:flatpak install --user flathub org.freedesktop.Platform//26.08 org.freedesktop.Sdk//26.08 org.freedesktop.Sdk.Extension.rust-stable//26.08 flatpak-builder --user --install --force-clean build-dir com.lkbddh.Glyphie.yml
The manifest builds offline from the checked-in
cargo-sources.json. Regenerate it after dependency changes withflatpak-cargo-generator.py(needsaiohttp,tomlkit, andPyYAML):python3 flatpak-cargo-generator.py Cargo.lock -o cargo-sources.json.
just run # build release + run with debug logs
just build-debug # debug build only
just check # clippy with pedantic lints
just test # unit tests
just validate # fmt, clippy, tests, desktop, and AppStream checksManual launch and clipboard checks are listed in docs/smoke-test.md.
A self-contained, deterministic recipe for installing Glyphie on a user's machine. Glyphie is a COSMIC/Wayland desktop app: it builds and installs headlessly, but running it needs a graphical Wayland session.
Identity: app id com.lkbddh.Glyphie · binary glyphie · config ~/.config/cosmic/com.lkbddh.Glyphie/ · state ~/.local/state/cosmic/com.lkbddh.Glyphie/
Preflight checks:
uname -s # expect: Linux
echo "$XDG_SESSION_TYPE" # expect at runtime: wayland (COSMIC recommended)Do not run as root except for the explicit sudo steps below.
# 1. Ensure flatpak + flathub are available (idempotent)
flatpak remote-add --if-not-exists --user flathub https://dl.flathub.org/repo/flathub.flatpakrepo
# 2. Download the bundle from the latest release (requires `gh` authenticated)
gh release download --repo lkbddh/glyphie --pattern '*.flatpak' --dir /tmp --clobber
# No gh? Use curl with the version-pinned asset name:
# curl -fL -o /tmp/glyphie-0.4.0.flatpak https://github.com/lkbddh/glyphie/releases/latest/download/glyphie-0.4.0.flatpak
# 3. Install for the current user (non-interactive)
flatpak install --user --assumeyes /tmp/glyphie-*.flatpak
# 4. Verify (exit code 0 == installed)
flatpak info com.lkbddh.Glyphie
# Run
flatpak run com.lkbddh.Glyphie# 1. Build + runtime deps (Pop!_OS / Ubuntu-like; non-interactive)
sudo apt install -y build-essential git pkg-config libdrm-dev libwayland-dev libxkbcommon-dev wl-clipboard fonts-noto-color-emoji
# 2. Toolchain: Rust >= 1.93 and just
rustc --version # must be >= 1.93; install via rustup if missing or too old
command -v just || cargo install just
# 3. Clone, build, install
git clone https://github.com/lkbddh/glyphie.git
cd glyphie
just build-release
sudo just install # installs binary, desktop entry, metainfo, icons to /usr
# 4. Verify (prints the path == installed)
command -v glyphieGlyphie ships no global hotkey. Bind it in COSMIC: Settings → Keyboard → Custom Shortcuts → Command glyphie (or flatpak run com.lkbddh.Glyphie for the Flatpak), Shortcut Super + ; (COSMIC binds Super + . to Zoom In by default).
- Copy persistence needs
wl-clipboard(wl-copy). The Flatpak bundles it; source installs require thewl-clipboardpackage. - Single-instance: launching Glyphie again focuses the running picker instead of opening a second window — don't treat a "no new window" result as a failure.
- No network access is required or used at runtime; emoji data is embedded at compile time.
Glyphie uses wl-copy from wl-clipboard so copied emojis remain available after the picker exits. The Flatpak bundles wl-copy; native source installs should install wl-clipboard.
Glyphie draws emojis with a bundled copy of Noto Color Emoji, so the picker shows every emoji whichever emoji font the system has. Apps that draw with the system emoji font can show the newest emojis as blanks until that font is updated.
Glyphie uses cosmic-config for all persistent data, split into two stores:
- Config (user preferences): skin tone, gender filter, subcategory toggle
~/.config/cosmic/com.lkbddh.Glyphie/v1/
- State (runtime data): recent emojis history
~/.local/state/cosmic/com.lkbddh.Glyphie/v1/
Changes are picked up live — editing the config files externally will update the running app.
Emoji data is embedded from data/emojis.json at compile time (no network access required).
Report vulnerabilities privately through Report a vulnerability, not in a public issue.
This project uses Rust's security advisory database. To check for vulnerabilities:
cargo install cargo-audit
cargo auditRun cargo audit periodically or integrate it into your CI pipeline.
- The crate uses
#![deny(unsafe_code)]at the root level - No
unsafecode is used in this crate
See THIRD_PARTY_NOTICES.md for open-source dependency, asset, and embedded data notices.
Issues and pull requests are welcome. See CONTRIBUTING.md for how to report bugs and what a pull request needs, and AGENTS.md if you work with an AI coding agent.
GPL-3.0-or-later
