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
, andevdev
access
git clone https://github.com/CompEng0001/FerrisKeys.git
cd FerrisKeys
cargo run --release
Important
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
rustfmt
and useclippy
Licensed under the MIT License. See LICENSE
for details.
Developed by @CompEng0001