Privacy

The short version: local-first, explicit sharing.

Last updated: 3 September 2026

OffTrail is designed to know as little about you as possible. There is no OffTrail account or public rider profile, and most riding data stays on your device. Recordings stay local unless you export them; imported tracks stay local unless you enable device sync, which uploads those GPX files to OffTrail's protected sync relay so your paired device can download them. Some optional network features necessarily process limited technical, location or route data, as explained below. The app also shares pseudonymous usage statistics and crash reports (via Google Firebase) so we can fix problems and improve it — never your tracks, your routes, or where you ride. Other data leaves the device only when you use a feature that needs the network: live location during a Group ride or Family Follow session (over our own servers), basemap tile requests, and — when you use Track to or a track's off-road / on-road split is worked out — coordinates sent to a routing service.

Who is responsible for your data

OffTrail is an independent project published by Ricardo Costa, who is the data controller for personal data processed directly for the operation of OffTrail. Privacy questions or requests can be sent to [email protected].

Some data OffTrail features process may legally qualify as personal data — for example precise location, your rider or display name, GPX data temporarily handled by network features, installation or technical identifiers, contact details you send, and crash or device information. This policy explains what is processed, why, and for how long.

What OffTrail infrastructure handles

There is no rider profile and no leaderboard. OffTrail uses external infrastructure and service providers (see Service providers below); it does not own or physically operate all of it. What OffTrail's own infrastructure handles:

What stays on your phone

You can back any of this up the way you'd back up any iOS app's local files (Files app, iCloud Drive backup, Finder sync). OffTrail does not provide account-based recovery.

Location

OffTrail asks for "When in Use" location permission so the user dot can render on the map and the rider can be tracked along an imported route. With your permission we keep listening to location updates while the app is in the foreground — that's how recording survives screen-lock and pocket use. Recording is suspended when the app moves to the background, to save battery. iOS shows its standard blue status bar while location is in use; Android shows the location icon in the status bar.

Your location is used in real time to render the map and write entries into your own ride recording. It is not transmitted anywhere — except during a Group ride session, when you share a live-location follow link with family (both sent to our own servers), or when you build a Track to route, where your position and destination are sent to a routing service. Each is described below.

Group ride (opt-in)

When you start or join a Group ride from Settings → Group ride, OffTrail shares your live position with the riders in your session over a realtime connection to OffTrail's own servers (a Cloudflare Durable Object — a small, single-session server instance). There is no third-party messaging provider, no OffTrail account, and no long-term storage — and it works the same between Android and iPhone riders. Specifically:

Family Follow — "Share live location" (opt-in)

When you tap Share live location from the Home menu, OffTrail creates a private link (like offtrailapp.com/follow/<code>) that anyone who has it can open in a web browser — no app, no account — to watch your position move on a map while you ride. It is meant for family and friends who aren't riding with you. Specifically:

Network requests we make

The app loads basemap tiles online when you're connected, so the map keeps looking fresh in places you haven't pre-cached. Tile requests go to:

These flows differ. OffTrail's own tile service serves the Base and Off-road styles, and for areas it hasn't built yet it proxies tiles from OpenFreeMap; it keeps the aggregate request statistics described in "What OffTrail infrastructure handles" above (coarse map cell and edge country — no IP stored, not tied to a device or person). The Esri and Open-Meteo requests, by contrast, go directly from your device to those providers under their own privacy policies — OffTrail does not intercept, log, or proxy those. If you are fully offline, the app falls back to what you have cached (or, for satellite, surfaces a "Satellite needs network" banner; for weather, the chip just hides).

Routing & place names (Track to, off-road split)

Two features send coordinates off the device, because the work can't be done offline on the phone:

