{"id":19710763,"url":"https://github.com/vemonet/emojimart","last_synced_at":"2025-09-20T03:05:43.870Z","repository":{"id":178034571,"uuid":"658765852","full_name":"vemonet/EmojiMart","owner":"vemonet","description":"🏪 Modern emoji picker popup for desktop, based on Emoji Mart, built with Tauri and Svelte","archived":false,"fork":false,"pushed_at":"2024-10-15T20:56:04.000Z","size":6938,"stargazers_count":81,"open_issues_count":12,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-05T07:03:12.472Z","etag":null,"topics":["emoji","emoji-picker","emoji-search","emoji-selector","rust","svelte","tauri","vitejs"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vemonet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-26T12:55:49.000Z","updated_at":"2025-06-03T07:50:20.000Z","dependencies_parsed_at":"2024-08-22T22:45:59.371Z","dependency_job_id":"fd57ed03-dd2e-4201-a26b-2b4657f2ff7f","html_url":"https://github.com/vemonet/EmojiMart","commit_stats":{"total_commits":109,"total_committers":1,"mean_commits":109.0,"dds":0.0,"last_synced_commit":"76a7bc816dc22e6b7580a24ecb087dea6ebf0e12"},"previous_names":["vemonet/emojimart"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/vemonet/EmojiMart","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vemonet%2FEmojiMart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vemonet%2FEmojiMart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vemonet%2FEmojiMart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vemonet%2FEmojiMart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vemonet","download_url":"https://codeload.github.com/vemonet/EmojiMart/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vemonet%2FEmojiMart/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260857428,"owners_count":23073439,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["emoji","emoji-picker","emoji-search","emoji-selector","rust","svelte","tauri","vitejs"],"created_at":"2024-11-11T22:08:20.993Z","updated_at":"2025-09-20T03:05:43.861Z","avatar_url":"https://github.com/vemonet.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003cspan\u003e\u003cimg width=\"35\" height=\"35\" src=\"https://github.com/vemonet/EmojiMart/blob/main/src-tauri/icons/128x128.png\"\u003e\u003c/span\u003e Emoji Mart desktop popup\n\n[![FlatHub release](https://img.shields.io/flathub/v/io.github.vemonet.EmojiMart)](https://flathub.org/apps/io.github.vemonet.EmojiMart)\n[![Latest release](https://shields.io/github/v/release/vemonet/EmojiMart?label=download)](https://github.com/vemonet/EmojiMart/releases/latest)\n[![Build](https://github.com/vemonet/EmojiMart/actions/workflows/build.yml/badge.svg)](https://github.com/vemonet/EmojiMart/actions/workflows/build.yml)\n\nModern emoji picker popup for desktop, based on the amazing [Emoji Mart](https://github.com/missive/emoji-mart) web component, built with [Tauri](https://tauri.app/) and [Svelte](https://svelte.dev).\n\n- 🍾 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\n- 🔎 Search text box automatically focused and ready to type when invoked\n- ⌨️ Use the keyboard to navigate and select emojis\n- ✒️ On x11 the selected emoji is automatically pasted to your currently focused app\n- 🌍 Complete translation in [22 languages](https://github.com/vemonet/EmojiMart/tree/main/src/data), it will use your system language automatically\n- 🧠 Remembers your frequently used emojis\n- ⚔️ Cross-platform, it can be installed natively on Linux, MacOS, or Windows (although only tested on Linux at the moment)\n- 🧑‍🚀 Built with Tauri, TypeScript, and Svelte\n\n\u003e Please report any weird behavior in the GitHub issues! And feel free to contribute, the codebase is quite small and understandable.\n\n![Emoji Mart screenshot](https://raw.github.com/vemonet/EmojiMart/main/resources/screenshot.png)\n\n## 📥️ Installation\n\n### 🐧 Linux\n\n\u003ca href='https://flathub.org/apps/io.github.vemonet.EmojiMart'\u003e\u003cimg width='240' alt='Download on Flathub' src='https://dl.flathub.org/assets/badges/flathub-badge-en.png'/\u003e\u003c/a\u003e\n\nor\n\n```bash\nflatpak install io.github.vemonet.EmojiMart\n```\n\n⌨️ 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:\n\n```bash\nflatpak run io.github.vemonet.EmojiMart\n```\n\n\u003cdetails\u003e\u003csummary\u003e👣 More info on defining shortcuts in GNOME Shell here\u003c/summary\u003e\n\nGo to **Settings** \u003e **Keyboard** \u003e **View and Customize Shortcuts** \u003e **Custom Shortcuts**\n\nOr you can do it from the terminal, but you will need to adapt it if you already have existing custom shortcuts registered\n\n```bash\n# Check existing shortcuts list:\ngsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings\n\n# Create shortcut 0 triggered with Super+E\ngsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings \"['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']\"\ngsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ name 'Emoji Mart'\ngsettings 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'\ngsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ binding '\u003cSuper\u003ee'\n```\n\n\u003c/details\u003e\n\n🌓 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`:\n\n```bash\nflatpak run io.github.vemonet.EmojiMart --theme light\n```\n\n🌍 Emoji Mart will try to use your system language, but you can also set a **specific language** using the `--lang` argument when starting the app:\n\n```bash\nflatpak run io.github.vemonet.EmojiMart --lang fr\n```\n\n♻️ If you want to only rely on auto-paste and keep what is in your clipboard use the `--keep` argument:\n\n```bash\nflatpak run io.github.vemonet.EmojiMart --keep\n```\n\n👣 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:\n\n```bash\ngsettings set org.gnome.mutter center-new-windows true\n```\n\n\u003e [!CAUTION]\n\u003e\n\u003e Tauri v2 crashes when used with flatpak on Wayland (as usual Wayland breaks everything). So you will need to use the `.appimage` or the flatpak `v0.2.4`\n\n\u003c!--\n\n##### ⚠️ Enable auto-paste on Wayland\n\n 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!\n\nFirst you will need to download and install the `.flatpak` file from the GitHub releases, instead of Flathub:\n\n```bash\ncurl -Lo io.github.vemonet.EmojiMart.flatpak https://github.com/vemonet/EmojiMart/releases/latest/download/io.github.vemonet.EmojiMart.flatpak\nflatpak install io.github.vemonet.EmojiMart.flatpak\n```\n\nAnd add this udev rule which will enable your user to access `/dev/uinput`:\n\n```bash\necho \"KERNEL==\\\"uinput\\\", MODE=\\\"0660\\\", GROUP=\\\"$(id -gn)\\\", TAG+=\\\"uaccess\\\"\" | sudo tee -a /etc/udev/rules.d/99-uinput.rules\n# Or this command should work too but I did not tested it yet:\nsudo usermod -a -G input $(whoami)\n# Then reboot to make sure changes are loaded\nsudo reboot\n```\n\n--\u003e\n\n\u003cdetails\u003e\u003csummary\u003eAlternatively, you can use the \u003ccode\u003e.AppImage\u003c/code\u003e file\u003c/summary\u003e\n\nThis is not recommended, as the app takes slightly longer to startup than with flatpak, and not all dependencies are included to auto-paste.\n\nRun this command to download the `.AppImage`, and create a desktop file for it:\n\n```bash\ncurl -Ls https://raw.github.com/vemonet/EmojiMart/main/install.sh | bash\n```\n\nOr manually download the `.AppImage` file from the [latest release](https://github.com/vemonet/EmojiMart/releases/latest), and install it.\n\nIf you are using x11 you will need to make sure `xdotool` is installed on the system, e.g. for fedora:\n\n```bash\nsudo dnf install libxdo-devel\n```\n\n\u003c/details\u003e\n\n### 🍎 MacOS\n\nDownload the `.dmg` for the [latest release](https://github.com/vemonet/EmojiMart/releases/latest), and install it.\n\nThen create a custom shortcut for the command: `flatpak run io.github.vemonet.EmojiMart` to invoke it quickly.\n\n### 🪟 Windows\n\nDownload the `.exe` or `.msi` installer for the [latest release](https://github.com/vemonet/EmojiMart/releases/latest), and install it.\n\nThe installer will add a Start menu shortcut, and can optionally create a Desktop shortcut. You can pin either of these shortcuts to your Taskbar for quick access. For even quicker access, modify the shortcut (via its Properties dialog box) to assign a keyboard combination for its invocation.\n\n## 📋️ Notes\n\nThe 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. 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.\n\nLetting 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.\n\nInspired by:\n\n- [tom-james-watson/Emote](https://github.com/tom-james-watson/Emote) my favorite GTK emoji picker\n- [Simon-Laux/tauri-emoji-mart-app](https://github.com/Simon-Laux/tauri-emoji-mart-app) who combined tauri with emoji-mart, difference are that we use Svelte instead of React, and the popup design has been improved.\n\n[Icon](https://www.vecteezy.com/vector-art/5726169-cardboard-box-funny-box-box-character-delivery-box-box-emoji) credits: \u003ca href=\"https://www.vecteezy.com/members/duniaonme653898\"\u003eduniaonme653898 on Vecteezy\u003c/a\u003e\n\n### ☑️ Todo\n\n- [ ] Auto-paste on Wayland: currently using `ydotool` but requires too many permissions (`--device=all` and user r/w access to `/dev/uinput`). And it tries to install files at the wrong place in flatpak, so it fails\n\n  - [ ] Use [libei](https://gitlab.freedesktop.org/libinput/libei): once it has been implemented by mutter: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2628 and merged to flatpak https://github.com/flatpak/xdg-desktop-portal/pull/762\n  - [ ] Recent rust [crate for libei](https://crates.io/crates/reis) protocol: https://github.com/ids1024/reis/blob/master/examples/type-text.rs which uses [ashpd](https://docs.rs/ashpd/latest/ashpd/)\n\n- [ ] Select multiple emoji when pressing a specific key, e.g. when pressing shift\n- [ ] Add auto-paste on Windows and MacOS when the compatibility between Enigo and Tauri is resolved (cf. https://github.com/enigo-rs/enigo/issues/15 and https://github.com/tauri-apps/tauri/issues/6421)\n- [ ] Improve persistence https://aptabase.com/blog/persistent-state-tauri-apps\n\n## 🛠️ Development\n\nBuilt with [Tauri](https://tauri.app/), [Svelte](https://svelte.dev), and [TypeScript](https://www.typescriptlang.org/).\n\nRecommended IDE Setup: [VS Code](https://code.visualstudio.com/) + [Tauri](https://marketplace.visualstudio.com/items?itemName=tauri-apps.tauri-vscode) + [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer)\n\nRequirements: NodeJS (20 ideally)\n\nSee pre-requesites to run tauri: https://tauri.app/v1/guides/getting-started/prerequisites\n\n### 🧶 Install\n\nAdditional dependencies for Linux to enable auto-paste on x11:\n\n```bash\n# On debian/ubuntu\nsudo apt install -y libwebkit2gtk-4.1-dev librsvg2-dev libx11-dev libxdo-dev build-essential libssl-dev libayatana-appindicator3-dev\n# On fedora\nsudo dnf install -y libX11-devel libxdo-devel\n```\n\nInstall dependencies:\n\n```bash\nmake install\n```\n\nIf you are developing on Wayland you will need to install extra dependencies (e.g. `ydotool` to auto-paste):\n\n```bash\nmake install-wayland\n```\n\n### 🛩️ Run\n\nIn development mode, with automatic reload when the code changes:\n\n```bash\nmake dev\n```\n\n\u003e To see logs and debug: right click on the app window, and select `Inspect Element`\n\n### 📦️ Build\n\nTo build the **Flatpak** package checkout this repository: [flathub/io.github.vemonet.EmojiMart](https://github.com/flathub/io.github.vemonet.EmojiMart)\n\nBuild `.AppImage` and `.deb` packages, or `.dmg`/`.exe` depending on your OS:\n\n```bash\nmake build\n```\n\nOn Linux, you can install the previously built `EmojiMart.AppImage` as desktop app:\n\n```bash\nmake desktop-local\n```\n\n### ✅ Format\n\nRun automatic formatting and linting of the codebase:\n\n```bash\nmake fmt\n```\n\n### ⏫ Upgrade dependencies\n\nYou might want to upgrade the latest versions of:\n\n- Tauri app: [tauri.app](https://tauri.app)\n- EmojiMart web component: [npmjs.com/package/emoji-mart](https://www.npmjs.com/package/emoji-mart) and [npmjs.com/package/@emoji-mart/data](https://www.npmjs.com/package/@emoji-mart/data)\n\nTo automatically upgrade dependencies with `yarn` and `cargo` you can run:\n\n```bash\nmake upgrade\n```\n\nGenerate translated description in 22 languages for all emojis of a certain [version](https://github.com/missive/emoji-mart/tree/main/packages/emoji-mart-data/sets):\n\n```bash\nmake translate version=15\n```\n\n### 🏷️ New release\n\nTo publish a new release, follow this process:\n\n1. Change 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 (this will also create a commit):\n\n   ```bash\n   make bump version=patch\n   ```\n\n2. Merge the `main` branch to the `release` branch, and push the `release` branch to GitHub:\n\n   ```bash\n   make release\n   ```\n\n3. A [GitHub Action workflow](https://github.com/vemonet/EmojiMart/actions/workflows/release.yml) will automatically build the artefacts for the different platforms, and create a [new release on GitHub](https://github.com/vemonet/EmojiMart/releases).\n\n4. Finally send a pull request to update the tag in the [flathub repository](https://github.com/flathub/io.github.vemonet.EmojiMart) to trigger a new release on flathub.\n\n### 🖼️ Change icon\n\nPut 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](https://tauri.app/fr/v1/guides/features/icons/)):\n\n```bash\nmake icon\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvemonet%2Femojimart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvemonet%2Femojimart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvemonet%2Femojimart/lists"}