Skip to content

Repository files navigation

Keyism Logo

Keyism

You spent $400 on custom keycaps and lube. Your switches still chatter.


zero-spyware keyboard telemetry

Most keyboard test tools are either bloated 600MB Electron trash heaps or web pages that lie to your face about browser event latency. Keyism exists because humans are incapable of writing lightweight desktop software.

Built on Tauri 2 and vanilla TypeScript. Keys are intercepted directly via Win32 Raw Input (WM_INPUT) with RIDEV_INPUTSINK. No low-level global hooks (WH_KEYBOARD_LL). Keyism continues tracking keypresses, timing, and chatter metrics seamlessly in the background while you type or game in other applications.

Readouts

Stop guessing whether your custom build is broken. Here is actual physical reality:

Metric What it exposes
LAST Legend of the last physical key event.
CODE Virtual key code and Set 1 scan code, complete with E0 / E1 prefix inspection.
HOLD True make-to-break duration of the last released switch.
GAP Delta between the last two switch activations.
UI Native event callback to paint pipeline latency. Not fake hardware marketing claims.
NKRO Live depressed keys vs. your maximum session rollover peak.
CHATTER Makes within 15 ms of break, or orphan makes. Proof that your switch leaf is failing.

ANSI (104) and ISO (105) progress tracking counts unique caps pressed this session. Test every single switch before you blame your video game losses on latency.

Analytics

Opt-in typing analytics. Off until you turn it on, and it never leaves your machine — no account, no telemetry endpoint, no "anonymised" upload that isn't. Keyism has no networking code at all.

Hit Analytics in the title bar for nine tabs of it: overview, speed, words, keys, accuracy, timing, heatmaps, fun, and records. Session, today, 7 days, 30 days, lifetime.

What gets stored

Counters and frequency tables in %APPDATA%\com.keyism.app\stats.json. That is the entire storage layer.

Stored Never stored
Counters: keystrokes, characters, words, backspaces, active time. Raw text. Not a sentence, not a line, not a paste.
Single words, lowercased, with a count and a typing duration. Anything longer than a three-word combination.
Two- and three-word combinations, for the phrases you actually repeat. Window titles, URLs, file paths, clipboard contents.
Per-character and per-key-id frequencies, hold times, transitions. Which application any individual keystroke came from.
Per-hour and per-day rollups so the graphs have an x-axis. Timestamps of individual keystrokes.

Three-word combinations are the deepest text-shaped thing in the file, they are capped, and Clear history deletes the file outright.

How words get counted without keeping your text

Letters land in a buffer no longer than 64 characters. A space, punctuation mark, Enter, or Tab confirms it: the token increments its counters and the buffer is cleared on the same line. Caret movement, an idle pause, an application switch, or anything oversized clears the buffer without counting it.

Nothing survives a boundary. There is no code path that appends one confirmed token to another, which is why a fourth consecutive word cannot appear in the file no matter what you type. The test suite asserts exactly that.

The limitation nobody else admits

Keyism cannot tell that you are typing into a password field. Raw Input reports scan codes from a device; it has no idea which control has focus. Any tool claiming otherwise on Windows is either wrong or dragging in UI Automation, and we are not doing that to your CPU.

So there is no field-level exclusion and no per-website exclusion. What you get instead:

  • Per-application exclusion, enforced in Rust on the keystroke path. Excluded applications never produce a character in the first place — the filter runs before translation, not before display. Nine credential managers are blocklisted by default.
  • Pause, from the tray or the dashboard. Pausing also forgets the in-flight session.
  • Analytics off, which is the state you start in.

Read that as: this is a good typing-habits tool and a bad secret keeper. Exclude your password manager, pause before you log into your bank, and do not pretend a keystroke counter is a security product.

Tray

Closing the window hides it to the system tray so background tracking survives, because a typing tracker that stops when you close the window is a screenshot. The tray tooltip states which of the three states you are actually in — tracking, paused, or analytics off — so "is it recording?" is never a guess.

Left-click the tray icon to bring the window back. Quit Keyism in the tray menu flushes to disk and exits for real. Optional autostart writes one HKCU\...\CurrentVersion\Run value and is off by default.

Setup

We kept this idiot-proof because history proves you need it.

# install dependencies
npm install

# launch the lab
npm run tauri dev

Set KEYISM_TRACE=1 if you want every raw input event dumped to your console.

Verification

Run the test suite. If it fails on your machine, the problem is between your chair and your keyboard.

npm test                                        # session model & board geometry
cargo test --manifest-path src-tauri/Cargo.toml # scan code matrix

About

Keyboard testing and analytics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages