Skip to main content
TypeSteps stores all data locally using UserDefaults. No data is ever transmitted over the internet unless you opt-in to WakaTime integration.

UserDefaults Keys

All statistics are stored using these keys:
See StorageManager.swift:7-13

Additional Settings

Data Structures

Daily Statistics

Tracks total keystrokes per day:
Key format: "yyyy-MM-dd" (e.g., "2026-03-03") Example:
See StorageManager.swift:17

Hourly Statistics

Tracks keystrokes per hour:
Key format: "yyyy-MM-dd-HH" (e.g., "2026-03-03-14") Example:
See StorageManager.swift:18

Minute Statistics

Tracks keystrokes per minute (limited to last 120 minutes):
Key format: "yyyy-MM-dd-HH-mm" (e.g., "2026-03-03-14-30") The storage automatically prunes old data:
See StorageManager.swift:19,70-73

Application Statistics

Tracks keystrokes per application:
Key: Application name (e.g., "Xcode", "Visual Studio Code") Example:
See StorageManager.swift:20

Project Statistics

Tracks keystrokes per project (extracted from window titles):
Example:
See StorageManager.swift:21

App Bundle Mapping

Maps application names to bundle identifiers:
Example:
This mapping is used to:
  • Display app icons in the UI
  • Categorize applications
  • Ensure consistent tracking across app renames
See StorageManager.swift:22

Data Flow

Incrementing Counts

Every keystroke triggers this method:
See StorageManager.swift:55-77

Persisting Data

All statistics are persisted to UserDefaults:
See StorageManager.swift:106-113

Loading Data

Data is loaded on initialization:
See StorageManager.swift:46-53

Backup and Restore

BackupData Model

All data can be exported/imported using this structure:
See StorageManager.swift:394-404

Export Data

See StorageManager.swift:324-343

Import Data

See StorageManager.swift:345-363

Privacy Considerations

TypeSteps prioritizes privacy:
  1. No character recording: Only counts are stored, never actual keystrokes
  2. Local-only storage: All data stays on your Mac using UserDefaults
  3. No analytics: No telemetry or usage tracking
  4. Optional WakaTime: Internet connection only used if you enable WakaTime integration
The only personal data stored:
  • Keystroke counts per time period
  • Application names and bundle IDs
  • Project names (extracted from window titles)
  • WakaTime API key (optional, encrypted in keychain via @AppStorage)