Diese Datenschutzerklärung gibt es nur auf Englisch und Französisch. Unten steht die englische Fassung, sie ist maßgeblich. Die App selbst ist auf Deutsch verfügbar, von einer KI übersetzt und noch nicht von Muttersprachlern geprüft. Fragen beantworte ich gern auf Englisch oder Französisch: feedback.bati@proton.me
Esta política de privacidad solo existe en inglés y en francés. Debajo figura la versión en inglés, que es la que hace fe. La app está disponible en español, traducida por una IA y todavía sin revisar por hablantes nativos. Puede escribirme con cualquier pregunta, en inglés o en francés: feedback.bati@proton.me
Privacy Policy for Bati
Last updated: 20 September 2026
Bati is an offline-first training app. It has no account, no server of its own, and no analytics. This page exists because both app stores require a privacy policy URL, and because the short version deserves to be said plainly:
Bati collects nothing about you. Nothing you record in the app leaves your phone unless you send it yourself, deliberately, by email. Two exceptions, both off by default: the map behind an outing, which tells a map host roughly where you go, and a daily question to GitHub about a newer version of the app.
One sentence of that used to be shorter. Until outings landed, the app made no network request
of any kind, and that was enforced by refusing itself the INTERNET permission. Drawing a map
behind a walk needs the map, so the permission is now in the build, and the honest version of the
promise is one line longer rather than gone: the map is a setting, off until you switch it on, and
until then the app still makes no request of any kind. A second switch joined it on 20 September
2026, for the copies that no store updates: see the map and
the version check below.
What is stored, and where
Everything Bati records (your workouts, sets, reps, hold times, quests, adventures, village, achievements, flame, oath, avatar, settings, and the GPS points of an outing) is written to a SQLite database inside the app’s private storage on your device.
- It is never uploaded, synced, backed up to us, or shared with anyone.
- We cannot read it. There is no server to read it from.
- Deleting the app deletes all of it, and there is no copy anywhere else unless you exported one yourself, as described below.
Backups you make
Settings offers three ways to write that database to a file. Share my backup hands it to your system’s share sheet. Save a file writes it into a folder you choose on the device. Automatic backup writes it into a folder you choose once, and then again on its own before each app update. Where any of those files goes from there is entirely your choice: the app sends it nowhere and has no way to.
- The file is not encrypted. Anyone who opens it can read your training history. Keep it the way you would keep a personal photo, and think about it before putting it somewhere shared.
- Restoring replaces everything. Importing a backup swaps the app’s contents for the file you supply. The database you had is kept on the device as a recovery copy, in the same private storage, until the next restore overwrites it.
- Automatic backup is off until you turn it on, and turning it on means picking the folder yourself: the app cannot write anywhere you have not pointed it at. It writes only before an update, only into that folder, and keeps the five most recent files there, deleting older ones it wrote itself and nothing else. Settings shows which folder it is using, and switching it off is one tap; the files already written stay where they are, because they are yours.
- If the folder you chose becomes unavailable (a card removed, a folder deleted, a permission withdrawn), Bati stops and the Settings row goes back to Off, rather than quietly failing while claiming to work.
- This is still local. A folder you pick may belong to a cloud app (Drive, Dropbox, Nextcloud, and others appear in Android’s folder picker), and if you pick one, that app syncs the file under its own privacy policy. Bati never learns which folder you chose beyond writing to it, and never sends a backup anywhere: the only thing it fetches over the network is the map described below, and nothing in the app can upload a file.
What Bati never does
- No user account, no sign-up, no email address required to use the app.
- No analytics, no telemetry, no crash-reporting SDK, no advertising, no tracking identifiers.
- No third-party SDK that collects data.
- No upload of your data, ever. Nothing you record (a session, a personal record, a GPS trace) is sent anywhere. The two network requests the app can make are described below, with what each one reveals, and each waits for its own switch in Settings.
The map, and the one host
An outing (a walk, a run, a ride) records where you went, so it can tell you how far you travelled. Those points stay in the database on your phone, like everything else.
Drawing them on a map needs a map, and the map is off by default. A fresh install draws the
route as a line on the app’s own dark background, and requests nothing. Settings has one switch for
the map; turn it on and Bati asks tiles.openfreemap.org for tiles, the square images a map
is made of, and that is the first of the app’s two network destinations.
OpenFreeMap serves OpenStreetMap data, free, with no key and no
registration.
- What that request reveals: the map is drawn twice, under you while an outing is running and under the whole route on its recap. The tiles asked for are the ones around you as you move, then the ones covering the outing, so the requests tell that host roughly where you are as you go, along with your device’s IP address and the time of day. That is approximate location information leaving your phone, during the outing and not only after it, and it is why the app names the host here rather than leaving you to find it in a packet capture.
- What it does not reveal: the route to the metre, your pace, your training, or anything else in the database. The host learns the area and roughly when you crossed it, never the line you drew through it, and nothing in the database is ever sent up.
- What keeps the list this short: a lint rule in the repository
(
.biome/plugins/noJsNetwork.grit) rejects every network call written in the app’s own code (fetch,XMLHttpRequest,WebSocket,EventSource,sendBeacon) outside the one module that runs the version check below, so the build fails before a third destination can be added quietly. The map library does its fetching natively, below that line. - Until you switch the map on, no tile is ever requested and the app touches the network not at all, outing or no outing. Switch it off again and both maps go back to the plain background; the switch is one tap either way.
The version check, and the second host
F-Droid and the Play Store both notice a new version of an app and tell you about it. A copy installed by hand from an APK has nobody to tell it anything, and can sit a year behind without knowing. So Settings has a second switch, Check for updates, and it is off by default too.
Switched on, Bati asks api.github.com once a day whether a newer version has been published,
and puts a card on the home screen when the answer is yes.
- What that request reveals: your device’s IP address and the time, which is what GitHub learns from anyone who opens the release page in a browser. It carries no account, no identifier, no device name, and nothing from the database.
- What it does not do: download anything, install anything, or run anything. The card opens the release page in your own browser, and everything after that is yours.
- Turning it off stops it at once. Left off, the request is never made.
Permissions, and why
Location, precise and approximate (optional). Used by one thing: measuring the ground an outing covers. The app reads your position while an outing is running and stops the moment the session ends. The points are written to the local database and never sent anywhere. Decline it, or never start an outing, and the rest of the app is unaffected. Android requires the approximate permission to be requested alongside the precise one; only the precise one is actually read, because approximate location cannot measure a run.
Running with the screen off (Android). An outing keeps a foreground service and a wake lock alive so the trace does not stop when your phone sleeps in a pocket. That is what the permanent notification during an outing is for: an app watching your position should say so, on screen, the whole time.
Notifications (optional). Asked for when you turn a reminder on, and used for the outing notification above. Reminders are scheduled locally by your device’s operating system: there are no push notifications, so there is no server that knows your device.
Internet. For the map, and nothing else, and only while the map is switched on in Settings. What the request reveals is in the map above.
Network state. Whether you are online, and over what kind of connection. The map library asks so it can stop requesting tiles when there is nothing to request them over. It reports no identity, no network name and no location, and it is only meaningful at all because of the permission above it. Bati deliberately does not take the neighbouring Wi-Fi permission, which would name the networks around you, and a network name is a location by another route.
Photos (optional). If you choose a photo as your hero avatar, the app reads that one image from your library. It is stored on your device like the rest of your data, and never uploaded. Decline the permission and the app works normally with the built-in avatars.
Home-screen widget (Android, optional). The flame widget reads your flame from the same on-device database.
Crash reports
If Bati crashes, it writes the error and its stack trace to your device only. When a feature fails without crashing (a backup that could not be written, say), the error message is kept the same way; that message may include the name of a folder or file you chose.
Nothing is transmitted automatically. If you want to help fix a crash, Settings has a “Report a bug” action that opens your own email app with the report filled in. You can read it, edit it, or delete it before sending, and if you never send it, it never leaves your phone. Reports you do send are used only to fix the bug and are not shared onward.
Children
Bati is a general-audience fitness app and is not directed at children under 13. It collects no personal data from anyone, of any age.
Your rights
Because Bati holds no data about you, there is nothing for us to export, correct or delete on your behalf. You hold all of it: either backup row in Settings hands you the whole database as a file, and uninstalling the app erases every record it ever made.
Changes
If this policy changes, the updated version will be published at this URL with a new date. The one change that would matter is a new network destination. The second one arrived on 20 September 2026 and got its own section above, in plain words rather than folded into a list, which is how a third would arrive too.
Contact
Questions about this policy, and anything else (a bug, an idea, a feature you wish existed): feedback.bati@proton.me
Politique de confidentialité de Bati
Dernière mise à jour : 20 septembre 2026
Bati est une application d’entraînement hors ligne d’abord. Pas de compte, pas de serveur à nous, pas d’analytics. Cette page existe parce que les deux stores exigent une URL de politique de confidentialité, et parce que la version courte mérite d’être dite simplement :
Bati ne collecte rien sur vous. Rien de ce que vous enregistrez dans l’application ne quitte votre téléphone, sauf si vous l’envoyez vous-même, délibérément, par e-mail. Deux exceptions, désactivées par défaut toutes les deux : la carte derrière une sortie, qui dit à un hôte de cartes à peu près où vous allez, et une question quotidienne à GitHub sur une version plus récente.
Une phrase de tout cela était plus courte avant. Jusqu’aux sorties, l’application ne faisait
aucune requête réseau, et c’était garanti par le refus de la permission INTERNET elle-même.
Dessiner une carte derrière une marche demande la carte : la permission est donc désormais dans la
compilation, et la version honnête de la promesse est une ligne plus longue plutôt que disparue :
la carte est un réglage, désactivé tant que vous ne l’activez pas, et jusque-là l’application ne
fait toujours aucune requête. Un second interrupteur l’a rejointe le 20 septembre 2026, pour les
copies qu’aucun store ne met à jour. Voir « La carte, et l’hôte unique » et « La vérification de
version, et le second hôte » plus bas.
Ce qui est stocké, et où
Tout ce que Bati enregistre (séances, séries, répétitions, temps de gainage, quêtes, aventures, village, hauts faits, flamme, serment, avatar, réglages et les points GPS d’une sortie) est écrit dans une base SQLite située dans le stockage privé de l’application, sur votre appareil.
- Rien n’est envoyé, synchronisé, sauvegardé chez nous ni partagé avec qui que ce soit.
- Nous ne pouvons pas le lire. Il n’existe aucun serveur pour le lire.
- Désinstaller l’application supprime l’ensemble, et il n’en existe aucune copie ailleurs, sauf si vous en avez exporté une vous-même, voir ci-dessous.
Les sauvegardes que vous faites
Les réglages proposent trois façons d’écrire cette base dans un fichier. Partager ma sauvegarde la remet au partage de votre système. Enregistrer un fichier l’écrit dans un dossier que vous choisissez sur l’appareil. Sauvegarde automatique l’écrit dans un dossier que vous choisissez une fois, puis de nouveau toute seule avant chaque mise à jour de l’application. Ce que ces fichiers deviennent ensuite ne dépend que de vous : l’application ne les envoie nulle part, et n’en a aucun moyen.
- Ce fichier n’est pas chiffré. Quiconque l’ouvre lit votre historique d’entraînement. Rangez-le comme vous rangeriez une photo personnelle, et réfléchissez-y à deux fois avant de le déposer dans un espace partagé.
- Restaurer remplace tout. Importer une sauvegarde échange le contenu de l’application contre le fichier que vous fournissez. La base que vous aviez est conservée sur l’appareil comme copie de secours, dans le même stockage privé, jusqu’à la restauration suivante.
- La sauvegarde automatique est désactivée tant que vous ne l’activez pas, et l’activer, c’est choisir le dossier vous-même : l’application ne peut écrire nulle part où vous ne l’avez pas envoyée. Elle n’écrit qu’avant une mise à jour, uniquement dans ce dossier, et n’y conserve que les cinq fichiers les plus récents, en supprimant les plus anciens qu’elle a elle-même écrits et rien d’autre. Les réglages affichent le dossier utilisé, et l’arrêter tient en une pression ; les fichiers déjà écrits restent où ils sont, ils sont à vous.
- Si le dossier choisi devient indisponible (carte retirée, dossier supprimé, autorisation révoquée), Bati s’arrête et la ligne des réglages repasse sur Désactivée, plutôt que d’échouer en silence en prétendant fonctionner.
- Cela reste local. Le dossier que vous choisissez peut appartenir à une application de cloud (Drive, Dropbox, Nextcloud et d’autres apparaissent dans le sélecteur de dossier d’Android) ; si vous en choisissez un, cette application synchronise le fichier sous sa propre politique de confidentialité. Bati n’apprend rien du dossier choisi au-delà d’y écrire, et n’envoie jamais une sauvegarde où que ce soit : la seule chose qu’elle récupère sur le réseau est la carte décrite plus bas, et rien dans l’application ne sait téléverser un fichier.
Ce que Bati ne fait jamais
- Aucun compte utilisateur, aucune inscription, aucune adresse e-mail requise.
- Aucune analytics, aucune télémétrie, aucun SDK de rapport de crash, aucune publicité, aucun identifiant de suivi.
- Aucun SDK tiers collectant des données.
- Aucun envoi de vos données, jamais. Rien de ce que vous enregistrez (une séance, un record, une trace GPS) n’est transmis. Les deux requêtes réseau que l’application peut faire sont décrites ci-dessous, avec ce que chacune révèle, et chacune attend son propre interrupteur dans les réglages.
La carte, et l’hôte unique
Une sortie (marche, course, vélo) enregistre le terrain parcouru pour pouvoir vous dire la distance. Ces points restent dans la base de données de votre téléphone, comme le reste.
Les dessiner sur une carte demande une carte, et la carte est désactivée par défaut. Une
installation neuve dessine le trajet comme un trait sur le fond sombre de l’application, et ne
demande rien. Les réglages ont un interrupteur pour la carte ; activez-le et Bati demande à
tiles.openfreemap.org des tuiles, les carrés d’image qui composent une carte, et c’est la
première des deux destinations réseau de l’application.
OpenFreeMap sert des données OpenStreetMap, gratuitement, sans clé et
sans inscription.
- Ce que cette demande révèle : la carte est dessinée deux fois, sous vous pendant qu’une sortie est en cours et sous le trajet entier sur son récap. Les tuiles demandées sont celles autour de vous au fil du trajet, puis celles qui couvrent la sortie, donc les demandes disent à cet hôte à peu près où vous êtes pendant que vous avancez, avec l’adresse IP de votre appareil et l’heure. C’est une information de localisation approximative qui sort de votre téléphone, pendant la sortie et pas seulement après, et c’est pourquoi l’application nomme l’hôte ici plutôt que de vous laisser le découvrir dans une capture réseau.
- Ce qu’elle ne révèle pas : le tracé au mètre près, votre allure, votre entraînement, ni quoi que ce soit d’autre dans la base. L’hôte apprend la zone et à peu près quand vous l’avez traversée, jamais la ligne que vous y avez tracée, et rien de la base n’est jamais envoyé.
- Ce qui garde la liste aussi courte : une règle de lint dans le dépôt
(
.biome/plugins/noJsNetwork.grit) rejette tout appel réseau écrit dans le code de l’application (fetch,XMLHttpRequest,WebSocket,EventSource,sendBeacon) en dehors du seul module qui fait la vérification de version décrite plus bas, de sorte que la compilation échoue avant qu’une troisième destination puisse être ajoutée discrètement. La bibliothèque de carte fait ses requêtes nativement, sous cette ligne. - Tant que vous n’activez pas la carte, aucune tuile n’est demandée et l’application ne touche pas du tout au réseau, sortie ou non. Désactivez-la et les deux cartes reviennent au fond uni ; dans les deux sens, c’est une pression.
La vérification de version, et le second hôte
F-Droid et le Play Store remarquent tous les deux la sortie d’une nouvelle version et vous le disent. Une copie installée à la main depuis un APK n’a personne pour l’en informer, et peut rester un an en arrière sans le savoir. Les réglages ont donc un second interrupteur, Chercher les mises à jour, lui aussi désactivé par défaut.
Activé, Bati demande une fois par jour à api.github.com si une version plus récente est
parue, et pose une carte sur l’accueil quand la réponse est oui.
- Ce que cette demande révèle : l’adresse IP de votre appareil et l’heure, soit ce que GitHub apprend de quiconque ouvre la page des versions dans un navigateur. Elle ne porte aucun compte, aucun identifiant, aucun nom d’appareil, et rien de la base de données.
- Ce qu’elle ne fait pas : télécharger quoi que ce soit, installer quoi que ce soit, exécuter quoi que ce soit. La carte ouvre la page des versions dans votre propre navigateur, et la suite vous appartient.
- La désactiver l’arrête aussitôt. Laissée désactivée, aucune requête n’est jamais faite.
Permissions, et pourquoi
Position, précise et approximative (facultatif). Utilisée pour une seule chose : mesurer le terrain parcouru pendant une sortie. L’application lit votre position tant que la sortie dure et s’arrête à la fin de la séance. Les points sont écrits dans la base locale et ne sont envoyés nulle part. Refusez-la, ou ne partez jamais en sortie, et le reste de l’application ne change pas. Android exige que la permission approximative soit demandée avec la précise ; seule la précise est réellement lue, parce qu’une position approximative ne mesure pas une course.
Fonctionner écran éteint (Android). Une sortie maintient un service de premier plan et un wake lock pour que la trace ne s’arrête pas quand le téléphone s’endort dans une poche. C’est à cela que sert la notification permanente pendant une sortie : une application qui suit votre position doit le dire, à l’écran, du début à la fin.
Notifications (facultatif). Demandées quand vous activez un rappel, et utilisées pour la notification de sortie ci-dessus. Les rappels sont programmés localement par le système de votre appareil : il n’y a aucune notification push, donc aucun serveur ne connaît votre appareil.
Internet. Pour la carte, et rien d’autre, et uniquement tant que la carte est activée dans les réglages. Ce que la demande révèle est dans « La carte, et l’hôte unique » plus haut.
État du réseau. Si vous êtes connecté, et par quel type de lien. La bibliothèque de carte le demande pour cesser de réclamer des tuiles quand il n’y a rien pour les transporter. Elle n’en tire aucune identité, aucun nom de réseau et aucune position, et cela n’a de sens que grâce à la permission ci-dessus. Bati refuse délibérément la permission Wi-Fi voisine, qui nommerait les réseaux autour de vous : un nom de réseau est une position par un autre chemin.
Photos (facultatif). Si vous choisissez une photo comme avatar, l’application lit cette image dans votre galerie. Elle est stockée sur votre appareil comme le reste, et jamais envoyée. Vous pouvez refuser : l’application fonctionne normalement avec les avatars intégrés.
Widget d’écran d’accueil (Android, facultatif). Le widget de flamme lit votre régularité dans la même base locale.
Rapports de crash
En cas de plantage, Bati écrit l’erreur et sa trace uniquement sur votre appareil. Quand une fonction échoue sans plantage (une sauvegarde impossible à écrire, par exemple), le message d’erreur est conservé de la même façon ; ce message peut contenir le nom d’un dossier ou d’un fichier que vous avez choisi.
Rien n’est transmis automatiquement. Si vous souhaitez aider à corriger un bug, les Réglages proposent « Signaler un bug », qui ouvre votre propre application e-mail avec le rapport pré-rempli. Vous pouvez le lire, le modifier ou le supprimer avant envoi, et si vous ne l’envoyez jamais, il ne quitte jamais votre téléphone. Les rapports envoyés servent uniquement à corriger le bug et ne sont transmis à personne.
Enfants
Bati est une application de sport tout public, non destinée aux enfants de moins de 13 ans. Elle ne collecte aucune donnée personnelle, quel que soit l’âge.
Vos droits
Comme Bati ne détient aucune donnée vous concernant, nous n’avons rien à exporter, corriger ou supprimer pour vous. Vous détenez l’intégralité : l’une ou l’autre ligne de sauvegarde, dans les réglages, vous remet la base entière sous forme de fichier, et désinstaller l’application efface chaque enregistrement qu’elle a produit.
Modifications
Si cette politique change, la version à jour sera publiée à cette URL avec une nouvelle date. Le seul changement qui compterait serait une deuxième destination réseau, et il serait écrit ici en toutes lettres plutôt que glissé dans une liste.
Contact
Questions sur cette politique, et tout le reste (un bug, une idée, une fonctionnalité qui vous manque) : feedback.bati@proton.me