In production 2026

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.

Year

2026

Stack

AndroidKotlinJetpack ComposeMaterial 3KtorKoinosmdroidClean Architecture

Links

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 AppResult so 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.