Skip to content

floatpane/jify

Repository files navigation

jify logo

jify

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      ->  🚀

Features

  • 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 frosted NSVisualEffectView on 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).
  • 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).

Selection UX

  • 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 XRecord can 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).

Install

macOS (Homebrew):

brew install floatpane/jify/jify

Linux (Snap):

sudo snap install jify --classic

Windows / manual: download the archive for your OS from the releases page and put jify on your PATH.

Build from source

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 .

Usage

./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 help

Running in the background & at login

jify 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\Run registry 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.

Configuration

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 support

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.

Notes & permissions

  • macOS needs Accessibility permission for the event tap.
  • Linux requires an X11 session (works under XWayland for most apps) with the RECORD and XTEST extensions, 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.

About

Native shortcode emoji picker anywhere! MacOS, Linux, Windows

Resources

License

Stars

Watchers

Forks

Contributors