TransitOS
An open-source Android transit app for Metrovalencia: live arrivals, trip planning and an interactive network map. No ads, no tracking, and a provider architecture so any operator can be added without touching the app.
- Role
- Solo developer · design to Play Store
- Stack
- v1.0.3
- in production on Google Play
- 3
- languages: English, Spanish and Valencian
- AGPL-3.0
- open source, no ads, no tracking
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.
Drafted with AI, edited by hand. I publish it when it sounds like me.