Skip to main content

mojify logo

mojify

A Wayland-native emoji picker for Ubuntu/GNOME.

Press a shortcut, type to search, hit Enter — the emoji is copied to your clipboard. Paste it anywhere with Ctrl + V.

pip install mojify

Why it exists

GNOME's built-in emoji picker only works inside GTK apps, and most third-party pickers (rofi-emoji, etc.) rely on xdotool / ydotool to type the emoji — which does not work on Wayland because Wayland blocks programs from synthesizing keystrokes into other apps for security reasons.

mojify takes the Wayland-friendly route: it copies the emoji to your clipboard and lets you paste it yourself with Ctrl + V. That works in every application — your terminal, browser, editor, chat app, anywhere — with no input-injection hacks.

It's built on GTK3 (PyGObject), which already ships with Ubuntu's GNOME desktop, so the only thing you need to add is the clipboard helper.


Install

pip install mojify

Required dependency: wl-clipboard

mojify uses wl-copy to put the emoji on your clipboard:

sudo apt install wl-clipboard

GTK3 / PyGObject already come with Ubuntu's GNOME desktop. If you're on a stripped-down system and the picker won't start, install them with: sudo apt install python3-gi gir1.2-gtk-3.0


Usage

Launch the picker directly:

mojify

Other commands:

mojify --version    # print the version
mojify --list       # print every bundled emoji (char<TAB>name<TAB>keywords)
mojify --stdout     # print the chosen emoji to stdout instead of copying
mojify --no-notify  # skip the "Copied" desktop notification

--list is handy for scripting, e.g. piping into your own fuzzy finder:

mojify --list | fzf | cut -f1 | wl-copy

Set up the Super + . keyboard shortcut (GNOME)

The whole point is to summon mojify with one keystroke. Bind it as a custom shortcut:

  1. Open Settings → Keyboard → View and Customize Shortcuts.
  2. Scroll to the bottom and click Custom Shortcuts, then the + button.
  3. Fill in:
    • Name: mojify
    • Command: mojify (if that doesn't work, use the absolute path — run which mojify to find it, e.g. /home/you/.local/bin/mojify)
    • Shortcut: press Super + .
  4. Click Add.

Now press Super + . anywhere and the picker pops up.

Note: Super is the Windows/⌘ key. If GNOME says the shortcut is already in use, pick another combo (e.g. Super + E) — the steps are the same.

Tip: if you installed with pip install --user, make sure ~/.local/bin is on your PATH, or just use the absolute path in the command field.


Show mojify in the app grid / dock (optional)

To register mojify as a desktop app (with its icon) so it appears in the GNOME app grid, search, and dock — and can be pinned:

mojify --install-desktop      # installs a .desktop file + icon
mojify --uninstall-desktop    # removes them

You may need to log out/in for the icon to refresh. Note the picker itself is a borderless pop-up, so it intentionally has no titlebar icon.

How it works

  1. Press your shortcut (e.g. Super + .).
  2. A small floating search window appears in the center of the screen, always on top, with no titlebar.
  3. Browse by category tab — starting with a 🕒 Recent tab of your most-used emojis — or just start typing to search by name or keyword (fire, smile, heart, rocket, …). Search spans every category and updates in real time.
  4. Use arrow keys to move through the grid, or click with the mouse.
  5. Press Enter (or click) to select. The emoji is copied to your clipboard and the window closes instantly.
  6. Press Ctrl + V wherever you want the emoji.
  7. Press Escape at any time to dismiss the picker without selecting.

Known limitation

You have to paste manually with Ctrl + V. mojify cannot type the emoji into the focused app for you, because Wayland deliberately prevents applications from injecting keystrokes into other windows. Copy-to-clipboard is the robust, secure way to do this on Wayland — and it works everywhere.


Project layout

mojify/
├── mojify/
│   ├── __init__.py
│   ├── __main__.py     # CLI entry point (python -m mojify / `mojify`)
│   ├── picker.py       # GTK3 floating picker window
│   └── emojis.py       # bundled emoji dataset + search
├── setup.py
├── pyproject.toml
├── README.md
└── LICENSE

Contributing

Contributions are very welcome! 🎉

  1. Fork the repo and create a feature branch.
  2. Make your change. The codebase is small and dependency-light:
    • Adding emojis? Edit mojify/emojis.py. Each entry is a (character, name, keywords) tuple. Add generous keywords — they're what make search forgiving.
    • UI tweaks? They live in mojify/picker.py.
  3. Test locally with an editable install:
    pip install -e .
    mojify
    
  4. Open a pull request describing the change.

Please keep the zero-heavy-dependency philosophy: GTK3 (already on Ubuntu) for the UI and wl-clipboard for the clipboard — nothing more.


License

MIT © 2026 Piyush Doorwar

Metadata

Release files for mojify 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mojify 0.5.0
File Size Uploaded Provenance
mojify-0.5.0.tar.gz 89.0 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for mojify 0.5.0
File Interpreter ABI Platform
mojify-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 133.1 kB

Release files / mojify-0.5.0.tar.gz

Download URL mojify-0.5.0.tar.gz
Size 89.0 kB
Tags Source
SHA-256 checksum
How to use checksums
13ab85f6476422377186ea57d79f26ce980a99e05289ed0d7a92df8647dd9b19
BLAKE2b-256 checksum
How to use checksums
556279121d0e8dacf1c1406fee2c4ab267818b35d4bc3df4b21bf0bcc1c32db5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 17, 2026.

Transparency log

Release files / mojify-0.5.0-py3-none-any.whl

Download URL mojify-0.5.0-py3-none-any.whl
Size 44.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
889385493969d3ed03f902231a14d051c26f537a636599caa5f8d52a30d75c8a
BLAKE2b-256 checksum
How to use checksums
788cfab4b0e6efbebb7effcbfcbfaf57b7c24ce32119296b61413a84b68f3697
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 17, 2026.

Transparency log

Security for mojify 0.5.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for mojify-0.5.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 17, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page