A no-nonsense, free, open-source 21-day challenge tracker for iOS and macOS.
I was tired. Tired of every habit tracker out there locking basic features behind a paywall. Tired of $4.99/month subscriptions just to tick off a checkbox. Tired of bloated apps that do everything except the one thing I needed: help me stick to a habit for 21 days.
So I built 21DayForge for myself. And now it's free for you too. No subscriptions. No ads. No "premium tier". Just a clean, focused tool to forge habits that stick.
- 21-Day Challenges - Create a challenge, commit for 21 days, track your progress
- One-Tap Daily Check-In - Mark today as done with a single tap from the Today view
- Streaks & Stats - See your current streak, longest streak, and overall progress
- Heatmap View - GitHub-style activity heatmap showing your consistency over time
- Freeze Days - Life happens. Use freeze days when you need a break without losing your streak
- Daily Shloka - A verse from the Bhagavad Gita to start your day with intention
- iCloud Sync - Your data syncs across all your Apple devices via CloudKit
- Dark Mode - Full support for light, dark, and system appearance
- iPad & Mac - Adaptive layout with sidebar navigation on larger screens
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
- iOS 18.0+ / macOS 15.0+
- Xcode 16.0+
- An Apple ID (free)
- I am providing the App for free, Sorry I do not have the budget to host it on Apple Store for $99/year. Hence you may have to reinstall the app after every 7 days. I know its a pain, but these are the compromises we need to live with.
Since this app isn't on the App Store (I'm not paying Apple $99/year for the privilege), here's how to get it on your device:
-
Clone the repo
git clone https://github.com/chinmayrozekar/21DayForge.git
-
Open in Xcode
cd 21DayForge open 21DayForge.xcodeproj -
Set your team
- Select the project in the navigator
- Under Signing & Capabilities, change the Team to your Apple ID
-
Run on your device
- Connect your iPhone via USB
- Select it from the device picker in Xcode's toolbar
- Press
Cmd + R
-
Trust the developer (first time only)
- On your iPhone: Settings > General > VPN & Device Management
- Tap your developer profile and tap Trust
With a free Apple ID, the provisioning profile expires every 7 days. Here's what that means in practice:
- Day 1–7: App works perfectly.
- Day 8: The app won't open (it crashes on launch). Plug your iPhone into your Mac, open Xcode, and press
Cmd + R— takes about 30 seconds. - Day 8–14: Works perfectly again.
- Day 15: Re-sign one more time.
- Day 15–21: Finish your challenge.
Your data is never lost. Re-installing from Xcode preserves all your challenges, streaks, and progress — iOS treats it as an update, not a fresh install. If you have iCloud sync enabled, your data is also backed up in CloudKit.
So yes, you'll need to re-sign twice during a 21-day challenge. A small price for not paying $99/year.
- SwiftUI - Declarative UI
- SwiftData - Persistence with CloudKit sync
- Swift Concurrency - Modern async/await patterns
- Zero dependencies - No third-party packages
21DayForge/
├── Models/
│ ├── Challenge.swift # Core data model (SwiftData)
│ ├── NotificationManager.swift # Daily reminder notifications
│ └── ShlokaData.swift # Bhagavad Gita verses
├── Views/
│ ├── TodayView.swift # Daily overview & quick check-in
│ ├── ChallengeListView.swift # All challenges list
│ ├── ChallengeDetailView.swift # 21-day grid & progress
│ ├── StatsView.swift # Streaks & statistics
│ ├── HeatmapView.swift # GitHub-style activity heatmap
│ ├── NewChallengeView.swift # Create a challenge
│ ├── EditChallengeView.swift # Edit a challenge
│ ├── SettingsView.swift # App settings
│ └── OnboardingView.swift # First-launch experience
├── ContentView.swift # Root navigation (TabView / Sidebar)
└── _1DayForgeApp.swift # App entry point
- Android port (in the pipeline)
- Apple Watch companion app
- Widgets for Home Screen
- Export/import challenge data
- Custom challenge durations (7, 14, 30, 60, 90 days)
Contributions are welcome! Whether it's a bug fix, new feature, or the Android port — open an issue or submit a PR.
If you're interested in building the Android version, I'd especially love to hear from you.
MIT License - do whatever you want with it. Just don't charge people a subscription for a checkbox app.
Built with frustration and SwiftUI by Chinmay Rozekar





