mrkeyoor.com_
Fri 02 Oct 23:48 UTC
Webevaluationupdated 02 Oct 2026

monkeytype review

Monkeytype is a browser typing test with configurable test lengths, languages, themes, sounds, live speed, and accuracy feedback. It also has accounts for saving results, leaderboards, challenges, quotes, and playful test modifiers, making it a complete typing product rather than a reusable typing component.

Verdict

Our Monkeytype checkout installed 2,305 packages and used 1,277 MB, then both build and test commands exited 1, so self-host it only if you want the full product rather than a light typing widget. The user experience is excellent at hiding the size of the system behind it. Contributors should match Node 24.11.0 before diagnosing our Node 22 result, but the supplied logs still leave two failed commands that need reproduction.

We ran it

Lab card: what happened when we ran monkeytypeScreenshot of monkeytype (monkeytype.com)
Install✓ · 61s2305 packages · 1277 MB
Build✗ · 15s
Tests✗ · 6s1 passed · 0 failed of 1 (vitest)
Repo2101 files~144,289 lines of source · 165.6 MB · 10 CI workflows

Answers from our run

Does monkeytype build from source?

Dependencies installed in 61 seconds (2305 packages), and the build failed. We cloned commit bcbf5c3 into a clean Debian container with 3 CPUs and no project-specific setup.

Do monkeytype's tests pass?

Yes: 1 of 1 passed when we ran the project's own test command (vitest). Some failures need services or credentials a bare container does not have.

Who should not use monkeytype?

Developers seeking a small typing widget or library: the measured checkout held 2,101 files, about 144,289 source lines, and installed 2,305 packages.

What are the alternatives to monkeytype?

typings, ttyper, toipe. Our Monkeytype checkout installed 2,305 packages and used 1,277 MB, then both build and test commands exited 1, so self-host it only if you want the full product rather than a light typing widget.

Setup2/51,277 MB install and failed build and test commands in our run
Docs4/5Detailed contributor setup, but the main README omits that effort
Community5/520,801 stars, an October 1 push, and current pull request activity
Maturity4/5A deep production app, though our fresh sandbox did not go green

Who it’s for

Developers who want to contribute to the same full typing product that runs at monkeytype.com.
Communities that need many languages, test modes, themes, accounts, and saved progress in one browser app.
TypeScript teams comfortable working in a pnpm and Turborepo monorepo.
Self-hosters prepared to operate Firebase authentication, MongoDB, Redis, a frontend, and a Node backend.

Who it’s NOT for

Developers seeking a small typing widget or library: the measured checkout held 2,101 files, about 144,289 source lines, and installed 2,305 packages.
Teams requiring a green fresh-container gate: both build and test commands exited 1 in our sandbox, even though the visible Vitest summary reported no failed assertion.
Backend contributors who do not want external services: the contribution guide requires MongoDB and Redis and uses Firebase for account authentication.
Projects pinned below Node 24.11.0 or unable to use pnpm 11.21.0: those are the documented contribution versions.
Organizations that cannot accept GPL-3.0 terms for their intended distribution or modification model.

Setup reality

Our sandbox installed commit bcbf5c3 with pnpm in 61 seconds, adding 2,305 packages and using 1,277 MB. The build failed after 15 seconds. The test step also exited 1 after 6 seconds, although the recorded Vitest summary said 1 passed and 0 failed out of 1.

The documented development target is Node 24.11.0 with pnpm 11.21.0, while our supplied lab image used Node 22. Accounts need a Firebase project and frontend config; backend account work can also need an Admin private key. MongoDB and Redis support user data, leaderboards, jobs, and OAuth state.

Frontend-only work can skip the databases. The full local stack exposes the frontend on port 3000 and backend on 5005, with Docker offered as an optional route. Our repository scan found 10 CI workflow files, monorepo workspaces, no Dockerfile, and no root tests directory.

The spare typing screen sits on a 144,289-line product

Monkeytype presents one task with unusual discipline: read the prompt and type. Live errors, words per minute, and accuracy stay near the text instead of turning the screen into a dashboard. You can change duration, word count, punctuation, numbers, language, quotes, caret behavior, sound, or theme. Focus mode strips away more interface. The result feels smaller than it is, which is a compliment to the product and a warning to anyone reading the repository as a weekend typing-test example.

The measured checkout contained about 144,289 lines of source across 2,101 files. Under the typing surface are accounts, saved history, leaderboards, challenges, custom themes, moderation, a Discord bot integration, and test modifiers. Release v26.32.0 alone included a delete-on-error mode alongside fixes for caret display, profile editing, custom fonts, result timing, keyboard layouts, and account activity. Forking Monkeytype means inheriting those product decisions as well as the attractive test screen.

