keypop 0.1.0

Transparent keypress overlay for Linux screencasts and demos
keypop-0.1.0 is not a library.

keypop

A transparent keypress overlay for Linux. Shows your recent keypresses in a pill bar — great for screencasts, tutorials, and live demos.

Works on X11 and Wayland.

┌──────────────────────────────────┐
│                                  │
│           (your desktop)         │
│                                  │
│              ┌──────────────────┐│
│              │ Ctrl+C │ Tab │ V ││
│              └──────────────────┘│
│                     ▲            │
│              ════════════════════│
└──────────────────────────────────┘

Install

Make sure you have Rust installed, then:

cargo install --git https://github.com/YOUR_USERNAME/keypop

This builds a release binary and places it in ~/.cargo/bin/keypop.

System dependencies

# Ubuntu / Debian
sudo apt install libxkbcommon-dev libwayland-dev pkg-config

# Fedora
sudo dnf install libxkbcommon-devel wayland-devel

Permissions

keypop reads directly from /dev/input. Add yourself to the input group — no root required:

sudo usermod -aG input $USER
# log out and back in, then verify:
groups | grep input

Usage

Configure

Set your preferences interactively. Press Enter to keep the value shown in brackets:

keypop configure
keypop configuration
Press Enter to keep the value shown in [brackets].

  Font size [24]: 28
  Opacity (0.0–1.0) [0.75]:
  Display time in seconds (2, 3, or 5) [3]: 5
  Number of keys to show (1–5) [3]:

Saved to /home/user/.config/keypop/config.toml

Settings are saved to ~/.config/keypop/config.toml. Run keypop configure again at any time to update them.

Run

keypop run

Press Esc or Ctrl+C to quit.


Options

Setting Default Description
font_size 24 Key label font size in pixels
opacity 0.75 Bar opacity (0.0–1.0)
display_time 3 Seconds before overlay hides (2, 3, or 5)
keys 3 Number of recent keys to show (1–5)

Tiling WM notes

WM Config
Sway for_window [app_id="keypop"] floating enable, sticky enable
Hyprland windowrulev2 = float, class:^(keypop)$ + windowrulev2 = pin, class:^(keypop)$
i3 Requires a compositor (e.g. picom) for transparency
GNOME / KDE Works out of the box

License

MIT — see LICENSE