| .assets | ||
| release | ||
| scripts | ||
| src | ||
| .gitignore | ||
| CLAUDE.md | ||
| justfile | ||
| LICENSE | ||
| NEWS.md | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| svelte.config.js | ||
| vite.config.js | ||
DoubleDot Emoji Picker
A userscript that displays an emoji picker when you type : followed by text in any input field.
Installation
- Install Violentmonkey for your browser (Tampermonkey/Greasemonkey may also work but are untested)
- Download and install the latest userscript
Usage
- Type
:followed by letters in any text field (e.g.,:smile,:thumbs-up) - The picker appears with matching emojis
- Select an emoji:
- Click on it
- Use arrow keys to navigate, then press the configured trigger key (Tab, Enter, or both — see Settings)
- Press Escape to close without selecting
Skin tone variants
For emojis that support skin tones (👋, 👍, 🧑🚒, …), once you have chosen a skin tone it is inserted directly without opening the selector again.
To open the selector:
- Right-click the emoji, or
- Shift + trigger key when the emoji is selected
The selector shows the base (default) emoji followed by the five skin tone variants.
- Click a variant or use Left/Right arrow keys to navigate, then confirm with the trigger key
- Press Escape to close just the selector (press again to close the picker)
- Typing any character confirms the focused variant and passes the typed character through to the input
- Your choice is saved per emoji — next time it will already display in your preferred skin tone
The trigger only activates when : is at the start of text or after a space, so URLs and other text containing colons won't trigger it.
You can also search without dashes — :thumbsup will match :thumbs-up. Search also matches emoji tags (e.g. :omg finds 🙈).
Colon-less mode
Enable Colon-less mode in Settings to trigger the picker by typing any word that matches an emoji slug — no leading : required. A configurable minimum word length (default: 5) prevents false positives on short common words. The trigger key for colon-less mode can be configured independently (defaults to Tab to avoid interfering with Enter/newline behavior).
Custom keywords
Open Settings → Custom keywords to attach your own search terms to any emoji. For example, add lgtm approve to 👍 and searching :lgtm will surface it.
Features
- Works everywhere -
<input>,<textarea>, andcontentEditableelements - Up-to-date emojis - Bundled directly from the Unicode standard (no API key required)
- Skin tone variants - Inline selector for emojis that support skin tones; preference saved per emoji
- Colon-less mode - Optionally trigger the picker without a leading
:by typing any matching word - Custom keywords - Attach your own search terms to any emoji via Settings
- Theme - Light, dark, or automatic (follows system preference)
- Configurable trigger key - Choose Tab, Enter, or both to insert; colon-less mode has its own independent setting
- Blocklist / Allowlist - Control which sites the picker appears on using URL patterns with wildcard support
- Quick settings access - Type
:doubledotin any field to open settings, even on blocked pages
Controlling Which Sites the Picker Appears On
Open Settings (gear icon) to switch between two modes:
Blocklist mode (default) — the picker appears everywhere except the listed URLs. Click the ban icon in the picker header to add the current page.
Allowlist mode — the picker only appears on the listed URLs. Click the plus icon in the picker header to add the current page.
In both modes you can choose how specific the pattern should be:
https://example.com/foo/bar/*— match only this pathhttps://example.com/*— match the entire site
Tip: Type
:doubledotin any text field to open settings, even on pages where the picker is disabled.
Building from Source
Requires just.
npm install # Install dependencies (run once)
just build # Output: dist/doubledot-emoji-picker.user.js
just dev # Development mode with hot reload
just release # Interactively bump version, build, and copy to release/
