A privacy-first wont locator for iPhone and iPad.
Non-binary wont people · Offline-first · Open root (MIT) · No account, nary subscription, nary telemetry.
getkado.app
Kadō is an iOS wont locator pinch 3 commitments:
- A score, not a streak. The wont people — inspired by Loop Habit Tracker connected Android — is a non-binary exponential moving mean of your completions. One missed time doesn't swipe your progress. You spot a trend, not a fragile chain.
- Your information stays yours. No account, nary analytics, nary third-party SDKs. Storage is section (SwiftData), sync is optional done your own iCloud (CloudKit backstage database). Export is lossless, successful JSON or CSV, whenever you want it. See PRIVACY.md.
- Native to Apple. SwiftUI, @Observable, SwiftData, CloudKit, WidgetKit, App Intents — nary cross-platform layer, nary third-party dependencies.
Why different wont tracker? The marketplace spread is spelled retired in docs/PRODUCT.md: the reference open-source tracker (Loop) is Android-only; the reference iOS locator (Streaks) is closed root and uses a binary streak; the astir visible modern iOS unfastened root effort (Teymia) is freemium. Kadō takes Loop's algorithm to autochthonal iOS — MIT, free, nary account, nary subscription.
- Today view — habits owed today, pat to complete, long-press for partial / statement / timer, resistance to reorder (the bid syncs via iCloud).
- Habit detail — monthly almanac pinch month-by-month navigation, current streak, champion streak, wont people pinch an info popover explaining the math. Edit immoderate past time consecutive from the calendar, including days earlier the wont existed.
- Per-day notes — a short statement connected immoderate day's completion, carried through export and import.
- Overview — habits × days matrix pinch score-shaded cells, the Loop / Way of Life shape pinch Kadō's people DNA. Completions logged off-schedule show up too, alternatively of hiding arsenic remainder days.
- Flexible schedules — daily, N days per week, circumstantial weekdays, every N days (the rhythm re-anchors connected each completion, truthful finishing early ne'er costs you a day). Binary, counter, aliases timer wont types.
- Day starts at — push the time rollover arsenic precocious arsenic 6 AM, so late-night logging still lands connected the time you mean. Changing it never re-buckets history.
- Widgets — Home Screen (small / mean / large) and Lock Screen (rectangular / information / inline). Quick-complete via AppIntent.
- Siri and Shortcuts — complete a habit, log a value, aliases inquire for a score and streak, hands-free. Also disposable arsenic Home Screen actions and Shortcuts automations.
- Reminders — per-habit section notifications pinch recurring schedules and cheque / skip speedy actions.
- iCloud sync — optional, opt-in, goes only done the user's private CloudKit database. Settings shows unrecorded sync state, including when sync isn't working.
- JSON and CSV export / import — lossless backup of your data, in both formats, round-trip tested. Open a CSV backup successful Numbers or Excel, edit it, bring it backmost in.
- Tip Jar — wholly optional, unlocks nothing. The full app stays free, pinch nary ads, nary subscription, and nary tracking.
- Accessibility — Dynamic Type up to XXXL, VoiceOver labels on every surface, afloat Dark Mode.
- Localization — English and autochthonal French (not machine-translated).
Shipping connected the App Store — current type 1.7.
| 1.0 | First nationalist merchandise — score, Today / Overview / Detail, widgets, iCloud sync, reminders, JSON export, EN + FR |
| 1.1 | Siri and Shortcuts; edit past days from the calendar |
| 1.2 | Per-day notes; backdated completions; period navigation |
| 1.3 | Drag to reorder habits; a gentle, one-time reappraisal prompt |
| 1.4 | iCloud sync reliability — iPad clang fix, honorable sync status |
| 1.5 | Tip Jar (StoreKit 2), optional and unlocking nothing |
| 1.6 | "Day starts at" hour; days-per-week scoring fix; off-schedule completions successful Overview |
| 1.7 | CSV export / import round-trip; "every N days" re-anchors connected completion |
Not planned. A autochthonal Apple Watch app and HealthKit auto-completion were scoped for v0.3 and person been descoped — no user has asked for either since launch. Both enactment listed in docs/ROADMAP.md nether "Descoped", and would be reconsidered connected existent demand.
Next — Live Activities and Dynamic Island for timer habits, then the remaining v1.x polish (themes, biometrics, categories, backup files). Full roadmap successful docs/ROADMAP.md.
- SwiftUI pinch @Observable (iOS 17+) for authorities — nary Combine.
- SwiftData for section persistence, pinch VersionedSchema + SchemaMigrationPlan wired from time one.
- CloudKit via SwiftData (cloudKitDatabase: .private(...)) for multi-device sync.
- WidgetKit + an App Group JSON snapshot for hold surfaces (the widget process ne'er opens SwiftData — spot CLAUDE.md for why).
- App Intents for widget quick-complete, Siri, and Shortcuts.
- StoreKit 2 for the Tip Jar.
- Swift Testing for portion tests, XCTest for UI tests and for the App Store screenshot run.
- Zero third-party dependencies.
Target: iOS 18.0+, Xcode 16.0+, Swift 5.10+.
Architecture notes, conventions, and toolchain quirks (SwiftData edge cases, CloudKit-shape rules, concurrency nether Swift 6, etc.) are documented successful CLAUDE.md.
- macOS 14.5+
- Xcode 16.x+
- An Apple Developer relationship is only needed to build to a physical device aliases TestFlight; the simulator does not require one.
Select the Kado strategy and an iOS 18 simulator (iPhone 17 Pro is the project's applicable default connected Xcode 26 toolchains).
From Xcode: ⌘U connected the Kado scheme.
From the bid line, the Makefile wraps the communal loops:
make thief lists the rest, including the App Store targets (make screenshots, make frames, make listing) documented in docs/app-store/README.md.
If you usage Claude Code pinch the XcodeBuildMCP server, prefer test_sim / build_sim complete ammunition xcodebuild — spot the "Tooling" conception of CLAUDE.md.
Settings has a hidden dev-mode toggle that swaps the SwiftData container for a seeded section sandbox. Useful for playing with historical people / streak behaviour without affecting your existent data. See docs/plans/2026-04/dev-mode/ for the creation notes.
Issues and propulsion requests are welcome. A fewer notes:
- Read CLAUDE.md first — it is the project's working agreement (architecture, conventions, testing expectations, toolchain quirks). It is written for Claude Code but applies equally to quality contributors.
- Business logic (score, streak, frequency, import/export) is test-first. New behaviour needs a test; regressions request a test that would person caught them.
- One PR per characteristic aliases logical fix. Commit connection format follows a lightweight Conventional Commits normal — feat(scope): description, fix(scope): …, etc.
- No third-party dependencies. The Tip Jar is built straight on StoreKit 2, and the App Store Connect customer successful Scripts/ signs its ain JWT pinch openssl, precisely truthful that stays true.
Kadō collects nothing. No analytics, nary telemetry, nary clang reporter. iCloud sync is optional and goes done the user's ain private CloudKit database.
Full argumentation successful PRIVACY.md.
MIT © 2026 Sébastien Castiel.
- Loop Habit Tracker (Álinson S. Xavier, GPLv3) — the root of the non-binary wont score algorithm. Kadō reimplements the thought natively successful Swift; nary Loop code was copied.
- Streaks (Crunchy Bagel) — the iOS UX reference for really this benignant of app should feel.
- Teymia Habit (MIT) — reference constituent for a modern SwiftUI + SwiftData + CloudKit + WidgetKit stack connected iOS.
- XcodeBuildMCP (getsentry, MIT) — the MCP server that makes an autonomous build / trial / screenshot loop imaginable pinch Claude Code.
English (US) ·
Indonesian (ID) ·