Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/monkeytypegame/monkeytype/llms.txt

Use this file to discover all available pages before exploring further.

Monkeytype’s account system provides powerful features for tracking your typing progress, saving test results, and competing with others.

Creating an Account

Sign Up Process

1

Choose Authentication Method

  • Email and password
  • Google OAuth
  • GitHub OAuth
2

Complete Verification

  • Verify CAPTCHA challenge
  • Choose a unique username
  • Confirm email address (for email signup)
3

Start Typing

Your results are now automatically saved!
Usernames can be changed once every 30 days. Choose carefully!

Account Requirements

  • Unique username (checked in real-time)
  • Valid email address
  • Username cannot be on the blocklist
  • CAPTCHA verification required
Implementation: backend/src/api/controllers/user.ts:110-142

What Gets Saved

Test Results

Performance Data

Every completed test saves:
  • WPM (words per minute)
  • Raw WPM (including mistakes)
  • Accuracy percentage
  • Character statistics (correct/incorrect/extra/missed)
  • Test duration and AFK time
  • Consistency scores

Test Metadata

Additional information stored:
  • Test mode and configuration
  • Language used
  • Difficulty settings
  • Timestamp
  • Restart count
  • Active tags
  • Funbox modes used

Performance Charts

Detailed analytics:
  • WPM over time chart
  • Burst speed data (per-word speeds)
  • Error count progression
  • Key spacing and duration timing
  • Key overlap statistics

Personal Bests

PB tracking for:
  • Each mode (time/words/quote/custom)
  • Each mode configuration (15s, 30s, 60s, etc.)
  • Each language
  • Each difficulty setting
  • Tag-specific PBs

User Preferences

Your account stores all customization settings:
  • Theme selection and custom themes
  • All typing behavior preferences
  • Sound and visual settings
  • Keyboard layout and display options
  • Result filter presets
Implementation: backend/src/api/controllers/user.ts:535-628

Profile Features

Public Profile

Your profile can display:
Typing Stats:
  • Total tests completed
  • Total tests started
  • Total time typing
  • Average WPM
  • Personal bests for popular modes
Configuration: backend/src/api/controllers/user.ts:912-1009

Progress Tracking

Personal Bests System

Personal bests are tracked separately for:
  • Mode: time, words, quote, zen, custom
  • Mode2: specific duration/count (15, 30, 60, 10, 25, etc.)
  • Language: Each language has separate PBs
  • Difficulty: normal, expert, master
  • Punctuation: on/off
  • Numbers: on/off
  • Lazy mode: on/off
  • Funbox: Each funbox combination tracked separately
Retrieval: backend/src/api/controllers/user.ts:857-865
Access your typing statistics:
  • Tests started vs completed ratio
  • Total time spent typing
  • Average WPM across all tests
  • Consistency trends
  • Improvement over time
Implementation: backend/src/api/controllers/user.ts:867-872
Daily typing streak tracking:
  • Current active streak
  • Maximum streak achieved
  • Streak hour offset (configurable once)
  • Daily test activity requirement
Features:
  • Set your timezone offset
  • Maintain streak across timezones
  • Premium: detailed streak history
Implementation: backend/src/api/controllers/user.ts:1113-1135, 1286-1294

Test History

Result Management

Accessing Results:
  • View all past test results
  • Filter by mode, language, difficulty
  • Sort by date, WPM, accuracy
  • Search specific time periods
Result Details:
  • Full chart replay data
  • Keystroke timing analysis
  • Error patterns
  • Word-by-word breakdown
Limitations:
  • Chart data not stored for tests over 122 seconds (to save storage)
  • Key spacing and duration data also excluded for long tests

Organization Features

Tags System

Tag Features:
  • Create custom tags for organizing results
  • Activate tags before tests
  • Filter results by tag
  • Track tag-specific PBs
  • Edit tag names
  • Clear tag PBs independently
Use Cases:
  • Different keyboard setups
  • Practice focus areas
  • Time of day tracking
  • Mood or environment factors
Implementation: backend/src/api/controllers/user.ts:759-804

Result Filter Presets

Save Filter Combinations:
  • Create reusable filter presets
  • Quick access to specific result sets
  • Maximum presets per user (configurable)
Filter Options:
  • Mode and mode2
  • Language
  • Difficulty
  • Punctuation/Numbers
  • Date ranges
  • Tags
Implementation: backend/src/api/controllers/user.ts:731-757

Account Management

Profile Settings

Change Username:
  • Once every 30 days
  • Must be unique and available
  • Instant availability checking
  • Cannot use blocked names
Update Email:
  • Change email address
  • Re-verification required
  • Updates Firebase auth
Implementation: backend/src/api/controllers/user.ts:360-491

Social Features

Quotes System

Quote Interaction

Favorite Quotes:
  • Save favorite quotes
  • Quick access to saved quotes
  • Maximum favorites limit (configurable)
Rate Quotes:
  • Rate quotes after completion
  • Help improve the quote database
  • Report inappropriate quotes
Implementation: backend/src/api/controllers/user.ts:874-910

Friends System (Premium)

Friends List

Premium users can:
  • Add friends
  • View friends’ progress
  • Compare statistics
  • See online status
Implementation: backend/src/api/controllers/user.ts:1296-1310

Premium Features

Premium features may include:
  • Extended test activity history
  • Friends system access
  • Ad-free experience
  • Additional customization options
  • Priority support
Premium status is checked via: backend/src/api/controllers/user.ts:595

Data Privacy

What’s Stored

Personal Information:
  • Username
  • Email address
  • Password (hashed by Firebase)
  • Discord ID (if linked)
  • IP addresses (for security)
Typing Data:
  • All test results (unless result saving is disabled)
  • Configuration preferences
  • Custom themes
  • Tags and presets

What’s Not Stored

  • Actual typed text (only statistics)
  • Passwords (handled by Firebase Auth)
  • Payment information (handled by payment processor)

Data Access

  • Profile data is public by choice
  • Test results are private
  • Leaderboards show username and scores only
  • You control activity visibility

Leaderboards

Global Leaderboards:
  • Time mode: 15s and 60s
  • English language
  • All-time rankings
  • Daily leaderboards
Requirements:
  • Valid test (not too short, no AFK)
  • Not repeated test
  • Not opted out
  • Realistic WPM values
Leaderboard Memory:
  • Saves your rank for specific modes
  • Quick comparison to previous rank
  • Updated automatically
Implementation: backend/src/api/controllers/user.ts:806-815, 1146-1199

Inbox System

Features:
  • Receive system notifications
  • Achievement unlocks
  • Admin messages
  • Mark messages as read
  • Delete messages
Limits:
  • Maximum inbox size (configurable)
  • Unread count displayed
Implementation: backend/src/api/controllers/user.ts:1057-1083

Source Code References

  • User controller: backend/src/api/controllers/user.ts
  • Authentication: backend/src/utils/auth.ts
  • User data model: Referenced throughout user.ts
  • Firebase integration: frontend/src/ts/firebase.ts

Build docs developers (and LLMs) love