Skip to main content
Thank you for your interest in contributing to TypeSteps! This guide will help you get started.

Code of Conduct

Be respectful, professional, and constructive. TypeSteps is a community project focused on privacy and user experience.

Ways to Contribute

Report Issues

Found a bug or have a feature request? Open an issue on GitHub:
  1. Check existing issues to avoid duplicates
  2. Use descriptive titles
  3. Include:
    • macOS version
    • Xcode version (if building from source)
    • Steps to reproduce
    • Expected vs actual behavior
    • Screenshots if applicable

Submit Pull Requests

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/your-feature-name
  3. Make your changes following our code standards
  4. Test thoroughly
  5. Commit with clear messages
  6. Push to your fork
  7. Open a pull request

Code Standards

Swift Style

Follow Swift best practices:

Naming Conventions

  • Classes/Structs: PascalCase (StorageManager, KeystrokeListener)
  • Functions/Variables: camelCase (incrementCount, isAuthorized)
  • Constants: camelCase with descriptive names (statsKey, hourlyKey)
  • Published properties: camelCase (dailyStats, isPaused)

SwiftUI Patterns

Use StateObject for singletons:
Use AppStorage for persisted settings:
Keep views lightweight:

Documentation

Add comments for complex logic:
Document public APIs:

File Organization

Keep related code together:

Architecture Principles

Separation of Concerns

  • Models: Data structures only
  • Managers: Business logic and state
  • Views: UI rendering and user interaction

Single Responsibility

Each class should have one clear purpose:
  • KeystrokeListener: Monitor keyboard events
  • StorageManager: Persist and retrieve data
  • WakaTimeManager: WakaTime API integration

Observable Pattern

Use @Published for reactive state updates:

Testing

Manual Testing Checklist

Before submitting a PR:
  • App builds without warnings
  • Onboarding flow works for new users
  • Keystroke counting is accurate
  • Menu bar displays correct stats
  • Dashboard charts render properly
  • Theme switching works
  • Pause/resume functions correctly
  • Data export/import works
  • App survives quit and relaunch

Test on Multiple macOS Versions

If possible, test on:
  • macOS 13 (Ventura) - minimum supported
  • macOS 14 (Sonoma)
  • macOS 15 (Sequoia)

Privacy Guidelines

NEVER:
  • Record actual keystrokes or text
  • Send data to external servers (except WakaTime if enabled)
  • Access user files without permission
  • Use analytics or tracking
ALWAYS:
  • Store data locally only
  • Use UserDefaults for simple data
  • Ask for explicit permission (Accessibility)
  • Document what data is collected

Performance Guidelines

Event Handler Efficiency

The keystroke handler runs on every key press:

Memory Management

Limit stored data:

Git Commit Messages

Write clear, descriptive commits:

Commit Message Format

Types:
  • feat: New feature
  • fix: Bug fix
  • refactor: Code restructuring
  • perf: Performance improvement
  • docs: Documentation
  • style: Formatting, no code change
  • test: Adding tests

Questions?

Not sure about something? Open a discussion on GitHub or comment on an existing issue. We’re here to help!