Accounts require Firebase, MongoDB, and Redis

The advanced contribution guide separates frontend-only work from the full stack. You can work on the typing interface without databases. An account-capable installation is different: Firebase handles authentication, MongoDB stores user data, and Redis holds ephemeral data such as daily leaderboards, BullMQ jobs, and OAuth state. Backend Firebase work can require an Admin private key stored in the documented credentials directory.

Local development uses port 3000 for the website and 5005 for the backend. The guide recommends Docker as an optional way around operating-system differences, while the manual path expects the services to be running. Our scan found no Dockerfile in the repository, so do not infer a single root image from that recommendation. The supplied signals do show monorepo workspaces and 10 CI workflow files. This is a multi-service application with several build lanes.

What happened when we ran it

Our sandbox installed commit bcbf5c3 in 61 seconds using pnpm. It pulled 2,305 packages and occupied 1,277 MB on disk. The checkout itself was 165.6 MB. This ran in a fresh, unprivileged Debian container with 3 CPUs, 8 GB of RAM, no secrets, and the lab-node:22 image. Installation succeeded, so the dependency graph resolved under that environment.

The build failed after 15 seconds. Its tail shows 6 successful tasks out of 8, then a Vite resolveConfig stack and an @monkeytype/frontend#build failure. A backend lifecycle command also failed. The excerpt does not include the first error or a message naming a missing file, service, package, or variable. We can say the frontend build stopped and the overall monorepo build exited 1. Assigning a cause would go beyond the log.

The test step also exited 1 after 6 seconds. The recorded Vitest line says 1 test passed and 0 failed out of 1. Later summary lines show passing workspaces for contracts, funbox, schemas, and utilities, followed by lifecycle failures for the frontend and backend test jobs. The visible tail does not contain the underlying frontend or backend error, so passing assertions did not translate into a successful top-level command.

Node 24.11.0 is the documented target, not Node 22

Monkeytype currently tells contributors to use Node 24.11.0 LTS and pnpm 11.21.0. Our sandbox image used Node 22. That version mismatch is an important reproduction condition, but it is not proof of why the build or tests failed. The log excerpt never says the Node version is unsupported. The fair next check is to repeat commit bcbf5c3 on the documented toolchain and capture the first error from each command.

Setup has several smaller traps. Windows contributors are told to disable Git's automatic CRLF conversion before cloning. Firebase account support needs a local project mapping and a generated frontend config file. The backend reads ports and service settings from its own environment file. None of that is excessive for the live product Monkeytype has become, but it is much more work than cloning a static typing page and running one development command.

An October 1 push matters more than the August release tag

GitHub showed 20,801 stars and 271 combined issues and pull requests when checked on October 2, 2026. The repository's last push was October 1, and the recently updated queue included frontend fixes, accessibility work, quote additions, and a backend plus frontend leaderboard change. That activity shows continuing maintenance even though the latest tagged release, v26.32.0, was published on August 4.

The open count should not be read as 271 bugs because GitHub includes pull requests in that field. A project with this many modes, language assets, account flows, and contributors will also carry a busy queue. The more useful signal is that code and reviews were moving the day before our check. Monkeytype is active; our failed commands describe commit bcbf5c3 in one clean Node 22 sandbox, not an abandoned repository.

Choose Monkeytype when you need Monkeytype itself

Monkeytype makes sense for contributors who care about its particular experience or self-hosters who need the same broad feature set. It is a poor base for adding one typing box to another application. The 2,305-package install, 1,277 MB footprint, and three supporting services tell you where the boundary lies. For a local drill, use a terminal alternative. For the complete browser product, match the documented versions, reproduce the two failed commands, and keep the full stack.

Alternatives

ProjectWhat it isPick it when
typingsA smaller browser typing test centered on themes, languages, timed tests, and word counts.pick this instead when you want a simpler themed web test without Monkeytype's account and backend scope.
ttyperA Rust terminal typing test with packaged binaries, language lists, and configurable test content.pick this instead when local terminal practice matters more than accounts, leaderboards, or a browser UI.
toipeA compact Rust terminal typing tester that accepts built-in or custom word lists.pick this instead when you want an offline test with a small operational footprint and no web services.

What people are saying

  1. [velocity-scout] monkeytypegame/monkeytype

Sources

  1. Monkeytype repository
  2. Monkeytype README
  3. Monkeytype advanced contribution guide
  4. Monkeytype v26.32.0 release

More web reviews

Vela · noname · truanayangi · hit-and-run-web · RhineLabUI · ming-official-atlas · the whole board →