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
Justiniscoding 4da82d0f2b
feat: create new sPoNgEcAsE and modify raNDOmcASe to be random (@Justiniscoding) (#7295)
### Description

The old rAnDoMcAsE mode was not actually random and more accurately
reflected [sponge case](https://en.wikipedia.org/wiki/Alternating_caps).
I modified the old rAnDoMcAsE mode and turned it into raNDOmcASe, where
it calls `Math.random()` for every letter and bases the capitalization
of of it. The old code from rAnDoMcAsE was moved to a separate
sPoNgEcAsE funbox mode.

### Changes
- `rAnDoMcAsE` becomes `raNDOmcASe` and has a 50% chance to capitalize
every letter.
- `sPoNgEcAsE` is added as a funbox mode and contains the old
functionality of `rAnDoMcAsE`
- "i KINda LikE HoW inEFFICIeNt QwErtY Is." challenge is updated to use
the updated `raNDOmcASe` mode as well as a new title that is in proper
random case.

### Checks

- [x] Adding/modifying Typescript code?
  - [ ] I have used `qs`, `qsa` or `qsr` instead of JQuery selectors.
- [ ] Adding quotes?
- [ ] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
- [ ] Adding a language?
- Make sure to follow the [languages
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LANGUAGES.md)
  - [ ] Add language to `packages/schemas/src/languages.ts`
- [ ] Add language to exactly one group in
`frontend/src/ts/constants/languages.ts`
  - [ ] Add language json file to `frontend/static/languages` 
- [ ] Adding a theme?
- Make sure to follow the [themes
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/THEMES.md)
  - [ ] Add theme to `packages/schemas/src/themes.ts`
  - [ ] Add theme to `frontend/src/ts/constants/themes.ts`
  - [ ] Add theme css file to `frontend/static/themes`
- [ ] Add some screenshots of the theme, especially with different test
settings (colorful, flip colors) to your pull request
- [ ] Adding a layout?
- [ ] Make sure to follow the [layouts
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LAYOUTS.md)
  - [ ] Add layout to `packages/schemas/src/layouts.ts`
  - [ ] Add layout json file to `frontend/static/layouts` 
- [ ] Adding a font?
- Make sure to follow the [themes
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/FONTS.md)
  - [ ] Add font file  to `frontend/static/webfonts`
  - [ ] Add font to `packages/schemas/src/fonts.ts`
  - [ ] Add font to `frontend/src/ts/constants/fonts.ts`
- [ ] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [x] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org for more info)
- [x] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.

<!-- label(optional scope): pull request title (@your_github_username)
-->

<!-- I know I know they seem boring but please do them, they help us and
you will find out it also helps you.-->


<!-- the issue(s) your PR resolves if any (delete if that is not the
case) -->
<!-- please also reference any issues and or PRs related to your pull
request -->
<!-- Also remove it if you are not following any issues. -->

<!-- pro tip: you can mention an issue, PR, or discussion on GitHub by
referencing its hash number e.g:
[#1234](https://github.com/monkeytypegame/monkeytype/pull/1234) -->

<!-- pro tip: you can press . (dot or period) in the code tab of any
GitHub repo to get access to GitHub's VS Code web editor Enjoy! :) -->

---------

Co-authored-by: Miodec <jack@monkeytype.com>
2026-01-06 16:42:02 +01:00
.github chore: format files 2026-01-03 22:37:20 +01:00
.husky chore: use pnpm on pre-push 2025-12-09 22:57:25 +01:00
backend fix: tiny bug of using wrong port for creating app (@rizwanmustafa) (#7309) 2026-01-05 17:54:22 +01:00
docker chore: format files 2026-01-03 22:37:20 +01:00
docs chore: format files 2026-01-03 22:37:20 +01:00
frontend feat: create new sPoNgEcAsE and modify raNDOmcASe to be random (@Justiniscoding) (#7295) 2026-01-06 16:42:02 +01:00
packages feat: create new sPoNgEcAsE and modify raNDOmcASe to be random (@Justiniscoding) (#7295) 2026-01-06 16:42:02 +01:00
.dockerignore
.editorconfig
.gitignore chore: make sure to use production env when building for production 2025-12-02 23:33:51 +01:00
.npmrc chore: switch from npm to pnpm (#5690) 2024-07-30 22:36:19 +02:00
.nvmrc chore: bump node version 2025-10-31 14:18:59 +01:00
.oxfmtrc.json chore: ignore pnpm-lock 2025-12-20 11:05:27 +01:00
.oxlintrc.json chore: move main linting to oxlint (@miodec) (#7144) 2025-12-15 22:16:16 +01:00
.prettierrc.json chore: use oxfmt for formatting (@miodec) (#7187) 2025-12-15 16:53:50 +01:00
commitlint.config.cjs chore: remove gulp dependency (@NadAlaba) (#6889) 2025-08-20 20:10:41 +02:00
knip.json chore: move knip to project root (@fehmer) (#6842) 2025-08-07 15:00:43 +02:00
LICENSE
monkeytype.code-workspace chore: move main linting to oxlint (@miodec) (#7144) 2025-12-15 22:16:16 +01:00
package.json chore: upgrade oxc 2026-01-01 11:45:54 +01:00
pnpm-lock.yaml fix(friendlist): handle legacy pbs in friendlist frontend (show less details) (@wradion) (#7296) 2026-01-05 18:00:13 +01:00
pnpm-workspace.yaml chore: switch from npm to pnpm (#5690) 2024-07-30 22:36:19 +02:00
README.md docs(readme): shields link to their respective websites rather than to the images source (@matthew-wright07) (#6931) 2025-09-03 09:47:58 +02:00
turbo.json chore: move main linting to oxlint (@miodec) (#7144) 2025-12-15 22:16:16 +01:00
vitest.config.ts refactor: add currentTarget back to regular listeners, add childTarget to onChild listeners (@fehmer) (#7273) 2025-12-20 13:41:11 +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.