Skip to content
 
 

Repository files navigation

MonkeyType Extension

A modern Manifest V3 browser extension for reading the visible Monkeytype test, typing at a configurable WPM, practicing controlled corrections, and optionally starting the next test.

Chrome Extension Release License Stars

Animated MonkeyType Extension preview

MonkeyType Extension is a lightweight, local-only Chrome/Chromium extension wrapper for Monkeytype. It provides a polished popup for WPM, start delay, accuracy simulation, auto-restart, and a configurable start/stop keyboard shortcut. It does not collect credentials, send typed text to a server, or require Selenium, Python, or a separate driver.

Developer: Diwas Khatri
Project: github.com/DiwasKhatri07/monkeytype-extension

Responsible-use notice: Automating a typing test may violate the test website's terms or affect account results. Use this project only where automation is permitted. This extension intentionally does not include fingerprint spoofing, stealth, anti-detection, or bot-evasion features.

Features

  • Custom WPM: Set a typing speed from 10–400 WPM with a number field and slider.
  • Optional start delay: Leave time to switch Monkeytype modes before the run begins.
  • Accuracy practice: Enable correction simulation and choose 70–100% accuracy. The engine may type a wrong character, pause, press Backspace, and correct it.
  • Auto-restart: Wait for the result state, locate a visible restart control, and safely begin the next test only when a fresh test is detected.
  • Configurable shortcut: Click the shortcut field in the popup and press a modifier-based key combination to update the Chrome command.
  • Reliable stop behavior: Stop button and shortcut cancellation invalidate the active run, including delayed starts and auto-restart waits.
  • First-install credit: The first installation opens the developer GitHub profile, then the extension is ready to use.
  • Local-only operation: Settings are stored in chrome.storage.local; no remote API or login flow is included.
  • DOM-maintenance friendly: Page selectors are isolated in a small set of functions in content.js.

Install from the release

  1. Download MonkeyType-Extension-v1.0.0.zip from the latest release.
  2. Extract the ZIP into a normal folder. The extracted folder must directly contain manifest.json.
  3. Open chrome://extensions in Chrome or a Chromium-based browser.
  4. Turn on Developer mode.
  5. Click Load unpacked and select the extracted folder.
  6. Open Monkeytype, start a test, open the extension popup, and choose your settings.

After installing a new release, click Reload on the extension and refresh the Monkeytype tab. Chrome may keep an older content script in tabs that were already open.

Quick start

  1. Open a Monkeytype test and wait until words are visible.
  2. Set WPM and, if needed, a Start delay.
  3. Enable Practice mistakes only for correction-practice behavior.
  4. Adjust Accuracy if practice mistakes are enabled.
  5. Optionally enable Auto-restart.
  6. Press Start typing, or use the configured shortcut. The default is Ctrl+Shift+Y on Windows/Linux and Command+Shift+Y on macOS.
  7. Press Stop or the shortcut again to cancel.

How it works

flowchart LR
  A[Popup settings] --> B[chrome.storage.local]
  B --> C[Background service worker]
  C --> D[Active Monkeytype tab]
  D --> E[Read visible words]
  E --> F[Dispatch keyboard/input events]
  F --> G{Auto-restart?}
  G -- No --> H[Show finished status]
  G -- Yes --> I[Detect result screen]
  I --> J[Click visible restart control]
  J --> E
Loading

The content script reads the active and upcoming visible words from #words, finds the page input, and dispatches keyboard events with an input-event fallback. It stops when the run token is invalidated. Auto-restart is guarded by result detection, restart-button detection, and fresh-test detection so it does not blindly loop.

Updating for Monkeytype DOM changes

The page-specific selectors are deliberately isolated in content.js:

Function What to update
readVisibleText() Word container, word item, letter nodes, and active-word class
findInput() The active textarea, input, or contenteditable selector
resultVisible() Result-screen selectors
findRestartButton() Restart button selectors
waitForFreshTest() Fresh-test readiness conditions
fireKey() Keyboard and input event behavior

After changing selectors:

  1. Go to chrome://extensions.
  2. Click Reload for MonkeyType Extension.
  3. Refresh the Monkeytype tab.
  4. Test at a low WPM with Auto-restart disabled.
  5. Inspect the popup status before enabling Auto-restart.

See DOM maintenance guide for a focused checklist.

Project structure

.
├── manifest.json                 # MV3 metadata, permissions, command, popup
├── background.js                 # Global shortcut and first-install behavior
├── content.js                   # DOM reading, typing, stop, and restart engine
├── popup.html                   # Popup interface
├── popup.css                    # Popup visual system
├── popup.js                     # Settings, shortcut capture, and controls
├── assets/typing-preview.svg    # Animated README preview asset
├── docs/DOM-MAINTENANCE.md      # Selector update guide
├── LICENSE
└── MonkeyType-Extension-v1.0.0.zip

Permissions

Permission Reason
activeTab Communicate with the active Monkeytype tab after user interaction
scripting Inject the content script into an already-open tab when needed
storage Persist local settings and the selected shortcut
Monkeytype host permissions Limit page access to Monkeytype domains

No email, password, cookies, or typed text are transmitted by this project.

Development

No build step is required. Edit the source files, reload the unpacked extension from chrome://extensions, refresh the Monkeytype tab, and test. Basic syntax checks:

node --check popup.js
node --check content.js
node --check background.js
node -e 'JSON.parse(require("fs").readFileSync("manifest.json"))'

Release checklist

  • Run the syntax checks above.
  • Confirm manifest.json is at the ZIP root.
  • Test Start, Stop, the configured shortcut, delayed start, and Auto-restart.
  • Update the version in manifest.json.
  • Create a versioned ZIP and GitHub release asset.
  • Add release notes describing selector or behavior changes.

Credits

Created and maintained by Diwas Khatri. Inspired by the original OTAKUWeBer/MonkeyTypeBot project.

License

Licensed under the Apache License 2.0. See LICENSE.

About

Modern Manifest V3 MonkeyType browser extension with custom WPM, accuracy practice, hotkeys, and guarded auto-restart.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages