iso.me is an open-source iOS app that tracks the places you visit and the routes you take — and keeps every byte of that data on the device. No accounts. No cloud. No analytics. AGPL-3.0.
Repo: https://github.com/CodyBontecou/isome
App Store: https://apps.apple.com/app/id6761960794
Why I built this
I wanted a location history I could trust. Apple's "Significant Locations" is a black box. Google Timeline lives on Google's servers. Most third-party trackers either need a cloud account or ship an SDK that quietly phones home.
So I built one that doesn't.
iso.me records visits and GPS tracks using CLLocationManager visit monitoring and continuous location updates. Every point, every visit, every export — it stays on your device. There is no backend. There is no account system. There is no analytics SDK. The dependency list is empty: it's pure Apple frameworks.
The whole thing is AGPL-3.0 on GitHub.
What it does
Visit detection. When you arrive at a place and leave it, the app logs the visit using iOS's built-in visit monitoring API. Each one gets reverse-geocoded so you see a real address, not just a coordinate.
Continuous tracking. When you want a precise route — a hike, a drive, a long walk — you can start a continuous session. Configurable distance filter (5m–200m) and an auto-off timer so it doesn't drain your battery if you forget. Tracking is free and unlimited.
Live Activities. Lock screen + Dynamic Island show distance, points, and time remaining while a session is running.
Watch app. Today's visit count, distance, tracking status, syncs via App Group.
Export / import. JSON, CSV, or Markdown. Fully reversible — you can wipe the app, re-import, and you're back where you started. Export is the one paid feature: a one-time $9.99 unlock. Tracking, visits, routes, the watch app, Live Activities — all free, all unlimited, forever.
How it makes money
The pricing is on purpose: the app does its job (track your stuff, keep it private) for free, and if you ever want your data outside the app — JSON for a script, CSV for a spreadsheet, Markdown for an Obsidian vault — that's $9.99 once, lifetime. No subscription. No ads. No "free tier with a usage cap that nags you on day three."
I picked this split because it matches what people actually value differently: tracking is the commodity (Apple, Google, and a hundred apps do it), but a clean, lossless export of your full history is the part you'd actually pay for once. And it lets the privacy promise be real without a paywall in the way of it.
The architecture in one paragraph
SwiftUI front end, SwiftData on-device store, CoreLocation for visits and GPS, CoreMotion for activity detection, ActivityKit for Live Activities, WidgetKit for the watch + lock screen. Zero third-party dependencies. No network code in the app at all — there's nothing to send anywhere because there's nowhere to send it.
If this resonates, a star on the repo helps a lot:
Top comments (1)
The empty-dependency-list claim is the part most "privacy-first" apps quietly violate, and you led with it — that's the right framing. We made the same architectural call on the Android side with Background Camera RemoteStream: Camera2 + a foreground service for screen-off video, local-only storage, optional embedded Ktor web server bound to the LAN only. Zero analytics SDKs in the recording path. The dependency tree is shockingly short once you stop treating "real apps need Crashlytics" as a given.
Two questions:
Battery cost of Live Activities during continuous sessions — we run an analogous foreground notification with elapsed time + storage used, and Samsung's One UI was disproportionately punishing about it. The persistent notification reduces force-stops on Samsung but costs ~3-5% extra over a 12-hour session. Is iOS more forgiving, or are you seeing a meaningful battery drag from ActivityKit updates?
The pricing split is the cleanest version of "free privacy" I've seen — free tracking + lifetime $9.99 for lossless export. Tracking is the commodity; clean export is where the unique value sits. Did you consider charging for the watch app instead and decide against it? Curious how that decision shook out.