Open source · MIT license

Show every
keystroke

A floating overlay that displays your keyboard input during screen recordings, tutorials, and live demos. Under 50MB. Multi-monitor. Fully themeable.

View on GitHub Build from source
main.rs — keykey
Press any key to try it — Ctrl+S, Shift+Tab, or just type

Built for people who
make tutorials

KeyKey sits in the corner of your screen and shows viewers what you're typing. No Electron. No Java. Just a native overlay that stays out of your way.

Two display modes

Text stream shows stacked key labels that fade out. Visual keyboard highlights keys on a rendered layout. Switch with a hotkey or from the tray menu.

Smart modifier handling

Filters incidental Shift taps during typing but catches intentional holds. Per-modifier overrides: always show, never show, combo only, or smart mode.

Multi-monitor

Follow the active window, follow the mouse, or pin to a corner. Re-queries monitor geometry on every focus change. DPI-aware positioning.

Full theme system

5 built-in presets. Every visual property is a CSS variable: fonts, colors, opacity, borders, shadows. Import and export themes as JSON.

Lightweight

Under 15MB installed. Under 50MB memory. Uses native WebView2 instead of bundling Chromium. Less than 1% CPU when idle, under 3% during continuous typing.

System tray + hotkeys

Launches to tray, starts capturing immediately. Optional global hotkeys with no hardcoded defaults, so nothing conflicts with your workflow.

How it works

Four stages from physical keypress to rendered overlay. The Rust backend handles capture and processing; the Svelte frontend handles display.

01

Capture

rdev installs a global keyboard hook. Every press and release is captured regardless of which window has focus.

Win32 hook
02

Process

Smart mode logic: modifier hold timing, combo detection (Ctrl+Shift+S), repeat compression (A x3).

Rust
03

Emit

Processed events sent to the frontend via Tauri IPC. Two channels: raw for visual keyboard, processed for text stream.

Tauri v2
04

Render

SvelteKit overlay renders keystrokes. Transparent, frameless, always-on-top, click-through window.

Svelte 5

Why another keystroke
visualizer?

Existing tools either bundle Electron or are stuck on legacy .NET frameworks. KeyKey uses Tauri for native performance with a modern frontend.

KeyViz

Electron + React
  • · ~200MB memory (bundled Chromium)
  • · Caches monitor layout at startup
  • · Basic color picker for theming
  • · Text stream mode only
  • · Basic modifier filtering
  • · No repeat compression

Carnac

.NET WPF
  • · ~30MB memory (.NET runtime)
  • · Single monitor only
  • · Minimal theme options
  • · Text stream mode only
  • · Show all or nothing for modifiers
  • · No combo detection

Build from source

terminal
# clone and build
git clone https://github.com/jamditis/keykey.git
cd keykey
npm install
npm run tauri build

# or run in dev mode
npm run tauri dev

Prerequisites

KeyKey builds on Windows 10/11. macOS support is planned. You need a Rust toolchain and Node.js to build from source.

  • Node.js 18 or later
  • Rust (stable toolchain)
  • Windows 10/11 with WebView2 runtime