TransitOS
An open-source Android client for public transport, starting with Metrovalencia (FGV). Live arrivals, a trip planner and an interactive network map. No ads, no tracking, and a provider architecture so any operator can be added without touching the app.
TransitOS is an open-source Android app for public transport in Valencia. It covers Metrovalencia (FGV) end to end: live arrivals, trip planning and an interactive network map. No ads, no tracking, no analytics.
What it covers
- Live arrivals per station and line, through a typed
AppResultso the UI tells loading, data and error apart. - Trip planner with departure or arrival modes and a configurable transfer buffer.
- Network map on OpenStreetMap tiles: every station, the official line colours, tap a station for its lines and next arrivals.
- Saved routes with custom labels (“Home”, “Work”), stored locally with DataStore.
- Themes and i18n: system / light / dark / AMOLED pure black, plus English, Spanish and Valencian.
The provider model
Every operator exposes data differently: different endpoints, schemas and quirks. The trap is letting one operator leak into the rest of the app, so the domain layer defines a single TransitRepository contract and each operator lives in its own module.
Presentation (app, feature-*, core-ui, core-design)
| depends on
v
Domain (core) -> models, repository contracts, AppResult
| implemented by
v
Data (provider-*, core-network, core-data) -> repository impls, Ktor, DataStore
:provider-metrovalencia implements the contract against FGV’s data. Adding a new operator means adding one module: create :provider-emt, implement TransitRepository, register its Koin module in :app. The UI, the planner and the map do not change. That is what makes the multi-city plan realistic instead of a rewrite each time.
Stack
- Kotlin with Coroutines and Flow, Clean Architecture
- Jetpack Compose (BOM-managed), Material 3, dynamic colour
- Ktor for networking, Koin for dependency injection, DataStore for preferences
- osmdroid for the network map, Gradle Version Catalog for versions
Status
In production. On Google Play, with signed APKs on the releases page (latest v1.0.3). Metrovalencia is fully covered. Open source under AGPL-3.0; not affiliated with or endorsed by Metrovalencia or FGV.
Source: github.com/IgnacioLD/TransitOS.
Written with AI assistance. I plan to rewrite it by hand.