Linux Compositor & Wayland Architecture Guide • Updated 2026
Text Expanders on Wayland: What Actually Works in 2026
Short answer: on a pure Wayland session, no text expander can expand typed keyword triggers or use global hotkeys — not Espanso, not AutoKey, not FlitKey. Wayland deliberately forbids applications from reading global keystrokes. What still works everywhere is a picker: a searchable snippet window you open and paste from. This page explains why, and what each tool actually does.
1. First, check which session you are actually running
Most "Wayland" desktops are not fully Wayland. Many applications still run through XWayland, the X11 compatibility layer — and inside XWayland, traditional text expansion works normally. Before assuming a tool is broken, run:
echo $XDG_SESSION_TYPE
x11— you are on X11. Every text expander works fully, including typed triggers and global hotkeys.wayland— you are on a native Wayland session. Global keystroke interception is unavailable to all applications.
Even on a Wayland session, individual apps may still be running under XWayland. Expansion often works in those apps and not in native Wayland ones, which is why the behaviour can look inconsistent.
2. Why typed triggers break — for every tool
Under X11, any background utility can ask the display server for all global keystrokes and inject synthetic key events into any window. That is what makes a keyword trigger like ;addr possible: the expander is watching everything you type, everywhere.
It is also, precisely, what a keylogger does. Wayland closed this hole deliberately. There is no permission to request and no flag to set — the protocol does not expose global input to ordinary clients at all.
This is a property of Wayland, not a shortcoming of any particular application. Espanso, AutoKey, and FlitKey are all subject to it equally. Be sceptical of any text expander claiming "full native Wayland support" for typed triggers.
3. What each tool actually does on Wayland
| Capability | FlitKey | Espanso | AutoKey |
|---|---|---|---|
| Typed keyword triggers | No | No | No (X11 only) |
| Global hotkeys | No | No | No |
| Searchable snippet picker | Yes — GUI window, clipboard paste | Search bar, no full GUI | Dated GTK UI |
| Snippet management | Visual GUI | YAML files | GUI + Python scripts |
| Tray controls & autostart | Yes | Yes | Yes |
4. What FlitKey does on Wayland
FlitKey inspects $WAYLAND_DISPLAY and $XDG_SESSION_TYPE at startup and selects its input backend accordingly. On a Wayland session it does not pretend typed triggers work — it switches to picker mode:
- Searchable picker — open the snippet window, fuzzy-search your library, and the selected snippet is placed on the clipboard via
QClipboardfor you to paste. Dynamic placeholders such as{{date}}and{{clipboard}}are resolved before the copy. - Tray controls and autostart work normally on Wayland.
- No root, no elevated privileges, and no security workarounds are required or requested.
This is a genuine workflow, but it is a different one: two keystrokes and a search instead of an inline trigger. If inline typed triggers are essential to you, an X11 session is currently the only option on Linux — with any tool.
5. Honest recommendation
- You are on X11 — any of these tools will work. Pick on the merits of the interface: FlitKey for a visual GUI, Espanso if you prefer YAML and version-controlled config.
- You are on Wayland and want a visual snippet library — FlitKey's picker is designed for exactly this case.
- You are on Wayland and need inline typed triggers — no tool can deliver that today. Switch your session to X11, or adapt to a picker workflow.
6. Installing FlitKey on Linux
# Debian / Ubuntu / Mint / Pop!_OS
wget https://github.com/swarajnandedkar/FlitKey/releases/download/v0.4.0/flitkey_0.4.0_all.deb
sudo apt install ./flitkey_0.4.0_all.deb
flitkey
Flatpak and AUR packages are in progress but not yet published. For other distributions, see running from source. FlitKey is free and MIT-licensed.
Related reading: FlitKey vs Espanso • How to import Espanso snippets • Documentation