A lightweight macOS menu bar app that tracks mouse movements, clicks, and keyboard usage with beautiful visualizations.
Download the latest release — signed and notarized for macOS.
- Download
InputMetrics-vX.X.X.zipfrom the latest release - Extract the ZIP and drag
InputMetrics.appto/Applications - Launch the app — it appears in your menu bar
- Grant Accessibility and Input Monitoring permissions when prompted
- Mouse Tracking: Distance traveled, click counter, heatmap visualization
- Keyboard Tracking: Keystroke counts, per-key frequency, keyboard heatmap
- Charts: Week/Month/Year time-series visualizations
- Scroll Tracking: Vertical and horizontal scroll distance
- Active Time: Daily first/last activity timestamps, idle detection
- App Usage: Per-application input breakdown
- Goals: Daily keystroke and distance goals with streak tracking
- Fun Comparisons: Distance as % to the moon and around Earth
- Privacy-First: No keystroke sequences stored, all data stays local
- Settings: Launch at login, CSV/JSON export, database backup/restore
| Layer | Technology |
|---|---|
| Language | Swift 6 |
| UI | SwiftUI with AppKit bridging |
| Charts | Swift Charts |
| Event Capture | CGEventTap (listen-only) |
| Database | SQLite via GRDB.swift |
| Login Item | SMAppService (ServiceManagement) |
| Architecture | MVVM with @Observable ViewModels |
| Minimum macOS | 15.0 (Sequoia) |
- macOS 15.0 (Sequoia) or later
- Xcode 16.0 or later
- Clone the repository
- Open
InputMetrics/InputMetrics.xcodeprojin Xcode - Build and run (⌘R)
- Grant Accessibility and Input Monitoring permissions when prompted
Releases are automated via GitHub Actions:
- CI: Every push to
mainruns build + test - Auto-tag: After CI passes on
main, a semver tag is created from conventional commits (feat:= minor,fix:= patch) - Release: When a GitHub Release is published from a tag, the release workflow builds a signed and Apple-notarized
.app, packages it as a ZIP, and uploads it as a release asset
- Date navigation to browse past days/weeks/months
- Week/Month/Year chart range picker
- Heatmaps and stats for any selected date
- WidgetKit extension with Small, Medium, and Large sizes
- Small: today's keystrokes + clicks
- Medium: today's stats + mini 7-day bar chart
- Shared App Group container for DB access between app and widget