FlitKey Documentation

FlitKey is an open-source text expander for Linux and Windows. Create reusable snippets, trigger them by keyword or hotkey on supported sessions, or find them in the searchable picker.

Technical details

Specification Details
Language / Runtime Python 3.10+
GUI Framework PyQt6
Supported Platforms Linux (X11 & Wayland), Windows 10/11 (64-bit)
Linux System Dependencies python3-pyqt6, xdotool, xinput, x11-xserver-utils
Local Config Storage Linux: ~/.config/flitkey/config.json
Windows: %APPDATA%\flitkey\config.json
License MIT License (Open-Source)

Platform & Session Support Matrix

At startup, FlitKey checks whether it is running on Windows, X11, or Wayland and selects the matching input path:

Feature X11 Desktop Wayland Desktop Windows 10/11
Typed Keyword Expansion ✓ Supported ✗ Not available ✓ Supported
Global Hotkeys ✓ xdotool ✗ Not available ✓ Native Hooks
Search Picker Overlay ✓ Alt+Space ✓ Open from app or tray; copies to clipboard ✓ Alt+Space
System Tray Menu ✓ Native Tray ✓ StatusIcon ✓ Win Tray

Technical Architecture

FlitKey uses a PyQt6 interface with separate runtime backends for Windows, Linux X11, and Wayland. The backend is selected once at startup from the detected operating system and session. Snippets and settings are stored locally in config.json; no FlitKey-hosted account or synchronization service is involved.

On X11, the runtime uses xinput to observe keyboard events and xdotool to insert expansions. On Windows, it uses the Win32 keyboard-hook and input APIs. On Wayland, FlitKey disables typed triggers and global hotkeys and uses Quick Insert with clipboard paste.

Installing on Debian / Ubuntu (.deb)

For Debian, Ubuntu, Linux Mint, and Pop!_OS, install using the pre-built flitkey_0.6.0_all.deb package:

Terminal Command
# 1. Install system dependencies
sudo apt update
sudo apt install -y python3 python3-pyqt6 xdotool xinput x11-xserver-utils

# 2. Download and install FlitKey
sudo dpkg -i flitkey_0.6.0_all.deb
sudo apt-get install -f

# 3. Launch FlitKey
flitkey

Installing on Windows (10/11)

Download FlitKey-Setup-0.6.0-x64.exe and run the setup wizard. IT administrators can execute silent background deployments:

Command Prompt (Silent Installation)
FlitKey-Setup-0.6.0-x64.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART

Running from source

You can clone and run FlitKey directly from source using Python 3.10+:

Bash
git clone https://github.com/swarajnandedkar/FlitKey.git
cd FlitKey
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python3 run.py

Dynamic placeholders

Add placeholders to a snippet when the output needs a date, time, clipboard value, or cursor position:

Placeholder Token Function Description Output Sample
{{date}} Injects current local date (YYYY-MM-DD) 2026-07-24
{{time}} Injects current 24-hour time (HH:MM) 14:30
{{datetime}} Injects ISO date and time timestamp 2026-07-24 14:30
{{clipboard}} Injects current text clipboard contents Clipboard text
{{cursor}} Sets final cursor position after expansion Cursor moves to token location

Expansion Packs

Expansion packs are curated snippet collections bundled with FlitKey, so you can start with a working library instead of an empty one. Six packs ship with the app, totalling 46 snippets.

Pack Snippets Contents Sample Triggers
AI Chatbot & Prompt Engineering 10 Persona setup, code review, bug analysis, and summarisation prompts for ChatGPT, Claude, Gemini, and local LLMs :airole :aixplain :aibug
Developer & Engineering 10 Git workflows, conventional commits, Python and shell scaffolding, shebangs, Markdown, and Docker templates :gcm :glog :pydef
Artist, Designer & Creator 7 Colour palette specs, aspect ratio tables, Midjourney flags, UI handoff notes, asset delivery templates :palette :aspect :midprompt
Everyday Productivity & Symbols 7 Timestamps, verification stamps, emoji shortcodes, fancy bullets, and workflow symbols :stamp :iso :bullets
Customer Support & Sales 6 Canned greetings, bug-gathering forms, ticket resolutions, follow-ups, cold outreach, meeting notes :cshi :csbug :csfollowup
System Admin & DevOps 6 Linux and Windows diagnostics, cURL test templates, Kubernetes status triage :sysinfo :curljson :k8spods

Open the snippet manager, click Expansion Packs, tick one or more packs, and choose Load Selected Packs. Two rules govern what actually gets added:

  • Your triggers win. Packs are merged into your library, never over it. If a pack contains a trigger you already use, your existing snippet is kept and the pack's version is skipped. Loading the same pack twice adds nothing the second time.
  • OS filtering. Each snippet declares a platform (all, linux, or windows). With Filter snippets incompatible with current operating system enabled (the default), snippets for the other OS — PowerShell one-liners on Linux, for instance — are left out. Untick it to load everything regardless.

After loading, FlitKey reports how many new snippets were added. All of them are ordinary snippets from that point on: edit, disable, or delete them like any other.

A pack is a single JSON file. Drop one into the packs folder inside your config directory ~/.config/flitkey/packs/ on Linux, %APPDATA%\flitkey\packs\ on Windows — and it appears in the dialog alongside the built-in packs. A user pack whose pack_id matches a built-in one replaces it, which is how you customise a shipped pack.

my-pack.json
{
  "pack_id": "my-team",
  "name": "My Team Pack",
  "description": "Shared replies for the support rota.",
  "version": "1.0.0",
  "snippets": [
    {
      "label": "Git: Commit Message",
      "trigger_type": "keyword",
      "keyword": ":gcm",
      "expansion_text": "git commit -m \"{{clipboard}}\"",
      "platform": "all"
    }
  ]
}

Each snippet needs a label, an expansion_text, and either a keyword or a hotkey; entries missing any of those are skipped. trigger_type is keyword or hotkey, platform defaults to all, and enabled defaults to true. Expansions support the full placeholder set.

Importing Espanso & AutoHotkey Libraries

Migrate supported records with the Import button in the main snippet-manager toolbar. FlitKey does not provide a command-line importer.

Supported file shapes
Espanso: .yml or .yaml with static trigger/replace matches
AutoHotkey: .ahk with supported hotstring or hotkey lines
Tabular: .csv or .tsv with trigger/expansion or label/trigger/expansion
FlitKey: .json containing snippet objects

Import a copied sample first. Complex scripts, Espanso variables, forms, regular expressions, rich text, images, and application-specific rules are not feature-equivalent. See the Espanso migration guide for backup, verification, and rollback steps.

Troubleshooting & FAQs

Why aren't triggers expanding on Linux Wayland?

On Wayland sessions, FlitKey does not register global hotkeys or typed triggers. Open Quick Insert from the app or tray menu, choose a snippet, and paste the clipboard result into the target application.

Where is my snippet configuration file stored?

All snippets are stored in plain JSON format at ~/.config/flitkey/config.json on Linux and %APPDATA%\flitkey\config.json on Windows.

Does FlitKey send any data to external servers?

No. FlitKey is 100% offline and open-source. It contains zero network dependencies, telemetry trackers, or phone-home code.