Kadō — A privacy-first habit tracker for iPhone and iPad.
165
stars
52
commits
Swift
primary language
Sep 10, 2026
updated
A privacy-first habit tracker for iPhone and iPad.
Non-binary habit score · Offline-first · Open source (MIT) · No account, no subscription, no telemetry.
Kadō is an iOS habit tracker with three commitments:
PRIVACY.md.@Observable, SwiftData, CloudKit,
WidgetKit, App Intents — no cross-platform layer, no third-party
dependencies.Why another habit tracker? The market gap is spelled out in
docs/PRODUCT.md: the reference open-source
tracker (Loop) is Android-only; the reference iOS tracker (Streaks)
is closed source and uses a binary streak; the most visible modern
iOS open source attempt (Teymia) is freemium and ships without Apple
Watch or HealthKit. Kadō takes Loop's algorithm to native iOS, MIT,
with the full Apple ecosystem in scope.
AppIntent.Full roadmap in docs/ROADMAP.md.
@Observable (iOS 17+) for state — no Combine.VersionedSchema +
SchemaMigrationPlan wired from day one.cloudKitDatabase: .private(...)) for
multi-device sync.CLAUDE.md for
why).Target: iOS 18.0+, Xcode 16.0+, Swift 5.10+.
Architecture notes, conventions, and toolchain quirks (SwiftData
edge cases, CloudKit-shape rules, concurrency under Swift 6, etc.)
are documented in CLAUDE.md.
Kado/ # Main iOS app target
Packages/KadoCore/ # Shared Swift package — @Model types,
# domain types, calculators, intents,
# widget snapshot types
KadoWidgets/ # Widget extension target (reads an
# App Group JSON snapshot)
KadoTests/ # Unit tests (Swift Testing)
branding/ # SVG marks and wordmarks
docs/
├── PRODUCT.md # Product vision, competitive analysis
├── ROADMAP.md # Versioned feature roadmap
├── habit-score.md # Score algorithm spec
├── streak.md # Streak algorithm spec
├── app-store-connect.md # Store metadata, copy, checklists
├── plans/ # Per-feature research / plan / compound
│ # artifacts from the conductor workflow
└── screenshots/ # iPhone 6.7" and iPad 13" sets (EN + FR)
PRIVACY.md # Privacy policy (repo-hosted)
git clone https://github.com/scastiel/kado.git
cd kado
open Kado.xcodeproj
Select the Kado scheme and an iOS 18 simulator (iPhone 17 Pro is
the project's practical default on Xcode 26 toolchains).
From Xcode: ⌘U on the Kado scheme.
From the command line via xcodebuild:
xcodebuild -project Kado.xcodeproj -scheme Kado \
-destination "platform=iOS Simulator,name=iPhone 17 Pro" \
test
If you use Claude Code with the
XcodeBuildMCP server,
prefer test_sim / build_sim over shell xcodebuild — see the
"Tooling" section of CLAUDE.md.
Settings has a hidden dev-mode toggle that swaps the SwiftData
container for a seeded local sandbox. Useful for playing with
historical score / streak behavior without affecting your real data.
See docs/plans/2026-04/dev-mode/ for the design notes.
Issues and pull requests are welcome. A few notes:
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 human contributors.feat(scope): description, fix(scope): …, etc.Kadō collects nothing. No analytics, no telemetry, no crash reporter. iCloud sync is optional and goes through the user's own private CloudKit database.
Full policy in PRIVACY.md.
MIT © 2026 Sébastien Castiel.
52 commits
Swift
94.9%
HTML
3.7%
CSS
1.2%
Kadō — A privacy-first habit tracker for iPhone and iPad.
165
stars
52
commits
Swift
primary language
Sep 10, 2026
updated
A privacy-first habit tracker for iPhone and iPad.
Non-binary habit score · Offline-first · Open source (MIT) · No account, no subscription, no telemetry.
Kadō is an iOS habit tracker with three commitments:
PRIVACY.md.@Observable, SwiftData, CloudKit,
WidgetKit, App Intents — no cross-platform layer, no third-party
dependencies.Why another habit tracker? The market gap is spelled out in
docs/PRODUCT.md: the reference open-source
tracker (Loop) is Android-only; the reference iOS tracker (Streaks)
is closed source and uses a binary streak; the most visible modern
iOS open source attempt (Teymia) is freemium and ships without Apple
Watch or HealthKit. Kadō takes Loop's algorithm to native iOS, MIT,
with the full Apple ecosystem in scope.
AppIntent.Full roadmap in docs/ROADMAP.md.
@Observable (iOS 17+) for state — no Combine.VersionedSchema +
SchemaMigrationPlan wired from day one.cloudKitDatabase: .private(...)) for
multi-device sync.CLAUDE.md for
why).Target: iOS 18.0+, Xcode 16.0+, Swift 5.10+.
Architecture notes, conventions, and toolchain quirks (SwiftData
edge cases, CloudKit-shape rules, concurrency under Swift 6, etc.)
are documented in CLAUDE.md.
Kado/ # Main iOS app target
Packages/KadoCore/ # Shared Swift package — @Model types,
# domain types, calculators, intents,
# widget snapshot types
KadoWidgets/ # Widget extension target (reads an
# App Group JSON snapshot)
KadoTests/ # Unit tests (Swift Testing)
branding/ # SVG marks and wordmarks
docs/
├── PRODUCT.md # Product vision, competitive analysis
├── ROADMAP.md # Versioned feature roadmap
├── habit-score.md # Score algorithm spec
├── streak.md # Streak algorithm spec
├── app-store-connect.md # Store metadata, copy, checklists
├── plans/ # Per-feature research / plan / compound
│ # artifacts from the conductor workflow
└── screenshots/ # iPhone 6.7" and iPad 13" sets (EN + FR)
PRIVACY.md # Privacy policy (repo-hosted)
git clone https://github.com/scastiel/kado.git
cd kado
open Kado.xcodeproj
Select the Kado scheme and an iOS 18 simulator (iPhone 17 Pro is
the project's practical default on Xcode 26 toolchains).
From Xcode: ⌘U on the Kado scheme.
From the command line via xcodebuild:
xcodebuild -project Kado.xcodeproj -scheme Kado \
-destination "platform=iOS Simulator,name=iPhone 17 Pro" \
test
If you use Claude Code with the
XcodeBuildMCP server,
prefer test_sim / build_sim over shell xcodebuild — see the
"Tooling" section of CLAUDE.md.
Settings has a hidden dev-mode toggle that swaps the SwiftData
container for a seeded local sandbox. Useful for playing with
historical score / streak behavior without affecting your real data.
See docs/plans/2026-04/dev-mode/ for the design notes.
Issues and pull requests are welcome. A few notes:
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 human contributors.feat(scope): description, fix(scope): …, etc.Kadō collects nothing. No analytics, no telemetry, no crash reporter. iCloud sync is optional and goes through the user's own private CloudKit database.
Full policy in PRIVACY.md.
MIT © 2026 Sébastien Castiel.
52 commits
Swift
94.9%
HTML
3.7%
CSS
1.2%