What our routing service keeps. Coordinates are never logged, and no IP address is stored. We keep aggregate statistics in the same spirit as the tiles: request counters (route type, success/failure, coarse 1° map cell of the route's midpoint, edge country) and — for generated routes only — an anonymised "popular corridors" heatmap: a sparse sample of the computed route's geometry, rounded to a ~1 km grid, with the first and last 500 m of every route discarded so neither your start point nor your destination is ever retained. Surface-split (map-match) requests carry your own recorded track, so they are excluded from the heatmap entirely. Nothing links any of this to a device or person.

OffTrail Route Planner

The web-based OffTrail Route Planner lets you plan before a ride. Your GPX files are processed in your browser; the route geometry is sent transiently to build your route and is never stored. OffTrail does not keep your tracks. The temporary route request is used only to build the route you asked for. The Planner is free and does not require an account.

External links from inside the app

The About screen has two opt-in outbound links: Share OffTrail (system share sheet seeded with the App Store URL + a short pitch) and Follow on Instagram (deep link to @offtrailgpx, falls back to Safari if Instagram isn't installed). Both open in their respective destinations and are subject to those services' policies. OffTrail does not collect anything before, during, or after the tap.

Review prompt

After three saved recordings on the same install, OffTrail asks the platform to surface its native review sheet (SKStoreReviewController on iOS, Play In-App Review on Android). The sheet runs entirely inside the system frame; we do not see your review or rating. Apple's own throttle limits this prompt to at most three appearances per rider per 365 days across the whole device; Google applies a comparable quota. We additionally store a one-shot flag locally so OffTrail itself doesn't re-prompt within the same install.

Analytics & crash reports (Google Firebase)

Since v1.14.1 (iOS) / v0.83 (Android), OffTrail uses Google Firebase for two things, on both platforms:

What is never sent to Firebase: your GPS coordinates, your tracks or recordings, track names, routes, or anything that says where you ride. Events are feature counters, not location data. There is no OffTrail account, and Firebase does not receive an OffTrail rider profile; Firebase may use a per-install or technical identifier to group events. Google/Firebase processes this information under its applicable data-protection terms (see Firebase privacy). This data is used only to improve OffTrail, never for advertising.

No ads, no ad tracking. OffTrail has no ad SDKs, no cross-app tracking, and nothing is shared or sold for advertising.

Cookies & website analytics (this site only)

This website uses Google Analytics to understand visits — which pages are read, from which countries, on which devices. It only runs after you accept the cookie banner; decline (or simply ignore it) and no analytics cookie is ever set. This applies to offtrailapp.com only — the app sets no cookies and is covered by the Firebase section above.

Aside from this opt-in analytics cookie, the site sets none. Your banner choice itself is stored locally in your browser (localStorage), not on a server.

Route Planner usage (cookieless). Separately, the Route Planner keeps aggregate usage statistics so we can see which steps people complete and where routing fails — in the same spirit as the routing service above. It sets no cookie and stores no persistent or cross-site identifier, no coordinates, no search text, and no IP address. To join the steps of a single visit into one funnel it uses a throwaway session tag: a random value held only in your browser tab's sessionStorage (per-tab, cleared when you close the tab), and never linked to any other identifier or to you. What we keep is aggregate — which planner step was reached; whether a route generated, downloaded, or failed (with a coarse reason); and rough dimensions (vehicle style, desktop/mobile, edge country) — kept as aggregate statistics under the analytics platform's standard retention (Cloudflare Analytics Engine, around 90 days by default). Because it sets no cookie and is designed not to directly identify you or persistently recognise your browser, it runs without the cookie banner, on the basis of our legitimate interest in understanding how the planner is used so we can improve it. To keep these counts honest (and not inflated by bots), before a session is counted the planner asks Cloudflare Turnstile for an invisible anti-bot check — a privacy-preserving alternative to a CAPTCHA that sets no tracking cookie; if it can't validate silently it simply skips the analytics rather than ever showing you a challenge.

Send to OffTrail (Route Planner transfer)

When you choose Send to OffTrail in the Route Planner, the adventure you generated — a route, which is location data — is uploaded to a short-lived transfer service so the OffTrail app can import it with a short code. We store only the generated adventure (its route and a name): never the source GPX files you brought, your search text, or your planning session. The artifact is kept under a random, non-guessable code with no account and no identity attached. It is a shareable code: anyone you give it to can import the adventure in the OffTrail app until it expires — so treat it like sharing the route itself. It is deleted automatically after 5 days. It runs on Cloudflare, and creating a transfer uses the same invisible Turnstile check as above; the app fetches it with the same short-lived device-integrity token as the tiles and routing service. If you never use Send to OffTrail, nothing is uploaded — downloading the GPX stays fully on your device.

Why we process this data

How long data is kept

Where our implementation doesn't set a fixed period, we say so rather than invent one.

Service providers

OffTrail relies on a small set of providers. Some supply infrastructure to OffTrail; some receive requests directly from the app or your device. They may process technical data required to provide their services, and their own terms and privacy practices may apply. OffTrail does not sell personal data.

Where a provider processes personal data on OffTrail's behalf, this does not remove the responsibilities that applicable law places on OffTrail.

International transfers

Some service providers may process technical information in countries outside Portugal or the European Economic Area. Where privacy law requires safeguards for such transfers, OffTrail relies on the safeguards made available by the relevant provider, such as applicable contractual data-protection mechanisms.

Your privacy rights

Depending on where you live, privacy law may give you rights over personal data concerning you — including access, correction, deletion, restriction, objection and, where applicable, data portability or withdrawal of consent. Because OffTrail deliberately does not create user accounts, we may sometimes have very little information that lets us identify data as belonging to a particular person, and we will not collect additional personal data merely to identify you unless it is reasonably necessary to deal with your request. You can contact us at [email protected]. If you are in the European Economic Area, you also have the right to complain to a data-protection authority; in Portugal, the supervisory authority is the CNPD.

Privacy by design

The core stance is a product principle, not a phase: no OffTrail account · no public rider profile · no public route or activity feed · local-first · no advertising and no behavioural-advertising tracking · location sharing is always explicit · sharing sessions are short-lived · central retention is limited · session codes are random and non-enumerable.

Children

OffTrail is designed for general navigation and outdoor use and is not specifically directed at children. Features that share live location should only be used knowingly and voluntarily by the person whose location is being shared. Do not use OffTrail to track another person without their knowledge or permission. Where applicable privacy law requires parental or guardian consent for a child's use of a feature involving personal data, that consent must be obtained.

Changes to this policy

When we add a feature that changes what leaves your device, we say so plainly here and update the "Last updated" date. Material changes are also signalled in the app or in the release notes. Continued use of a feature is not treated as consent to every kind of processing; where processing relies on your consent, that stays separate.

Contact

Questions or pushback: [email protected].