buddytype
v0.1.0
Published
A MonkeyType clone for the terminal — fast, interactive typing tests in your CLI
Downloads
101
Maintainers
Readme
BuddyType
A MonkeyType clone for the terminal. Fast, interactive typing tests right in your CLI.
Built with Ink (React for CLIs) + TypeScript.
Features
- Two modes: Time-based (15/30/60/120s) or word-count (10/25/50/100 words)
- 11 languages: English, Spanish, French, German, Italian, Portuguese + JavaScript, TypeScript, Python, Rust, Go
- 50+ themes: Dark, light, and all MonkeyType community themes
- Live stats: WPM, raw WPM, accuracy, and consistency updated in real time
- Score history: Saves your last 100 results locally
- Punctuation & numbers: Optional modifiers for harder tests
- Backspace support: Fix mistakes mid-word or go back to previous words
Install
Requires Node.js >= 20.
# Install globally from npm
npm install -g buddytype
# Then run it
buddytypeInstall from source
git clone https://github.com/BuddiesLabs/BuddyTypeCLI.git
cd BuddyTypeCLI
npm install
npm run build
npm linkNow buddytype is available globally in your terminal.
Development
# Run in dev mode (hot reload)
npm run dev
# Build for production
npm run build
# Run production build
npm start
# Run tests
npm test
# Run tests in watch mode
npm run test:watch
# Type-check
npm run lint
# Format code
npm run formatControls
| Key | Action |
|---|---|
| Start typing | Begin the test |
| Space | Next word |
| Backspace | Delete character / go back to previous word |
| Ctrl+Backspace | Clear current word |
| Tab | Restart test |
| Esc | Back to menu |
Menu navigation
| Key | Action |
|---|---|
| Up / k | Move up |
| Down / j | Move down |
| Left / Right | Change option |
| Enter | Start test |
| s | View scores |
Architecture
src/
├── engine/ Pure TypeScript logic (zero UI dependencies)
│ ├── timer.ts
│ ├── word-generator.ts
│ ├── input-processor.ts
│ └── stats-calculator.ts
├── hooks/ React hooks bridging engine → React state
├── components/ Reusable UI components
├── screens/ Full-screen views (menu, test, results, scores)
├── data/ Language word lists & theme data
├── config/ Settings & score persistence
└── types/ Shared TypeScript interfacesThe engine layer has zero React/Ink imports and is fully testable with plain vitest.
How WPM is calculated
Uses the MonkeyType formula:
- WPM (net): Only fully correct words count.
(correctWordChars / 5) / (seconds / 60) - Raw WPM: All typed characters.
(totalTypedChars / 5) / (seconds / 60) - Accuracy:
correctKeypresses / totalKeypresses * 100 - Consistency: MonkeyType's "kogasa" function mapping coefficient of variation to 0-100%
License
MIT
