It writes down where you went, and it does not lose it.
Roam commits every GPS fix to the phone the moment it arrives, in the same transaction as the running totals — so a ride survives the app being killed, whether by iOS reclaiming memory, by a crash or by a force-quit. When the signal drops in a tunnel, it marks the hole instead of drawing a straight line it has no evidence for. No account, no sign-in, no sync.
iPhone · iOS 17 or later · free to record, view and replay · no account
Sample rideCycling
recordedno fix here
18.4 kmdistance
1:02:11moving
241 mclimb · barometer
Signal lost for 4 minutes near the tunnel. Not measured, not guessed, not added to the distance.
0accounts
0analytics or ad SDKs
30interface languages
3export formats
What the app actually does
Every fix is on disk before you could lose it
One location callback is one batch is one database transaction, and the points and the ride’s running totals are committed together. There is no buffer waiting for you to press stop, and no path anywhere in the writer that drops a point quietly — a batch that cannot be committed raises an error and is parked in an alarm rather than absorbed. The practical consequence is the one that matters at the roadside: if the app is killed at kilometre forty, kilometre forty is already written down. Recovery does not replay twenty-eight thousand points to work out where you were, because the summary row was never allowed to disagree with the points behind it.
A gap is drawn as a gap
Tunnels, deep valleys, underground car parks, a jacket pocket against a wall. When the fixes stop arriving, Roam closes the segment and opens a new one, and the hole between them is a real object in the database with both ends. It is never interpolated, and its straight-line length is never added to your distance — the engine has no evidence for what happened inside it, and inventing some would be the one thing a track recorder must not do. The dashed line on the map and the sentence on the detail screen that tells you how long the signal was gone are produced by the same function, so the picture and the number cannot drift apart.
Climb from the barometer, not from GPS altitude
GPS altitude is the weakest number a phone produces, and an app that totals it up will hand you six hundred metres of climb on a flat ride. Roam reads the pressure sensor instead, stores the barometric altitude alongside the GPS one, and prefers it when there is one. It also keeps track of why there is not — no hardware, permission never asked, permission refused, restricted by a profile, switched off in Roam’s own settings, or started and then failed — because an absent sensor and a silent one look identical from the outside, and telling them apart is the difference between a bug you can fix and a number nobody can explain.
Nothing you recorded is ever deleted
Filtering, smoothing and auto-pause never remove a row. They are recorded as flags on the point, and the raw stream stays on disk exactly as it arrived. This is a deliberate insurance policy rather than an accident of storage: heuristics get real rides wrong, and when one does, the original samples are still there for a later version to re-derive a better track from. An app that quietly drops the samples it disagreed with has destroyed the only evidence that it was wrong.
It knows a red light from a lost signal
Standing still and losing reception look very similar in a stream of coordinates, and an app that confuses them either pauses your ride at the mouth of a tunnel or keeps the clock running while you buy a coffee. Roam uses the phone’s motion data to tell the two apart, which is the only reason it asks for Motion & Fitness at all.
One background capability, and no other
Start it, put the phone in a pocket, turn the screen off, ride. Roam declares exactly one background mode — location — and there is a build gate in the repository that fails the build if that list ever grows by a single entry. If iOS shuts the app down mid-ride anyway, granting location Always gives the system the option of relaunching it in the background so the recording carries on — insurance, not a guarantee. Recording works without that permission, and the app says so in the prompt rather than implying you have to.
Bring a moment back with you
A photo, a short clip or a spoken note, taken without getting off the bike, pinned to the exact point of the route where you took it. Later they sit on the map and on the timeline where they happened, which is a far better index of a long day than a folder of photographs with nothing but timestamps. Capture is part of Roam Pro.
Your ride, in a file you can open elsewhere
Export a track as GPX, as KML, or as CSV in two shapes — one row per point for analysis, one row per track for a spreadsheet of your year. The export reads the database rather than the live recorder, so an interrupted ride whose recording process was killed and never came back can still be exported on its own. FIT is deliberately absent rather than present and half-working. Export is part of Roam Pro.
What a ride actually looks like
There is nothing to sign up for and no profile to fill in. This is the whole shape of it, so you can tell before installing whether it is what you want.
Open it and press startPick what you are doing — cycling, running, hiking, driving and the rest — and tap once. There is no account screen in the way, because there is no account.
Put the phone awayPocket, bar bag, jersey, glovebox. The screen can be off. Roam keeps recording in the background, and every fix is committed as it arrives rather than held until you come back.
Ignore the tunnelIf reception goes, it goes. Roam closes the segment, waits, and opens a new one when the fixes come back. You do not have to do anything, and the missing stretch will be shown as missing rather than filled in.
Grab the thing you wanted to rememberA photo of the view, ten seconds of the descent, or a sentence said out loud about where to turn next time. It lands on the map at the spot it happened. This part is Pro.
Stop, and look at itDistance, moving time, speed, climb from the barometer, and an honest note about any stretch where the signal was gone. Replay it along the line if you want to see how the day went. All of this is in the free app.
Two honest limits. Roam records where you went; it is not a coach, it does not set you targets and it does not tell you whether the ride was good. And it is a phone GPS: a phone in a jersey pocket under a wet jacket receives worse than a dedicated head unit, which is exactly why gaps are marked rather than smoothed over.
Where your rides live
On your phone. There is no account, no sign-in and no sync, so there is nowhere for a track to be uploaded to. Nobody has your email address, because you were never asked for one.
The screen that lists your rides has nowhere to fetch from, and that is enforced rather than promised: the repository contains a gate that scans the whole feature for networking symbols — URLSession, dataTask, Supabase, a bare http:// — and fails the build if one ever appears. It exists because an earlier version of this app read its list from a server, which meant a rider in a tunnel opened the app and saw an empty list. Not an error. An empty list, which reads as "your rides are gone".
There are exactly two third-party packages in the whole project: a SQLite library and a map renderer. There is no analytics SDK, no crash-reporting SDK and no advertising SDK of any kind. Nothing counts your opens, nothing knows which routes you ride, and no server anywhere has a row about you.
One thing does use the network, and it would be dishonest not to say so: the map’s background tiles are fetched from a tile endpoint, the way any map is. That request is for a picture of the world, not for your track — your coordinates are not sent anywhere, and the route line is drawn from the database on your own phone.
Your tracks, your media and your settings are deleted with the app. Export them first if you want to keep them, and the file goes through the standard iOS share sheet, which means it goes exactly where you send it and nowhere else.
What is free, and what Roam Pro costs
Recording a ride completely, looking at it and replaying it are free, and are meant to stay that way. The repository states the rule in as many words: a recorder that cannot record a whole track is not a free tier, it is a broken app. Distance, moving time, speed, barometric climb, the map, the gap marks and the replay are all in the free app.
Roam Pro unlocks four things, and exactly four: capture along the route (photo, video, voice note), export (GPX, KML, CSV), the home-screen widget, and the statistics screen. There is a single list of those four in the source code, and the paywall is drawn from it — so the wall cannot promise something the code does not gate, which is a failure mode this app has been on the wrong end of before.
Pro comes as a monthly subscription, a yearly subscription, or a one-time purchase, and all three unlock exactly the same things — the only difference is how you pay. Current prices for your country are on the App Store page; they are not printed here, because a price on a marketing page goes stale and a stale price is a defect.
Two capabilities that are in the app are deliberately not sold: the offline map packs and the Apple Watch app. The team’s own notes say neither has been verified end to end on real hardware, and selling something nobody has watched work is how you end up with a refund queue and a rejection.
Yes, for recording. GPS is a receiver — your phone works out where it is by listening to satellites, and it does not need a cellular connection or wifi to do it. Roam writes every fix straight to the phone and reads your ride list from the phone, so a ride recorded in a valley with no bars is complete. The one thing that needs the network is the map’s background imagery, so on a route with no data the line is drawn but the streets behind it may not be.
What happens if the app is killed mid-ride?
Everything recorded up to that moment is already on the phone, because it was written as it arrived rather than at the end. When the app comes back it finds the interrupted ride and reconciles it rather than discarding it or quietly closing it. If you granted location Always, iOS may also relaunch it in the background, in which case it re-arms the GPS and carries on. That relaunch is insurance rather than a guarantee, and it is worth being plain about the cost: between the kill and the relaunch there is no position data at all, and no API can hand it over afterwards. Durability is the promise; seamless continuation is not.
Why does my distance look lower than another app’s?
Probably because Roam did not count a stretch it has no fixes for. When the signal goes, the hole is stored as a hole with both ends, and its straight-line length is never added to your distance. An app that joins the two ends with a line will show you a longer ride and a route through a building. Any stretch Roam left out is named on the ride’s detail screen, so you can see exactly what it did not count.
Where does the climb figure come from?
The phone’s barometer, not GPS altitude. The barometric reading is stored alongside the GPS one and preferred whenever there is one, which is why the figure does not balloon on a flat ride. If there is no reading, Roam knows which of the reasons applies — no sensor, permission never asked, permission refused, restricted, switched off in settings, or started and then failed — rather than silently reporting zero.
Do I need an account?
No, and there is not one to make. There is no sign-in screen, no email is collected and nothing syncs to a server. The consequence is worth being clear about: your rides live on this phone, so if you want them somewhere else, export them.
Is it free?
Recording, viewing and replaying a ride are free. Roam Pro is a paid unlock for four things — capture along the route, export, the widget and the statistics screen — available monthly, yearly or as a one-time purchase, all unlocking the same set. Prices are on the App Store page.
Can I get my data out?
Yes, with Pro: GPX, KML, or CSV in two shapes — one row per point, or one row per track. The exporter reads the database rather than the live recorder, so even a ride whose recording was interrupted and never resumed can be exported.
What can it record?
Cycling, running, hiking, driving and a number of others, including a custom type. The activity affects how the ride is presented and how some of the analysis is done; the recording itself is the same stream of fixes either way.
How phone GPS recording actually behaves
Plain explanations of the things that actually go wrong when a phone records where you went — and how to tell whether the app in your pocket handles them. Written to be useful whether or not you ever install this one.