🏪 Modern emoji picker popup for desktop, based on Emoji Mart, built with Tauri and Svelte


Emoji Mart desktop popup

Modern emoji picker popup app for desktop, based on the amazing Emoji Mart web component.

  • 🍾 Built as a popup: quick invocation through your system custom shortcuts, and disappears when not needed, does not stay as a standalone window, does not run in the background
  • 🔎 Search text box automatically focused and ready to type when invoked
  • ⌨️ Can use the keyboard to navigate and select emojis
  • 🧠 Remember your favorite emojis
  • ⚔️ Cross-platform, can be installed natively on Linux, MacOS, or Windows (although only tested on Linux at the moment)
  • 🧑‍🚀 Uses modern and flexible technologies (TSX for the UI, Rust for the cross-platform compilation, what else?), making it easier to maintain and build upon in the future
  • ✒️ On x11 the selected emoji is automatically pasted to your currently focused app, instead of being added to the clipboard! (it allows to uses emojis without losing what was copied before).
  • ⚠️ Auto-paste can be enabled also on Wayland, but require to open permissions of /dev/uinput, which is not recommended for security.

🆕 This project just had its first release, it should be already usable, but you might face bugs as it is not yet battle tested (especially regarding auto-paste). Please report any weird behavior in the GitHub issues! And feel free to contribute, the codebase is quite small and understandable.

Emoji Mart screenshot

Built with Tauri, Svelte, TypeScript, and Vite.

📥️ Installation

🐧 Linux

Download on Flathub


flatpak install io.github.vemonet.EmojiMart

⌨️ The easiest way to use Emoji Mart is to invoke it with a custom system keyboard shortcut, create one to register the command that starts the emoji picker:

flatpak run io.github.vemonet.EmojiMart
👣 More info on defining shortcuts in GNOME Shell here

Go to Settings > Keyboard > View and Customize Shortcuts > Custom Shortcuts

Or you can do it from the terminal, but you will need to adapt it if you already have existing custom shortcuts registered

# Check existing shortcuts list:
gsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings

# Create shortcut 0 triggered with Super+E
gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/]"
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ name 'Emoji Mart'
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ command 'flatpak run io.github.vemonet.EmojiMart'
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ binding '<Super>e'

🌓 Emoji Mart will try to use your system theme, but you can also set a specific theme using the --theme argument when starting the app, possible values are dark, light, and auto:

flatpak run io.github.vemonet.EmojiMart --theme light

👣 If you are using Wayland on GNOME we recommend to enable new windows to be centered, otherwise the popup will appear on the top left corner. If you are using Mutter, the default window composer for GNOME, you can do so by running the following command:

gsettings set org.gnome.mutter center-new-windows true
⚠️ Enable auto-paste on Wayland

To enable auto-paste to work on Wayland you will need to give your user permission to read/write to the user input. It is not recommended in regard of security, and Emoji Mart will still work by copying the emoji to your clipboard if you don't make this change. But it is currently the only way we found to automatically paste on Wayland, please let us know if you know of a better way in the issues!

Add this udev rule which will enable your user to access /dev/uinput:

echo "KERNEL==\"uinput\", MODE=\"0660\", GROUP=\"$(id -gn)\", TAG+=\"uaccess\"" | sudo tee -a /etc/udev/rules.d/99-uinput.rules
# Then reload the rules (or reboot):
sudo udevadm control --reload-rules
Alternatively, but not recommended, you can also use the .AppImage file

This is not recommended, as the apps takes longer to startup than with the flatpak, and not all dependencies are included to auto-paste.

Run this command to download the .AppImage, and create a desktop file for it:

curl -Ls https://raw.github.com/vemonet/EmojiMart/main/install.sh | bash

Or manually download the .AppImage file from the latest release, and install it.

If you are using x11 you will need to make sure xdotool is installed on the system, e.g. for fedora:

sudo dnf install libxdo-devel

🍎 MacOS

Download the .dmg for the latest release, and install it.

Then create a custom shortcut for the command: flatpak run io.github.vemonet.EmojiMart to invoke it quickly.

