FerrisKeys is a cross-platform input visualizer for Rustaceans. Designed for screencasts, live presentations, and teaching environments, it displays real-time keyboard and mouse input with clean, customizable overlays using egui via eframe.
- Keyboard visualisation with modifier grouping (Shift, Ctrl, etc.)
- Mouse click tracking with overlay icons
- Live theme reloading via
config.toml - Cross-platform: tested on Linux (X11/Wayland) and Windows
wayland is currently unsupported - Customizable: Fonts, icons, padding, opacity, display duration
Latests releases can be found on the releases page
- Rust (2021 edition or newer)
- A compatible Linux or Windows environment
- For Wayland input capture:
libinput,udev, andevdevaccess
git clone https://github.com/CompEng0001/FerrisKeys.git
cd FerrisKeys
cargo run --releaseImportant
Linux dependencies:
sudo apt install -y \
libxdo-dev \
libglib2.0-dev \
libpango1.0-dev \
libatk1.0-dev \
libgtk-3-dev \
libgdk-pixbuf-xlib-2.0-dev \
libcairo2-dev \
pkg-config \
build-essential
On first run, a config.toml will be generated in the $HOME/.config/ferriskeys/ or %APPDATA%\Roaming\ferriskeys\ directory.
You can view the source here -> default__config.rs
All avaiable fields are:
timeout_ms- time keys stay on screen once buffer is emptywindow- position/size of window and which monitor,normal- alphanumeric- numericmodifier- alt, shift etceditor- del, ins, backspace etcnavigation- up, down, left, rightscrollable- page up/down, home ,end, scroll locksymbols- !,",£,$, % , [ etcescape- escape keyunknown- unknown keys not mapped yet!function- F1 etcaltfunction- [fn + F1] etcmouse- left|right|middlespace- spacebar
[window]
monitor = 0
position = [2050.0, 500.0]
size = [800, 120]
[styles.normal]
width = 90.0
height = 90.0
icon_size = 0.0
text_size = 20.0
bg_color = "#1e1e30"
fg_color = "#ffffff"Changes are auto-reloaded on modification — no restart required.
Important
[window] monitor = 0
Is not implemented yet, but will be soon.
| OS | Path |
|---|---|
| Linux | ~/.config/ferriskeys/config.toml |
| Windows | %APPDATA%\Roaming\FerrisKeys\config.toml |
| OS | Input Backend | Status |
|---|---|---|
| Linux | evdev + libinput |
Working |
| Windows | winapi raw input |
Working |
| Raspbian (framebuffer) | n/a | Not supported |
| macOS | Planned | Not yet supported |
Warning
Wayland support is currently limited due to upstream issues in the
winit + glutin stack used by eframe.
- Screencasting and tutorial recording
- Live coding demonstrations
- Accessibility and interaction debugging
- Classroom and teaching support
We welcome contributions! Please:
- File issues for bugs or feature requests
- Submit PRs with descriptive titles
- Format code with
rustfmtand useclippy
Licensed under the MIT License. See LICENSE for details.
Developed by @CompEng0001
