Emoji, everywhere you type.
Native shortcode emoji picker. Type a trigger character (: by default)
followed by an emoji name in any application and jify pops up native
suggestions — press Enter to replace the shortcode with the emoji.
:fire -> 🔥
:thumbsup -> 👍
:rocket -> 🚀
- Works everywhere — a global keyboard hook watches your typing system-wide.
- Native popup on every OS
- macOS — "liquid glass" (
NSGlassEffectView) on macOS 26+, falling back to a frostedNSVisualEffectViewon older releases. - Windows — an acrylic-blur, rounded-corner layered window (Win10/11).
- Linux — a GTK 3 popup styled with CSS (rounded, translucent, color emoji via Pango).
- macOS — "liquid glass" (
- Configurable — trigger character, result count, theme and per-app blacklist all live in a JSON config.
- App blacklist — disable jify in specific apps (e.g. password managers).
- macOS / Windows — keystrokes can be intercepted, so the popup is fully interactive: ↑/↓ to move, Enter/Tab to insert, Esc to cancel.
- Linux (X11) — X11's
XRecordcan observe but not swallow keys, so selection uses the closing-trigger style: type:smile:(trigger, name, trigger) to insert the top suggestion. The popup updates live as you type. - Any platform — you can also click a suggestion in the popup to insert it (rows highlight on hover).
macOS (Homebrew):
brew install floatpane/jify/jifyLinux (Snap):
sudo snap install jify --classicWindows / manual: download the archive for your OS from the
releases page and put jify on
your PATH.
Requires Go 1.24+.
# macOS (needs the Xcode command line tools for cgo / Objective-C)
CGO_ENABLED=1 go build -o jify .
# Windows (pure Go, no cgo)
GOOS=windows CGO_ENABLED=0 go build -o jify.exe .
# Linux (needs gtk+-3.0, libx11 and libxtst dev packages, e.g. on Debian:
# sudo apt install libgtk-3-dev libx11-dev libxtst-dev)
CGO_ENABLED=1 go build -o jify ../jify # start jify in the background (type ":name" anywhere)
./jify -f # run in the foreground (don't detach; for debugging)
./jify enable # start jify automatically at login
./jify disable # stop starting jify at login
./jify status # show whether autostart is enabled
./jify config # print the config file path
./jify help # show helpjify is designed to run as a background agent (no dock icon on macOS, no window
until the popup appears). Running jify from a terminal detaches it and returns
your prompt immediately; its output goes to a log file next to the config
(<config-dir>/jify/jify.log). Use jify -f to stay in the foreground. When
launched by launchd/systemd/snap it runs in the foreground so the supervisor can
track it.
It also registers itself to launch at login automatically on first run —
controlled by the autostart config field, which is reconciled with the OS every
time jify starts. Use jify disable to turn it off.
Login mechanism per OS:
- macOS — a LaunchAgent at
~/Library/LaunchAgents/com.floatpane.jify.plist. - Windows — an
HKCU\…\CurrentVersion\Runregistry value. - Linux —
~/.config/autostart/jify.desktop.
Windows: build with the GUI subsystem so no console window appears:
GOOS=windows CGO_ENABLED=0 go build -ldflags="-H windowsgui" -o jify.exe .
On first launch macOS will ask for Accessibility permission (System Settings → Privacy & Security → Accessibility). This is required for the global key event tap. Grant it and relaunch.
- Type the trigger character followed by a name to open the popup.
- ↑/↓ to move the selection.
- Enter / Tab to insert the highlighted emoji.
- Esc or any space/punctuation cancels.
The config file is created with defaults on first run at:
~/Library/Application Support/jify/config.json (macOS)
~/.config/jify/config.json (Linux)
See config.example.json:
| Field | Description |
|---|---|
trigger |
Character that starts a suggestion session (default :). |
maxSuggestions |
Maximum emojis shown in the popup. |
blacklistedApps |
App bundle ids (com.apple.Terminal) or names where jify is off. |
theme |
native, dark or light. |
autostart |
Launch jify at login (default true). |
| Platform | Backend | Hook / inject | Popup |
|---|---|---|---|
| macOS | darwin.m (cgo / Objective-C) |
CGEventTap / CGEvent |
NSGlassEffectView |
| Windows | windows.go (pure Go, Win32) |
WH_KEYBOARD_LL / SendInput |
acrylic layered window |
| Linux | linux.c (cgo / GTK3 + X11) |
XRecord / XTest |
GTK CSS popup |
The Go core (pkg/config, pkg/emoji) is platform-independent. The cgo
backends (macOS, Linux) call the shared exported callbacks in bridge.go
(jifyQuery, jifyIsBlacklisted, jifyTriggerRune); the Windows backend is
pure Go and calls the core directly.
- macOS needs Accessibility permission for the event tap.
- Linux requires an X11 session (works under XWayland for most apps) with
the
RECORDandXTESTextensions, which are standard. - Windows needs no special permission; if jify is used in an elevated (admin) window, run jify elevated too so the hook can see those keystrokes.
