Repository navigation
Hibiki is a modern, highly customizable keystroke visualizer built in Rust with GTK4 and Layer Shell, designed specifically for Wayland compositors. It gives you a clean, aesthetic overlay for screencasts, presentations, or just for the love of mechanical keyboard sounds.
Highlights in 0.2.0
- Global hotkeys — control Hibiki from the keyboard on any compositor, with optional XDG Desktop Portal
GlobalShortcutssupport so the desktop owns the combos and stops forwarding them to the focused app. - Sounds as a standalone feature — play keystroke sounds with the visualizer hidden, fully independent from Keystroke/Bubble mode.
- Unify Words — fold consecutive characters into a single bubble (
c,l,e,a,r→clear) to cut down on clutter. - Configurable colors — theme the background and text of keys and bubbles, with full GTK-theme fallback.
- Daemon mode & richer CLI — toggles, pause, settings and launch, forwarded to a running instance over D-Bus.
- Custom Super-key icon — the built-in logo, an icon-theme symbolic/colored icon, or your own transparent PNG/WebP.
- Umbriel support and ongoing Hyprland/Sway work.
See the full changelog.
Key Features
- Wayland Native: Built with GTK4 and Layer Shell, so it works natively on modern compositors like Niri, Hyprland, and Sway — no X11 workarounds.
- Two Visual Modes:
- Keystroke: a classic, precise visualizer that shows every key press.
- Bubble: a sleek, minimal aesthetic mode inspired by devaslife.
- Mechanical Audio Engine: satisfying typing sounds with built-in support for Mechvibes sound packs and zero-latency playback on a dedicated thread.
- Deep Customization: granular typography (font family, weight, size), theming that respects your GTK theme, custom colors, and draggable overlays.
Supported Compositors
Hibiki automatically detects your environment:
| Compositor | Support Level | Notes |
|---|---|---|
| Niri | 🟢 Tested & Working | Fully supported layout detection and event handling. |
| Umbriel | 🟡 Experimental | IPC-based layout detection and event handling. |
| Hyprland | 🟡 Experimental | Implemented but needs community testing. |
| Sway | 🟡 Experimental | Implemented but needs community testing. |
| River/DWL | 🔴 Basic/None | Layout detection may fail; "Basic support" is minimal. |
Note: We especially need testers for Hyprland and Sway — please report issues!
Installation
Install script (prebuilt binary, recommended):
curl -fsSL https://raw.githubusercontent.com/linuxmobile/hibiki/main/install.sh | bashAppImage (self-contained — no system GTK or gtk4-layer-shell needed):
curl -fsSL https://raw.githubusercontent.com/linuxmobile/hibiki/main/install.sh | bash -s -- --appimageOr download hibiki-0.2.0-<arch>.AppImage from the assets below and chmod +x it.
Arch Linux:
cd packaging/arch
makepkg -si # hibiki (from source) or hibiki-bin (prebuilt)Cargo:
cargo install --git https://github.com/linuxmobile/hibikiNix:
nix run github:linuxmobile/hibikiAfter installing, add your user to the input group so Hibiki can read the keyboard devices (then log out and back in):
sudo usermod -aG input "$USER"Debian / Ubuntu: the prebuilt binary needs a system
gtk4-layer-shell, which is only packaged on Ubuntu 25.10+ and Debian 13+. On older releases (Ubuntu 24.04, Debian 12) use the AppImage above.
> This is an early release. We're actively looking for feedback, especially from Hyprland and Sway users!