RunBar is a local-first macOS menu-bar app. We do not run servers, we do not collect analytics, and we do not phone home. This page describes the only places your data leaves your Mac, and on whose behalf.
Who we are
RunBar is built and operated by an individual developer (the Data Controller). For privacy enquiries, deletion requests, or any GDPR / UK GDPR right of access: contact page.
What data lives on your Mac
- Strava activities (last 7 days). RunBar synchronises a rolling 7-day window of your runs from the Strava API into a local SwiftData store at
~/Library/Application Support/RunBar/store.sqlite. Activities older than 7 days are purged automatically on every sync, in line with the Strava API Agreement. - Weekly snapshots (derived). RunBar stores per-week aggregates (target, achieved distance / runs / elevation, metric used) in
UserDefaults. These are summary numbers computed locally — they are not raw Strava data. - Strava OAuth tokens and (optionally) your AI provider API key are stored in the macOS Keychain with
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly. - Settings & preferences. Goal target, metric, unit, race date and name. Stored in
UserDefaults.
What leaves your Mac, and to whom
RunBar makes outbound network calls only in three situations:
- Strava API (privacy policy): OAuth login + activity sync over HTTPS. Strava is the source of the run data; their privacy terms apply to the access we have on your behalf, scoped to the permissions you granted at OAuth time.
- Sparkle update check. The app fetches
https://runbar.run/appcast.xmlroughly every 24 hours to check for new versions. The request carries no identifier beyond a generic User-Agent. - RunBar OAuth backend (shared connection only). When you use the shared one-tap Strava connection, the OAuth code/token exchange is proxied through minimal serverless routes on
runbar.run(they hold the app’s client secret so it never ships in the binary). Tokens pass through these routes and are returned to your Mac; nothing is stored server-side — no database, no logs of tokens. If you bring your own Strava API app instead, RunBar talks to Strava directly and these routes are never called. - AI coach (opt-in, currently paused).Since Strava’s API policy update of June 2026 forbids feeding Strava data into AI tools, the coach does not run while your runs sync from Strava — no data is sent to any AI provider, even if you saved a key. When the coach runs (with a future non-Strava source such as Apple Health), it sends a small JSON payload of weekly aggregates to the chosen provider (default: Google Gemini): distance, run count, elevation, target, progress %, days left in the week, the last four weeks of distance totals, your goal streak, and (if set) your race name and days until race. Never activity names, timestamps, GPS data, or personal identifiers. Your API key is sent over HTTPS to authenticate the request and is never stored on any server we control.
Website waitlist
If you join the waitlist on runbar.run, we store your email address, the signup timestamp, and your coarse country code (for send-time scheduling) in a managed key-value store (Vercel KV / Upstash). This data is used for exactly one launch announcement, then the list is deleted. No sharing, no profiling, no recurring newsletter. You can request erasure at any time via the contact page — removals are processed within 30 days.
Strava data & third parties
Per the Strava API Agreement and API Policy (updated June 2026), RunBar may not share Strava Data with third parties and may not use it in connection with any AI application. RunBar enforces this in code: the AI coach is disabled whenever the local store contains Strava-sourced activities.
We recommend the paid Gemini API tier when using the AI coach. Google’s free tier may use prompts to improve their models; paid tiers do not. See Gemini API terms.
What we don’t do
- No analytics or telemetry in the app.
- No advertising of any kind.
- No data sold, rented, leased, or otherwise shared.
- No tracking cookies on the website.
Your rights
You have the right under GDPR / UK GDPR to access, correct, port, and erase the personal data RunBar holds about you. Because the app is local-first, most of these rights are exercised in the app itself:
- Access & portability: every activity row in the popover is a view on the local database; the SQLite file is yours and can be opened with any SQLite client.
- Deletion (Strava data): Settings → Sources → Disconnect. RunBar deletes the OAuth tokens and purges all locally cached Strava activities from the store.
- Deletion (everything): drag RunBar.app to the Trash and remove
~/Library/Application Support/RunBar/and thecom.rodrigue.runbar.tahoeentries from~/Library/Preferences/. - Withdraw AI consent: Settings → Coach → Remove key, or toggle the coach off. The key is wiped from the Keychain and no further requests are sent.
- Strava revocation: at any time you can revoke RunBar’s access at strava.com/settings/apps. On revocation, RunBar deletes the cached activities at the next launch.
Data retention
Strava data is retained for at most 7 days locally, in line with the Strava API Agreement. Derived weekly aggregates (snapshots) and your settings are retained for as long as you use the app and are removed when you uninstall.
Security
All outbound traffic uses HTTPS. Tokens and API keys live in the macOS Keychain with device-only access. The only server-side surface is a set of stateless OAuth proxy routes and the waitlist endpoint described above — neither stores activity data or tokens.
Children
RunBar is not directed at children under 13. If you are a parent and believe a child has used the app, contact us and we will help with deletion guidance.
Changes to this policy
Material changes will be reflected here, with a new Last updated date. Continued use of RunBar after a change constitutes acceptance.