Skip to main content
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