A sleek, minimal macOS app + widget to track your daily progress on anything — LeetCode problems, reading, gym, projects, or whatever matters to you.
Built with SwiftUI and WidgetKit. Fully local, fully private, fully yours.
- Download the
.dmgfile from the link above - Open the
.dmgand drag Tracker into your Applications folder - Open Tracker from Launchpad or Spotlight
- Right-click your desktop → Edit Widgets → Search "Tracker" to add the widget
No Xcode needed. No developer account needed. Just download and run.
If you want to run it from source, customize it, or contribute:
- macOS 14.0 (Sonoma) or later
- Xcode 15.0 or later
- Apple Developer Account (free is fine for personal use)
-
Clone the repository
git clone https://github.com/vishwassinfinity/tracker.git cd tracker -
Open in Xcode
open Tracker.xcodeproj
-
Set up App Group
- Select Tracker target → Signing & Capabilities → App Groups
- Add your App Group (e.g.,
group.com.yourname.tracker) - Select TrackerWidget target → do the same with the same App Group
- Update
TrackerStore.swiftwith your App Group name:static let suiteName = "group.com.yourname.tracker"
-
Set your Team
- Select both targets → Signing & Capabilities → Team → Select your Apple Developer account
-
Build & Run
⌘R to run the app -
Add Widget to Desktop
- Right-click desktop → Edit Widgets
- Search "Tracker"
- Drag Small or Medium widget to your desktop
The files in Shared/ must be added to both targets. Verify in Xcode:
- Click each shared file
- Open File Inspector (⌘⌥1)
- Under Target Membership, ensure both are checked:
- ☑ Tracker
- ☑ TrackerWidget
- Track Anything — Create unlimited trackers with custom names, icons, and labels
- Custom Counters — Rename "Solved/Revised" to "Pages/Notes", "Tasks/Bugs", or whatever fits
- Single or Dual Counters — Use one counter or two per tracker
- Interactive Widget — Increment/decrement directly from your desktop widget
- Small & Medium Widgets — Choose the size that fits your workflow
- Widget Picker — Select up to 4 trackers to display on your widget
- Daily Auto-Rollover — Counts reset at midnight, yesterday's data is preserved
- Lifetime Stats — Total counts, daily averages, best day, streak tracking
- Weekly Bar Chart — Visual breakdown of your last 7 days
- 30-Day Heatmap — GitHub-style activity heatmap
- Full History — Every day's data is logged and browsable
- Edit Anytime — Change name, icon, labels even after creation
- 100% Local — All data stays on your Mac, no accounts, no internet needed
Track up to 4 items with interactive +/- buttons right on your desktop.
Compact view showing 2 trackers at a glance.
Select which trackers appear on your widget (up to 4).
Full breakdown with today's counters, yesterday's stats, weekly chart, lifetime stats, and 30-day heatmap.
Pick an icon, name your tracker, customize counter labels, choose single or dual counter mode.
| Component | Technology |
|---|---|
| UI Framework | SwiftUI |
| Widget | WidgetKit |
| Interactive Widget | AppIntents |
| Data Storage | UserDefaults (App Group) |
| Platform | macOS 14.0+ (Sonoma) |
| IDE | Xcode 15+ |
Tracker/
├── Shared/ # Shared between App & Widget
│ ├── TrackerItem.swift # Data model
│ ├── TrackerStore.swift # Data persistence & logic
│ └── WidgetDataReader.swift # Widget data access
│
├── Tracker/ # Main App
│ ├── TrackerApp.swift # App entry point
│ ├── ContentView.swift # Sidebar + navigation
│ ├── DetailView.swift # Tracker detail with charts
│ ├── AddItemView.swift # Create new tracker
│ ├── EditItemView.swift # Edit existing tracker
│ └── WidgetPickerView.swift # Choose widget items
│
└── TrackerWidget/ # Widget Extension
└── TrackerWidget.swift # Widget views + intents
- Click + in the sidebar
- Choose an emoji icon
- Enter a name (e.g., "LeetCode")
- Customize counter labels (e.g., "Solved" / "Revised")
- Toggle dual counter mode on/off
- Click Create
- Select a tracker from the sidebar
- Use + / - buttons to update today's count
- Data automatically rolls over at midnight
- Click the grid icon (🔲 2/4) in the sidebar header
- Check up to 4 trackers to show on your widget
- Click Done
- Your widget updates automatically
- Select a tracker
- Click the pencil icon in the detail view
- Change name, icon, labels, or counter mode
- Click Save
- Tap + / - directly on the widget to increment/decrement
- Changes sync instantly with the app
Tracker is built with privacy as a core principle:
- No analytics — Zero tracking, zero telemetry
- No network calls — The app never connects to the internet
- No accounts — No sign-up, no login
- 100% local storage — All data lives in your Mac's App Group container
- No cloud sync — Your data never leaves your device
Your data is stored at:
~/Library/Group Containers/group.com.vishwas.tracker/
Tracker is flexible enough to track anything:
| Use Case | Label 1 | Label 2 | Single/Dual |
|---|---|---|---|
| LeetCode | Solved | Revised | Dual |
| Reading | Pages | — | Single |
| Gym | Sets | Reps | Dual |
| Writing | Words | — | Single |
| Project Tasks | Done | Bugs Fixed | Dual |
| Meditation | Minutes | — | Single |
| Language Learning | Words | Sentences | Dual |
| Drawing | Sketches | — | Single |
| Requirement | Minimum |
|---|---|
| macOS | 14.0 (Sonoma) |
| Xcode | 15.0 |
| Swift | 5.9 |
| Apple Developer Account | Free (for personal use) or Paid (for distribution) |
Contributions are very welcome! Whether you're fixing a bug, adding a feature, or improving docs — all help is appreciated.
- Fork the repository
- Create your feature branch
git checkout -b feature/amazing-feature
- Commit your changes
git commit -m "Add amazing feature" - Push to your branch
git push origin feature/amazing-feature
- Open a Pull Request — describe what you changed and why
These are open for anyone to pick up:
- iCloud sync across devices
- CSV/JSON data export
- Dark/light theme customization
- Custom color picker for counters
- Weekly/monthly summary notifications
- Large widget with chart view
- iOS companion app
- Keyboard shortcuts for quick increment
💬 Have an idea not listed here? Open an Issue and let's discuss it!
No worries! The codebase is small and well-structured — a great place to start. Feel free to open an issue asking where to begin and I'll guide you.
This project is open source and available under the MIT License.
MIT License
Copyright (c) 2026 Vishwas
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
If you find Tracker useful, please give it a star! It helps others discover the project and motivates further development.