Besser Bahn
dev.chuk.betterbahn
Zapstore _@zapstore.dev Republished from GitHub / F-Droid by the Zapstore main account.
First release: Sep 22, 2025, 5 total releases.
Most recent release: Sep 7, 2026.
Appears in 0 app stacks.
0 sats / 0 zaps received in the past year.
Sats Received
Underlying data available via MCP: app_zaps, app_releases.
Zap Count
Underlying data available via MCP: app_zaps, app_releases.
Releases
- Sep 7, 2026 2.5.0**2.5.0** — Ein-/Ausstiegsseite, Abfahrtstafel im Bahnsteig-Layout und ein Update-Hinweis in der App. Toolchain: Flutter 3.47.0, JDK 21 (reproduzierbar). ### Neue Features - **Auf welcher Seite du aussteigst** (links oder rechts): als Pfeil direkt am Gleis-Chip in der Timeline, im Umstiegs-Hinweis und oben in der Bahnhofskarte. Berechnet aus der Geometrie der Strecke, nicht geraten. - **Abfahrtstafel im Bahnsteig-Layout**: Abfahrten nach Gleis gruppiert, mit den Halten darüber. - **Update-Hinweis**: Wer die APK direkt lädt, erfuhr nie von einer neuen Version. Die App fragt jetzt einmal am Tag die GitHub-Releases ab und zeigt einen Streifen im Suche-Tab plus einen Punkt am Menü. Abschaltbar unter Einstellungen → Über. Es wird nichts über Gerät oder Nutzer übertragen. Wer aus F-Droid, IzzyOnDroid, Neo Store, Droid-ify oder Obtainium installiert hat, sieht nichts davon, dort updatet der Client selbst. - **Zahnrad im Profil**: Der Profil-Tab hatte keinen Weg in die Einstellungen, jetzt sitzt es neben dem Abmelden. ### Fixes - **Uhrzeiten waren abgeschnitten** (#98): Die Zeitspalte in der Fahrt-Ansicht war fest 40px breit, bei größerer Systemschrift stand da "15:4" statt "15:43". Spalte und Zeilenhöhen wachsen jetzt mit der Schrift.
More…
- **Ticket zeigte die falsche Klasse** (#99): Die App las nur eine von fünf Auftragsarten. Bei allen anderen fiel jedes Feld auf seinen Default zurück, und der Default für die Klasse war hart 2. Klasse. Jetzt werden alle Arten gelesen, und ohne Angabe im Payload zeigt die App gar keine Klasse mehr statt einer erfundenen. Das erklärt auch den Platzhalter "Einzelkarte" und den fehlenden Barcode bei solchen Tickets. - Bahnhofsplan lädt jetzt auch an S-Bahn-Halten (Hamburg-Altona(S) und Konsorten). - Routenkarte lässt sich weit genug rauszoomen. - Suchleiste sieht auf allen drei Bahnhof-Tabs gleich aus. - Wagenreihung: Nummer am End- und Kopfwagen liegt auf einer Höhe mit den Mittelwagen. - Suche: Highlight-Badge sitzt als Karten-Header statt mittig auf der Kante. - App-Icon: das BB stand 24px zu weit rechts und 10px zu tief, jetzt mittig über den Gleisen. ### Unter der Haube - `healthcheck.py` prüft zusätzlich die GitHub-Releases-API, auf der der Update-Hinweis aufsetzt. - Englische README samt Sprach-Umschalter. - Dependabot für die Python-Abhängigkeiten, CI-Actions aktualisiert. Verifiziert: analyze sauber, 893 Tests grün, signierte Release-APKs (arm64-v8a / armeabi-v7a / x86_64). Welches APK: fast jedes aktuelle Handy nimmt **arm64-v8a**. - Aug 21, 2026 2.4.0**2.4.0** — erstes echtes Release (kein Pre-Release mehr). Toolchain: Flutter 3.47.0, JDK 21 (reproduzierbar). Sammelt alles, was seit 2.3.1 aufgelaufen ist, und macht daraus die erste stabile Version. ### Neue Features - **Adressen & Orte als Ziel** (#75): Tür-zu-Tür suchen statt den Haltestellennamen raten. - **Verschlüsseltes lokales Backup** (#72): Sicherung mit Passwort, Wiederherstellung inklusive. - **Gruppenspar-Check** (#67): Hinweis, wenn getrennt buchen billiger ist als zusammen. - **Fahrradregeln pro Zug und Verbindung** (#68): auf einen Blick, ob und wie das Rad mitkommt. - **Zuverlässigkeit pro Strecke** (#63): deine eigene Erfahrung fließt in die Verbindungsdetails ein.
More…
- **Betreiber der Fahrt** (erixx / metronom / DB …) wird jetzt angezeigt. ### Barrierefreiheit - **Screenreader** (#74): Verspätung, Auslastung und Gleiswechsel werden vorgelesen statt nur als Symbol gezeigt. - **Aufzugstörung am Umsteigebahnhof** (#73) warnt schon beim Umstieg. ### Fixes - Gekaufte Reise wurde doppelt geführt, als Ticket und als gemerkte Reise (#80). - Gespeicherte Reise ging direkt nach App-Start verloren. - Gespeicherte Routen sind wieder dauerhaft sichtbar, flach statt Kasten im Kasten (#38). - Abgeschnittene HAFAS-Kennungen von BVG, VMT und saarVV ersetzt. ### Unter der Haube - Toolchain hochgezogen: Flutter 3.47.0, Gradle 8.14.3, AGP 8.12.3, Kotlin 2.2.21, JDK 21. Neue reproduzierbare Baseline (Details in BUILDING.md). Ältere Tags bis 2.3.1 weiter mit Flutter 3.41.9 bauen. - CI: analyze und test laufen jetzt auf jedem Pull Request. - Repo-weit `dart format` (Dart-3.13-Formatter), damit Diffs künftig klein bleiben. Verifiziert: analyze sauber, 850 Tests grün, signierte Release-APKs (arm64-v8a / armeabi-v7a / x86_64). - Jul 23, 2026 2.2.0Das erste reguläre Release seit 2.0.5 — es bündelt alles aus den Testversionen 2.1.0-rc.1 … 2.2.0-rc.2. Schwerpunkt: die auf GitHub gemeldeten Bugs, die Bushaltestellen-Karte und der Umstieg. ## Reisen - **Aus Versehen weggewischte Reise? Jetzt „Rückgängig".** Beim Scrollen wurde eine leicht schräge Bewegung als Wisch gelesen und die Reise war weg — ohne Weg zurück. Die Meldung hat jetzt einen **Rückgängig**-Knopf und bleibt länger stehen. Sofort gelöscht wird nur der Eintrag im Handy; die gemerkte Reise im DB-Konto und das heruntergeladene Offline-Paket verschwinden erst, wenn du die Meldung ungenutzt weglaufen lässt. Undo ist damit ein reines Zurückholen. Zusätzlich muss die Wischgeste länger sein, damit reines Scrollen nichts mehr auslöst. *(#51)* - **Benachrichtigungen der alten Verbindung hören auf.** Markierst du eine Verbindung als verpasst oder tauschst du einen Zug gegen eine spätere Abfahrt, kamen weiter Erinnerungen für die alte Fahrt. Jetzt geht die alte still; beim Tausch wandert die gespeicherte Reise auf den neuen Zug mit. Die Glocke im Reiseplan schaltet ab sofort **alle** Benachrichtigungen einer Reise, nicht nur die Live-Begleitung. *(#58)* ## Reiseplan & Umstieg
More…
- **Ein getauschter Zug verschiebt die Anschlüsse dahinter.** Nimmst du mit den Pfeilen eine spätere (oder frühere) Abfahrt — z. B. Kiel → München und du nimmst den nächsten ICE ab Kiel —, blieb der Anschluss danach stehen, als wäre nichts gewesen. Jetzt wird alles hinter dem getauschten Zug ab der neuen Ankunftszeit neu gesucht und die erste wirklich erreichbare Verbindung genommen. Während gesucht wird, steht das über den Abschnitten dran; findet die Suche nichts, sagt die App das. - **Gleiswechsel steht auch am Umstieg.** Die Umstiegszeile (und die Karte, die man darüber öffnet) zeigte noch das Gleis aus dem Suchergebnis. Jetzt live, mit Hinweis: „Gleis 4 → Gleis 7 (statt 6)". Der Fußweg-Umstieg hatte vorher gar keine Gleise. *(#50)* - **„Weitere Abfahrten" funktioniert wieder bei IC/EC und U-Bahn.** Die App hat der DB dort eine Verkehrsmittel-Angabe geschickt, die sie nicht kennt, und die Anfrage wurde komplett abgelehnt — ohne Fehlermeldung, es sah aus wie „keine Alternativen". - **Zweizeiliger Haltestellenname wird nicht mehr abgeschnitten.** Lange Namen wie „Frankfurt (Main) Flughafen Fernbahnhof" wurden in der Haltestellenliste unten abgesägt. *(#57)* - **Bus: die ganze Route statt einer einzelnen Haltestelle.** Bei Ringlinien wurde der Ausstieg falsch zugeordnet, dann stand da nur ein Halt und der Rest der Fahrt lag hinter „Halte vorher/danach". *(#56)* ## Karte - **Bushaltestellen zeigen Straßenseite und Fahrtrichtung.** Haltestellen wie „Gravelottestraße" oder „ZOB, Kiel" gibt es mehrfach — pro Richtung ein Mast. Bisher kam dort nur eine Fehlermeldung, weil bahnhof.de nur Bahnhöfe kennt. Jetzt wird die Karte aus offenen Daten gebaut (OpenStreetMap + die deutschlandweiten Fahrplandaten DELFI): jeder Mast einzeln, der Steig-Buchstabe aus deinem Ticket markiert **deinen** Mast, und an jedem steht, wohin es geht. - **Der richtige Mast auch ohne Steig-Buchstaben.** An Landstraßen-Haltestellen ist an keinem Mast ein Buchstabe angeschrieben. Die App leitet deinen Mast dann aus der Fahrt ab — erst über Linie + Fahrtziel laut Fahrplan, sonst über die Fahrtrichtung (in Deutschland wird rechts gehalten). Am Mast steht dazu, woher die Info kommt, und wenn nichts eindeutig ist, wird nichts markiert statt geraten. *(#55, #54)* - **Bahnhof-Karte und Reise-Karte sind getrennt.** Aus einer Reise ein Gleis zu öffnen zog vorher den Bahnhof-Tab auf diesen fremden Bahnhof; der Tab behält jetzt, was du eingestellt hast. *(#54)* ## Profil & Konto - **Abgelaufene BahnCard wird als abgelaufen erkannt.** Sie sah aus wie eine gültige. Jetzt ausgegraut, mit „Abgelaufen"-Label. Liefert die Bahn gar keine Karte mehr, steht dabei, dass abgelaufene Karten nicht mehr mitkommen. Und: eine abgelaufene Karte wird in der Suche **nicht mehr** als Ermäßigung vorbelegt — das hat still falsche Preise erzeugt. *(#53)* - **Aktualisieren zieht jetzt auch die Tickets** (Sitzplatz, Verbindung, Barcode wurden vorher nur zufällig mal erneuert), und ein Aktualisieren, das scheitert, meldet sich per Snackbar statt so auszusehen wie „nichts Neues". *(#52)* ## Träwelling - **Feed lädt wieder, Login hält.** Der Feed fragte eine Adresse ab, die es nicht mehr gibt. Und jeder fehlgeschlagene Token-Refresh löschte die Anmeldung — ein Funkloch reichte zum Ausloggen. Jetzt fliegt die Anmeldung nur noch raus, wenn Träwelling den Zugang wirklich ablehnt. *(#42, #39)* ## Split-Ticket - **Geteilter DB-Link wird wieder aufgelöst.** Die Adresse, über die der Link erkannt wurde, ist von der Bahn dichtgemacht — deshalb kam immer „Konnte keine Verbindung aus dem Link lesen". Läuft jetzt über die App-Schnittstelle der DB; erkannt werden voller Link, `int.bahn.de`-Link, ein weitergeleiteter Teilen-Text, `vbid=…` und die nackte ID. *(#44)* ## Optik - **Ruhigere Hinweisboxen.** Hinweise, Warnungen und Ausfälle hatten jeder ihr eigenes Aussehen — ein stehender Hinweis war so laut wie ein ausgefallener Zug. Jetzt eine gemeinsame Form, Farbe nur dort, wo sie etwas bedeutet. *(#38, erster Schritt)* ## Hinweis zur Installation Signiert mit demselben Schlüssel wie 2.0.x — ein Update über eine bestehende Installation ab 2.0.0 funktioniert. Ladet die APK passend zu eurem Gerät: **arm64-v8a** für praktisch alle Handys der letzten Jahre, **armeabi-v7a** für ältere, **x86_64** im Wesentlichen für Emulatoren. <sub>Gebaut mit Flutter 3.41.9 / JDK 21.</sub> - Jul 2, 2026 2.0.4## Besser Bahn 2.0.4 🚆 **GMS-free release** — removes the last proprietary dependency (issue #10). - **No Google Play Services.** `geolocator` (which pulled `play-services-location`) is replaced by [`libre_location`](https://pub.dev/packages/libre_location) — pure AOSP `LocationManager`, zero proprietary deps. Works on de-Googled devices (GrapheneOS/CalyxOS). - **Minimal permissions.** libre_location ships a background-tracking manifest; we strip everything beyond `ACCESS_FINE/COARSE_LOCATION` (no background location, activity recognition, foreground service, wake lock, battery-ignore). "Mein Standort" stays a one-shot foreground fix. - Verified in the APK: **0** play-services entries, **0** background permissions. ### Reproducible build - Flutter 3.41.9 (Dart 3.11.5) · JDK 21 · AGP 8.9.1 · Gradle 8.12 · R8 full mode
More…
- Built from tag `2.0.4+5` (`99a1a54be095962a2f21f18634c4c62ec2abad68`), clean tree - `flutter pub get` → `flutter-app/scripts/rb-strip-buildid.sh` → `flutter build apk --release --split-per-abi` - See [BUILDING.md](https://github.com/chukfinley/Besser-Bahn/blob/main/BUILDING.md) ### Download Pick the APK matching your CPU architecture — most modern devices use **arm64-v8a**. - Sep 22, 2025 1.0.3**Full Changelog**: https://github.com/chukfinley/Besser-Bahn/compare/1.0.2+5...1.0.3+7 Fixed Icon not displaying on Android