# Smassh: terminal typing test with MonkeyType-style modes and configurable failure thresholds

> Smassh is a Python TUI application that brings MonkeyType-style typing tests to the terminal. It installs via pip and requires Nerd Fonts for the icons to render correctly.

**kraanzu/smassh** — Smassh your Keyboard, TUI Edition

- Repository: https://github.com/kraanzu/smassh
- Stars: 2,055 · Forks: 72
- Language: Python
- License: GPL-3.0
- Published: 2026-10-11 · Updated: 2026-10-11 · Language: en
- Canonical page: https://hysenlabs.com/projects/kraanzu-smassh

## MonkeyType runs in a browser; smassh takes the same concept offline into the terminal

MonkeyType is a browser-based typing test with a large user base and a cloud account system. Smassh takes the core concept, including the real-time speed comparison and the configurable test modes, and puts it in a terminal application that runs without a browser, without an account and without a network connection by default.

The project description calls it a TUI typing test inspired by MonkeyType. The README credits @miodec as the MonkeyType creator. The intent is not a minimal clone but a full-featured terminal version that matches MonkeyType's visual quality by using the Textual framework.

## Textual, Python 3.9 minimum and a requests dependency that the README does not explain

Smassh is built on Textual (>=3.2.0), the Python TUI framework that handles widget layout, theming and keyboard input. The pyproject.toml sets a minimum Python version of 3.9 and lists four runtime dependencies: textual, click, requests and platformdirs.

Click provides the entry point wired up in pyproject.toml as `smassh = "smassh.__main__:main"`, and platformdirs resolves cross-platform paths for storing settings and data. Requests is present in the dependency list but the README does not document what network operations smassh performs, leaving the reason for that dependency undocumented. Version 3.2.1 was tagged on 2025-11-15 with the note "Custom themes!", which matches the theme support listed in the features section.

## pip, AUR or prebuilt binary: three install methods and the Nerd Fonts prerequisite

Three install methods are documented. The pip route installs the stable version from PyPI:

```bash
pip install smassh
```

For Arch Linux users, the AUR package is an alternative:

```bash
yay -S smassh-bin
```

Prebuilt binaries for Linux, macOS and Windows are linked from the GitHub project page. A NOTE block in the README states that after downloading, a smassh executable will be added to the path if the local bin directory is in $PATH. The README also recommends pipx as an alternative to pip for isolated installs.

Before running any of these, install Nerd Fonts in the terminal emulator. Smassh does not bundle or install them; the package only installs its own Python dependencies. Without Nerd Fonts already present, the icons in the interface appear as unrecognizable glyphs from the first launch. Nerd Fonts are available at nerdfonts.com and need to be installed separately in whichever terminal emulator smassh will run inside.

## Words mode, Time mode and the real-time speed caret that both modes share

The two test modes serve different goals. Words mode ends when the typist finishes a given word list. Time mode ends when the clock runs out. Both present a real-time speed caret: a second moving cursor that reflects the current typing speed so the typist can see how they track against their own pace as the test runs.

Language support lets users switch the word set to something other than English. Custom theme support arrived with v3.2.1, which means color schemes and visual styles can be changed in addition to the functional tweaks. Settings take effect on the fly without restarting.

Tab Reset is the most direct control: pressing Tab during a test restarts it. This is one of the eleven toggles in the tweaks panel.

## Min Accuracy and Min Burst measure different scopes; a typist can pass one and fail the other

Two tweaks in the table set failure conditions based on accuracy, and they operate at different scopes. Min Accuracy compares the typist's overall accuracy for the whole test against a configured floor. Min Burst compares accuracy at the word level: a single word typed below the threshold triggers an immediate failure, even if overall accuracy is above the Min Accuracy floor.

The practical consequence is that a typist with consistent but imperfect accuracy across an entire test can pass Min Accuracy while failing Min Burst on one outlier word. Anyone calibrating difficulty settings should set both independently rather than treating them as equivalent controls.

Min Speed is a third threshold, ending the test when typing speed drops below the configured value. All three work alongside the mode (Words or Time) rather than replacing it.

## Blind mode, Confidence mode and Force Correct as three graduated difficulty layers

Three of the eleven tweaks remove feedback or correction options, and each operates on a different mechanism.

Blind mode hides error state: the typist cannot tell from the display whether a character was wrong. Confidence mode removes the ability to backspace: any character entered stays. Force Correct blocks forward progress: the next character cannot be entered until the current mistake is fixed. The three target different aspects of typing habit. Blind mode targets awareness, Confidence mode targets hesitation, and Force Correct targets the tendency to skip past errors.

These can be enabled alongside Min Accuracy and Min Burst thresholds. The tweaks table documents each as an independent toggle; the README gives no information about which combinations the interface allows or prevents.

Capital Letters introduces randomized capitalization into the word set, and Difficulty adjusts how strictly wrong keypresses are counted, though the scale of the Difficulty setting has no numeric documentation in the README.

## Cursor Buddy tracks a target speed alongside the typist; the caret style is also configurable

The Cursor Buddy tweak adds a second cursor that moves at a preset target speed. The typist sees their own caret alongside the Buddy and can compare position in real time. The README describes it as "Setup your cursor buddy to run along with you!" without specifying the unit for the target speed.

Caret Style is a separate tweak that changes the visual style of the input cursor itself. The README notes that "Caret style matters!" as the description but gives no list of available styles.

Smassh has no built-in account system, no leaderboard and no mechanism for syncing results across machines. Local storage via platformdirs keeps settings and results on the machine where smassh runs. For users who track their typing progress over time and want historical data accessible from different systems, that absence is the main limitation compared to the browser-based MonkeyType.

## Conclusion

Smassh is the right choice for anyone who wants a typing test that runs offline in the terminal and avoids the distraction of a browser window. Users who depend on MonkeyType's account system and cloud-synced results have no equivalent in smassh; the app stores settings and data locally through platformdirs but has no login or sync feature. Before running smassh for the first time, confirm that Nerd Fonts are installed in the terminal emulator in use. The README carries a [CAUTION] block warning that without them the interface shows gibberish icons instead of the intended glyphs.

## FAQ

### What is Smassh?

Smassh is a Python TUI application that runs a typing speed test in the terminal. It is inspired by MonkeyType, the browser-based typing test, and offers Words and Time modes with real-time speed caret comparison.

### How do I install Smassh?

Run pip install smassh to get the stable version from PyPI. Arch Linux users can use yay -S smassh-bin from the AUR. Prebuilt binaries for Linux, macOS and Windows are also available from the GitHub project page.

### Does Smassh require Nerd Fonts?

Yes. The README carries a [CAUTION] block stating that without Nerd Fonts installed in the terminal emulator, the interface shows random gibberish icons. Install Nerd Fonts from nerdfonts.com before running smassh.

### What Python version does Smassh require?

Smassh requires Python 3.9 or later, as specified in pyproject.toml.

### Does Smassh work on Windows?

The releases section provides binary downloads for Linux, macOS and Windows. The pip install method also works on any platform where Python 3.9 or later is available.

## Sources

- [Issues](https://github.com/kraanzu/smassh/issues)
- [kraanzu/smassh on GitHub](https://github.com/kraanzu/smassh)
- [License: GPL-3.0](https://github.com/kraanzu/smassh/blob/main/LICENSE)
- [README](https://github.com/kraanzu/smassh/blob/main/README.md)
- [Releases](https://github.com/kraanzu/smassh/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/kraanzu-smassh
