The most customizable typing website with a minimalistic design and a ton of features. Test yourself in various modes, track your progress and improve your speed.
Find a file
Leonabcd123 9654ac505c
fix(test-timer): test timer doesn't stop right after a test ends (@Leonabcd123) (#7230)
### Description

In the current implementation, the time difference between `now` and
when we call `TestTimer.clear()` is high enough, so that if the test
duration is really close to a whole number (say `3.96`), then
`TestTimer` will continue to run up until the whole number, and will
push another wpm entry to `wpmHistory` and another raw entry to
`rawHistory`, causing the result chart to be messed up. This
implementation clears `TestTimer` right after calculating `now` to
hopefully allow for a smaller time difference between `now` and
`TestTimer`.

Also fixed some typos in comments.
2025-12-13 23:48:15 +01:00
.github refactor: begin transition away from jquery (@miodec, @fehmer) (#7185) 2025-12-10 20:34:37 +01:00
.husky chore: use pnpm on pre-push 2025-12-09 22:57:25 +01:00
backend chore: configure eslint/curly rule 2025-12-09 22:41:45 +01:00
docker chore: bump node version 2025-10-31 14:18:59 +01:00
docs refactor: begin transition away from jquery (@miodec, @fehmer) (#7185) 2025-12-10 20:34:37 +01:00
frontend fix(test-timer): test timer doesn't stop right after a test ends (@Leonabcd123) (#7230) 2025-12-13 23:48:15 +01:00
packages refactor: move configGroup to config-metadata (@fehmer) (#7222) 2025-12-12 10:18:15 +01:00
.dockerignore
.editorconfig
.eslintignore
.gitignore chore: make sure to use production env when building for production 2025-12-02 23:33:51 +01:00
.npmrc
.nvmrc chore: bump node version 2025-10-31 14:18:59 +01:00
.prettierignore
.prettierrc chore: remove oxc prettier plugin 2025-11-27 19:26:10 +01:00
commitlint.config.cjs
knip.json
LICENSE
monkeytype.code-workspace chore: prettier upgrade (@miodec) (#7159) 2025-11-27 00:20:09 +01:00
package.json chore: add script to deploy preview frontend 2025-12-10 14:35:22 +01:00
pnpm-lock.yaml build: combine vite config into a single file (@fehmer) (#7190) 2025-12-05 19:45:12 +01:00
pnpm-workspace.yaml
README.md
turbo.json
vitest.config.ts chore: prettier upgrade (@miodec) (#7159) 2025-11-27 00:20:09 +01:00


ChartJs Eslint Express Firebase Fontawesome HTML5 JQuery MongoDB OXLint PNPM Redis SASS TsRest Turborepo TypeScript Vite Vitest Zod

About

Monkeytype is a minimalistic and customizable typing test. It features many test modes, an account system to save your typing speed history, and user-configurable features such as themes, sounds, a smooth caret, and more. Monkeytype attempts to emulate a natural typing experience during a typing test by unobtrusively presenting the text prompts and displaying typed characters in place, providing straightforward, real-time feedback on typos, speed, and accuracy.

Features

  • minimalistic design, with optional advertisements and focus mode while typing
  • type what you see, see what you type
  • live errors, wpm, and accuracy displays
  • a variety of test lengths and languages
  • punctuation and numbers modes
  • quotes
  • themes
  • smooth caret
  • account system
  • challenges and just-for-fun test modifiers
  • and much more

Discord bot

On the Monkeytype Discord server, we added a Discord bot to auto-assign optional roles based on typing performance and challenge completion. You can find its code over at https://github.com/monkeytypegame/monkeytype-bot.

Bug report or Feature request

If you encounter a bug or have a feature request, send us an email, create an issue, create a discussion thread, or join the Discord server.

Want to Contribute?

Refer to CONTRIBUTING.md.

Code of Conduct

Before contributing to this repository, please read the code of conduct.

Security

To report a security vulnerability, please refer to SECURITY.md.

Credits

Montydrei for the name suggestion.

Everyone who provided valuable feedback on the original Reddit post for the prototype of this website.

All of the contributors have helped implement various features, add themes, fix bugs, and more.

Support

If you wish to support further development and feel extra awesome, you can donate, become a Patron or buy a t-shirt.