TypingMeter is a one-minute typing speed test that helps you track your words-per-minute (WPM), accuracy, and percentile right in the browser. Try it online at the TypingMeter website.
- 1-minute typing drills. Start a timed test with a curated stream of random words, available in both English and Bahasa Indonesia vocabularies. The UI logic lives in core/presentation/index.js, while the word pools are defined in core/data/static/word.js.
- Real-time feedback. Words are highlighted as active, correct, or incorrect as you type, so you immediately see mistakes. This highlighting flow is handled in core/presentation/index.js.
- Detailed results. Each run calculates WPM, accuracy, percentile ranking, and per-word/per-keystroke statistics, computed by core/presentation/util/typing_test.js.
- Persistent history. Your last five results are saved to the browser's local storage and can be cleared from the UI when you want a fresh start, powered by core/presentation/index.js, core/data/web_storage/web_storage_dao.js, and core/domain/model/test_result.js.
This project is a static site that uses ES modules, so it needs to be served from a local web server.
- Clone the repository.
git clone https://github.com/deddyromnan/typingmeter.git cd typingmeter - Start a static server. Use any HTTP server you prefer, for example:
# Option A: Python 3 python3 -m http.server 8000 # Option B: npx serve (requires Node.js) npx serve .
- Open the app. Visit
http://localhost:8000(or the port you chose) in your browser.
- Choose a language from the dropdown.
- Start typing in the input box—the timer begins on your first keystroke.
- Press the space bar to submit each word. The app moves the highlight to the next word automatically.
- When the timer hits zero, review your results or restart the test to try again.
These interactions mirror the behaviour defined in core/presentation/index.js.
- Change the word pools. Add or edit word lists in
core/data/static/word.jsto adjust the prompts or include new languages. - Alter the test duration. Modify the
limitvalue incore/presentation/util/timer.jsto change how long each test runs. - Store more history. Update the
CAPACITYconstant incore/domain/model/test_result.jsif you want to keep more than five past results.
- Bootstrap 5 for layout and styles.
- Bootstrap Icons for UI icons.
- jQuery and Moment.js for DOM interactions and time formatting.
All external dependencies are loaded from CDNs in index.html.
This project is released under the MIT License.
