No description
  • TypeScript 99.7%
  • JavaScript 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Mine13zoom cc9231becf Fix Windows CI build by moving esbuild options into config file.
PowerShell splits the inline banner shebang argument at spaces, causing esbuild to see multiple input files on win32-x64.
2026-08-02 22:35:28 +02:00
.github/workflows Add multi-arch CI and prep v0.1.1 for trusted npm publish. 2026-08-02 22:27:26 +02:00
data monkeytype clone for the terminal: all modes, 187 themes, 446 languages 2026-08-01 23:37:28 +02:00
scripts monkeytype clone for the terminal: all modes, 187 themes, 446 languages 2026-08-01 23:37:28 +02:00
src Add multi-arch CI and prep v0.1.1 for trusted npm publish. 2026-08-02 22:27:26 +02:00
.gitignore Prepare npm release as monkeytype with Node build and trusted publishing. 2026-08-02 22:13:08 +02:00
esbuild.config.mjs Fix Windows CI build by moving esbuild options into config file. 2026-08-02 22:35:28 +02:00
LICENSE Prepare npm release as monkeytype with Node build and trusted publishing. 2026-08-02 22:13:08 +02:00
package-lock.json Add multi-arch CI and prep v0.1.1 for trusted npm publish. 2026-08-02 22:27:26 +02:00
package.json Fix Windows CI build by moving esbuild options into config file. 2026-08-02 22:35:28 +02:00
README.md Add multi-arch CI and prep v0.1.1 for trusted npm publish. 2026-08-02 22:27:26 +02:00
tsconfig.json Prepare npm release as monkeytype with Node build and trusted publishing. 2026-08-02 22:13:08 +02:00

monkeytype

npx monkeytype

Disclaimer: This is an unofficial, community-made terminal typing test inspired by Monkeytype. It is not affiliated with, endorsed by, or maintained by the Monkeytype team. "Monkeytype" is a trademark of its respective owners. Themes, languages, quotes, and test logic are ported from the open-source monkeytypegame/monkeytype project for compatibility.

A Monkeytype-style typing test for the terminal. Truecolor themes, raw ANSI, Node 18+.

Note: The npm sidebar always shows npm i monkeytype. That only installs the package — use npx monkeytype (above) to run it.

Install & run

npx monkeytype
# or
bunx monkeytype

Requires Node.js 18 or newer. After a global install (npm i -g monkeytype), run monkeytype directly.

CLI flags

monkeytype --mode time --time 60 --theme dracula --punctuation --numbers
monkeytype --list-themes
monkeytype --list-languages

Flags override your saved config (and become the new saved defaults).

Config is stored at ~/.config/monkeytype/config.json (mode 0600).

Features

  • All 187 official themes (serika_dark, dracula, catppuccin, 8008, …) rendered in truecolor
  • All test modes: time (15/30/60/120/custom), words (10/25/50/100/custom), quote (short/medium/long/thicc/all), zen, custom (with word/time limits)
  • 446 language word lists and 87 quote languages from the official data
  • Punctuation & numbers modes, following monkeytype's words-generator.ts rules
  • Monkeytype-accurate stats: wpm, raw wpm, accuracy, consistency (kogasa formula), char stats (correct/incorrect/extra/missed)
  • Results screen with a per-second wpm sparkline chart
  • Official account sync using Monkeytype's Firebase Bearer auth and POST /results
  • Mouse support: click test modes, values, toggles, languages, settings rows, picker items and result actions; scroll picker lists with the wheel
  • Searchable pickers for themes/languages

Keys

key action
type take the test
tab restart test
esc settings menu (theme / language / mode / …)
enter next test (on results) / finish (in zen)
backspace correct mistakes (can return to an incorrect previous word)
ctrl+backspace delete word
mouse click choose modes/values, toggle punctuation/numbers, open settings, select picker entries, start next test
mouse wheel scroll settings and picker lists
ctrl+c quit

In pickers: type to filter, / or the wheel to move, enter or click to select.

Official account sync

  1. Open settings with esc or by clicking a configurable item.
  2. Select/click account.
  3. Enter your Monkeytype account email and password.
  4. The password is used once for Firebase sign-in and is never stored.
  5. Only the Firebase refresh token is stored in the config file, which is forced to mode 0600.
  6. Finished valid tests are submitted to https://api.monkeytype.com/results; save/PB/XP status appears on the results screen.

Ape Keys cannot be used for saving: the official backend accepts them for reading results but explicitly does not enable them on POST /results. Email/password accounts are supported now; Google/GitHub-only accounts need an email/password login configured on the same Firebase account.

Development

git clone https://github.com/mine-13-zoom/monkeytype.git
cd monkeytype
npm install
npm run build
npm start

Source hacking with Bun (optional):

bun run src/index.ts

Project layout

src/
  index.ts      entry, CLI flags
  term.ts       raw-mode input parsing + ANSI helpers
  theme.ts      187 themes (extracted from monkeytype's themes.ts)
  data.ts       language word lists + quotes loading
  config.ts     persistent user config
  generator.ts  word/quote generation (port of words-generator.ts)
  engine.ts     test state machine + stats (port of test-logic.ts math)
  ui.ts         screens: test, settings menu, pickers, results
data/           themes.json, languages/, quotes/ (from monkeytype frontend/static)
scripts/        extract-themes.ts (re-extract themes from a monkeytype checkout)

Roadmap

  • Google/GitHub browser OAuth login
  • Kitty keyboard-protocol key-release timing for high-WPM anti-cheat key-duration data
  • funbox modes, custom themes, tape mode

License

MIT — see LICENSE.