Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/FALAK097/typesteps/llms.txt

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

Your privacy is the foundation of TypeSteps. The app is designed to track typing activity without compromising your security or collecting sensitive information.

Core privacy principles

Local-only storage

All data is stored locally on your Mac using UserDefaults. Nothing is sent to external servers.

No character recording

TypeSteps never records what you type—only counts keystrokes.

No network activity

Zero network requests. The app functions entirely offline.

No analytics or telemetry

No usage tracking, crash reporting, or third-party analytics.

What gets stored

TypeSteps stores only aggregated, non-sensitive data in macOS UserDefaults:

Daily statistics

// From StorageManager.swift:7
private let statsKey = "typing_stats_daily"
Stores keystroke counts grouped by date (format: yyyy-MM-dd):
{
  "2026-03-03": 12450,
  "2026-03-02": 9823,
  "2026-03-01": 11204
}

Hourly statistics

// From StorageManager.swift:8
private let hourlyKey = "typing_stats_hourly"
Tracks activity by hour (format: yyyy-MM-dd-HH):
{
  "2026-03-03-09": 1450,
  "2026-03-03-10": 2103,
  "2026-03-03-11": 1876
}

Minute-level data

// From StorageManager.swift:9
private let minuteKey = "typing_stats_minute"
Stores recent activity at minute granularity, automatically pruned to the last 120 minutes:
Minute-level data is used for real-time density calculations with WakaTime integration. Older data is automatically deleted to minimize storage.

Application statistics

// From StorageManager.swift:10-12
private let appStatsKey = "typing_stats_apps"
private let projectStatsKey = "typing_stats_projects"  
private let appBundleMappingKey = "typing_app_bundles"
Tracks which apps you type in most, using only:
  • Application name (e.g., “Visual Studio Code”)
  • Bundle identifier (e.g., “com.microsoft.VSCode”)
  • Project name (when detectable from window title)
{
  "Visual Studio Code": 45230,
  "Xcode": 32104,
  "Slack": 8903
}
No window content, file names, or typed text is ever stored.

What is NOT stored

Typed content

The actual characters you type are never recorded, logged, or stored.

Passwords

All keystrokes are counted equally—TypeSteps cannot distinguish password fields.

File names

Only project names are extracted from window titles in supported IDEs.

URLs

Browser activity is tracked by app name only, not visited URLs.

Data persistence with UserDefaults

All statistics are stored using macOS UserDefaults, Apple’s built-in preference storage system:
// From StorageManager.swift:106-112
private func saveStats() {
    UserDefaults.standard.set(dailyStats, forKey: statsKey)
    UserDefaults.standard.set(hourlyStats, forKey: hourlyKey)
    UserDefaults.standard.set(minuteStats, forKey: minuteKey)
    UserDefaults.standard.set(appStats, forKey: appStatsKey)
    UserDefaults.standard.set(projectStats, forKey: projectStatsKey)
    UserDefaults.standard.set(appBundleMapping, forKey: appBundleMappingKey)
}
UserDefaults data is stored in your Mac’s Library folder at: ~/Library/Preferences/com.falakgala.typesteps.plist

WakaTime integration (optional)

If you choose to enable WakaTime integration:
  • Your API key is stored locally using @AppStorage
  • TypeSteps makes requests to WakaTime’s API to fetch your coding time
  • Only coding duration is retrieved—no keystroke data is sent to WakaTime
  • You can remove the API key at any time to disable integration
// From StorageManager.swift:15
@AppStorage("wakatime_api_key") var wakaTimeApiKey: String = ""

Data export and backup

You have full control over your data:

Export data

Export all statistics as a JSON file for backup or transfer:
// From StorageManager.swift:324-343
func exportData() -> Data? {
    let backup = BackupData(
        dailyStats: dailyStats,
        hourlyStats: hourlyStats,
        minuteStats: minuteStats,
        appStats: appStats,
        projectStats: projectStats,
        appBundleMapping: appBundleMapping,
        notifiedMilestones: notified,
        wakaTimeApiKey: wakaTimeApiKey,
        dailyGoal: goal
    )
    return try? encoder.encode(backup)
}

Import data

Restore from a previously exported JSON file:
  1. Click the data options button in the menu bar
  2. Select “Restore Data”
  3. Choose your backup JSON file
  4. All statistics and settings are restored

Reset data

Permanently erase all tracking data:
Resetting data is permanent and cannot be undone. Export a backup first if you want to preserve your statistics.
// From StorageManager.swift:365-391
func resetStats() {
    dailyStats = [:]
    hourlyStats = [:]
    minuteStats = [:]
    appStats = [:]
    projectStats = [:]
    appBundleMapping = [:]
    
    // Remove from UserDefaults
    UserDefaults.standard.removeObject(forKey: statsKey)
    UserDefaults.standard.removeObject(forKey: hourlyKey)
    // ... etc
}

Security considerations

Accessibility API

TypeSteps uses macOS Accessibility APIs responsibly—only to count keystrokes, not to read content.

Code transparency

The app is built with SwiftUI and all data handling is visible in the source code.

No third parties

Zero dependencies on analytics services, crash reporters, or ad networks.

Sandboxed storage

All data is stored within the app’s sandboxed container, isolated from other apps.

Open source transparency

TypeSteps’ source code is available for review, allowing you to verify:
  • Exactly what data is collected
  • How it’s stored and processed
  • That no network requests are made
  • Privacy claims are accurate
If you have privacy concerns or questions, you can inspect the source code directly to see how your data is handled.

Build docs developers (and LLMs) love