🪟 Windows

Download the .exe for the latest release, and install it.

Then create a custom shortcut for the command: flatpak run io.github.vemonet.EmojiMart to invoke it quickly.

📋️ Notes

The app currently does not run in the background. It could be invoked slightly faster with a built-in shortcut, and running in the background, but that increases the chances of people starting many phantom processes without knowing. When running in the background and invoked using the built-in shortcut the window is not properly focused. Alternatively when installed with flatpak starting it without letting it run in the background is fast enough for using it like this directly, and does not have any issue with focusing.

Letting the user register custom system shortcuts, instead of having the app registering the shortcut for the user, prevents bugs and conflicts with other shortcuts. Which enable the users to choose from a larger amount of shortcuts.

Inspired by:

Icon credits: duniaonme653898 on Vecteezy

☑️ Todo

  • Select multiple emoji when pressing a specific key, e.g. when pressing shift
  • On x11: improve the process to add the emoji to the clipboard/paste/close the app. Currently there is an issue with xdotool clearing the clipboard when called from tauri
  • On wayland: add auto-paste on Wayland with ydotool, this will require some permission wizardry from the user to enable access to /dev/uinput in the flatpak container(cf. flatpak/flatpak#4137), and might also require to run in the background (for the ydotoold daemon)
  • Check if working properly on MacOS
  • Check if working properly on Windows
  • Add auto-paste on Windows and MacOS when the compatibility between Enigo and Tauri is resolved (cf. enigo-rs/enigo#15 and tauri-apps/tauri#6421)

🛠️ Development

Latest release Build app Publish new release

Recommended IDE Setup: VS Code + Tauri + rust-analyzer

Requirements: yarn v1 (v3 is not supported by flatpak to generate npm sources)

See pre-requesites to run tauri: https://tauri.app/v1/guides/getting-started/prerequisites

🧶 Install

Additional dependencies for Linux to enable auto-paste on x11:

sudo dnf install libX11-devel libxdo-devel

Install dependencies:

make install

If you are developing on Wayland you will need to install extra dependencies (e.g. ydotool to auto-paste):

make install-wayland

🛩️ Run

In development mode, with automatic reload when the code changes:

make dev

To see logs and debug: right click on the app window, and select Inspect Element

📦️ Build

To build the Flatpak package checkout this repository: github.com/vemonet/flathub/tree/io.github.vemonet.EmojiMart

Build .AppImage and .deb packages, or .dmg/.exe depending on your OS:

make build

On Linux, you can install the previously built EmojiMart.AppImage as desktop app:

make desktop-local

✅ Format

Run automatic formatting and linting of the codebase:

make fmt

⏫ Upgrade dependencies

You might want to upgrade the latest versions of:

To automatically upgrade dependencies with yarn and cargo you can run:

make upgrade

🏷️ New release

To publish a new release, follow this process:

  1. Changed the version in: package.json, src-tauri/Cargo.toml and src-tauri/tauri.conf.json, you can use this script to do it automatically for a specific new version:

    make version=0.1.2 bump
  2. Merge the main branch to the release branch, and push the release branch to GitHub.

  3. A GitHub Action workflow will automatically build the artefacts for the different platforms, create a new release on GitHub, and update the version in the flathub repo, which will trigger a new build/release on flathub.

🖼️ Change icon

Put the new icon file named app-icon.png (ideally size 512 or 1024) at the root of the repo, and run (for more details see the official docs):

make icon
You might also like...
A Tauri-based spreadsheet
A Tauri-based spreadsheet

Pulsars A Tauri-based spreadsheet The following cool libraries made it possible to build Pulsars 🚀 : fortune-sheet: TypeScript library for the spread

Tauri and Leptos example.

tauri-leptos-example Tauri Leptos Requires Rust Nightly. See Leptos nightly Note. # Install Tauri CLI cargo install tauri-cli # Build and develop for

Fast file explorer written with Tauri and React.
Fast file explorer written with Tauri and React.

Fast File Explorer This is a fast file explorer written in Rust. After testing on my C drive, this file explorer was able to find a file in 280ms. In

A xdg-desktop-portal for wlroots based compositors implementing zwlr_screencopy

xdg-desktop-portal-luminous An alternative to xdg-desktop-portal-wlr for wlroots compositors. This project is a stand alone binary and does not depend

Cross-platform Window library in Rust for Tauri. [WIP]

Cross-platform application window creation library in Rust that supports all major platforms like Windows, macOS, Linux, iOS and Android. Built for you, maintained for Tauri.

Helps positioning your tauri windows.

Tauri plugin positioner A plugin for tauri that helps positioning you windows at well known locations. Install Rust [dependencies] tauri-plugin-positi

A custom invoke system for Tauri that leverages a localhost server

Tauri Invoke HTTP This is a crate that provides a custom invoke system for Tauri using a localhost server. Each message is delivered through a XMLHttp

This is a small demo to accompany the Tauri + Yew tutorial

Tauri + Yew Demo This is a small demo to accompany the Tauri + Yew tutorial

📦 Port of tauri-bundler

📦 Port of tauri-bundler You can now easily create installers for your Deno apps, thanks to the amazing work of Tauri 💪

Vincent Emonet
Vincent Emonet
Hydrogen is the desktop application for Geplauder, built with tauri studio.

Hydrogen Hydrogen is the desktop application for Geplauder, built with tauri studio. For more information on Geplauder, click here. Usage To configure

null 4 Nov 21, 2021
Simple popup for using marks in Sway

Simple popup for using marks in Sway This allows you to use vim-like marks in sway easily. Usage: bindsym --to-code $mod+m exec sway-marker mark binds

null 21 Dec 21, 2022
🧼 A popup translation tool.

Popup translation 通过 wry 打开一个 webview 窗口,然后打开某个翻译平台的网页翻译内容,并通过 js 代码屏蔽掉不需要的内容,专注于翻译内容本身。 ?? Features 利用 wry 提供的网页视图功能实现的弹窗功能 从剪贴板读取文本并翻译 在 Linux(x11)

Li Ke 24 Feb 21, 2023
A lightweight new Bing (AI chat) desktop application which based on Tauri.

Bing Lite A lightweight new Bing (AI chat) desktop application which based on Tauri. No more Microsoft Edge, no more Chromium/Electron! Download The l

a.e. 6 Apr 5, 2023
TaurApp is a WhatsApp desktop client powered by Tauri and Rust.

TaurApp TaurApp is a WhatsApp desktop client powered by Tauri and Rust. TaurApp is an experimental client and is initially created to test out Tauri i

Eray Erdin (&mut self) 22 Mar 19, 2023
Rust + Yew + Axum + Tauri, full-stack Rust development for Desktop apps.

rust-yew-axum-tauri-desktop template Rust + Yew + Axum + Tauri, full-stack Rust development for Desktop apps. Crates frontend: Yew frontend app for de

Jet Li 54 Dec 23, 2022
OpenAI ChatGPT desktop app for Mac, Windows, & Linux menubar using Tauri & Rust

ChatGPT Desktop App Unofficial open source OpenAI ChatGPT desktop app for mac, windows, and linux menubar using tauri & rust. Downloads Windows (2.7 M

Sonny Lazuardi 732 Jan 5, 2023
Web-wrapped Supabase desktop app for macOS, Windows & Linux powered by Tauri

Supabase Desktop App What is it? It's a cross-platform web-wrapped Supabase desktop app powered by Tauri. You can install it on your macOS, Windows (u

Abiel Zulio M 12 Jan 25, 2023
Simple color picker that lets the user create harmonic palettes with ease.

epick Simple color picker that lets the user create harmonic palettes with ease. Get it You can checkout the web demo over here or get a native binary

Wojciech Kępka 101 Dec 19, 2022
SimpleX Chat GUI built with Rust, Tauri and Yew

simplex-desktop A desktop application for simplex-chat. WIP, contributions are welcome. Architecture For the back end we rust with tauri and frontend

Simon Shine 5 Feb 28, 2023