Open source · MIT · 9 cities · 5 continents · 7 languages
Multimodal trip planning for any city.
opentransit turns a city's open transit data into apps people want to use: bus, subway, rail, ferry, cable car, bikes, taxis and car + transit in one itinerary, with live vehicles, reminders of when to leave and estimated fares. Running today in Bogotá, Toronto, Boston, Santiago, Rome, Lisbon, Casablanca, Kuala Lumpur and Brisbane. No API keys, no lock-in.
What it looks like, on live Bogotá data






What you get
Multimodal planner
OpenTripPlanner 2 combines bus, subway, rail, ferry, cable car, own bike, shared bike, taxi and car + transit in one itinerary, with depart/arrive time and an accessible option.
Live vehicles
GTFS-Realtime fetched once by the API and fanned out over SSE with deltas; markers interpolated and tinted by ETA.
Arrival board & "Locate my bus"
Next arrivals grouped by route and the station → route → next buses flow, always saying what is live and what is scheduled.
Shared bikes (GBFS)
Any GBFS system plugs in through configuration: rental legs with availability, per-ride or per-minute pricing and stations on the map. N networks per city.
Taxi & ride-hailing
The official taxi tariff computed per leg and hand-off links to the city's apps, as a direct ride or as the first and last mile (kiss & ride) of a transit trip.
Car + transit (CDS)
Paid parking zones with live spaces from a CDS (Curb Data Specification) feed: the app suggests leaving the car by the station and riding on, with the parking fee in the fare.
Scheduled trips
Home → Work every day or one appointment: a reminder the evening before, a live re-plan twenty minutes before leaving and a "time to leave" that opens follow-along. All on the phone.
Follow along
Trip tracking with next stops, "get off here", Live Activities and the Dynamic Island on iOS, Live Updates on Android, an Apple Watch app with a complication and a shareable ETA link.
City geocoder
Stops, places (OpenStreetMap) and, where the city has one, its official address geocoder and neighbourhoods: in Bogotá, the cadastre resolves "Cra 7 # 72-41" and "Calle 127 con Carrera 7".
Conversational assistant
A language model that answers only through the API's tools — plan, next buses, alerts — and returns cards that open the real screen. Provider and key per city.
Alerts & freshness
Feed alerts with severity, a home carousel, and honest labels when realtime fails.
Estimated fares
When the GTFS has no fares, a configurable flat fare per city, always labelled as estimated.
Favorites & recents
Home, Work, stops and routes with live context. Local to the device, no account.
Admin panel
Fares, flags, links, services, brand, mobility, geocoder, assistant and landing editable at runtime, with history and role-based accounts.
Analytics without surveillance
Aggregated usage metrics with a k ≥ 5 threshold, rotating identifiers and geohash cells: you learn how the app is used without learning who uses it.
Per-city landing
A white-label public page generated from each city's configuration, in the city's language.
Seven languages
Spanish, English, Portuguese, French, Italian, Malay and Arabic (right-to-left) across the web app, the mobile app and the admin panel; the phone picks, the rider can switch. Adding a language is one file per app.
PWA + iOS + Android
Installable web app and a Flutter app with universal links, follow-along mode and remote forced updates.
Architecture
Three independent repositories, one router per city and open data as the only input. One API instance serves several cities (nine today); each city is a YAML file.
Built on open data
GTFS
routes, stops, timetables
GTFS-Realtime
positions, trip updates, alerts
GBFS
shared bikes and scooters
CDS / MDS
parking zones with spaces, policies and geographies (Open Mobility Foundation)
OpenStreetMap
streets, bike lanes, services; OpenFreeMap basemap
City data
the official geocoder, neighbourhoods and districts where the city publishes them
Cities
Nine cities on five continents, each with its own graph, its brand and whatever realtime its agency publishes. Where no open GTFS-Realtime exists, the app shows the timetable and says so.
Bogotá, Colombia
TransMilenio, SITP and TransMiCable (GTFS + GTFS-Realtime, ~6,000 buses), public bikes (GBFS, 252 stations), 819 paid-parking zones with live spaces (CDS) and the cadastre's geocoder.
bogota.opentransit.techToronto, Canada
TTC subway, streetcars and buses (GTFS + GTFS-Realtime, ~1,000 vehicles live) and Bike Share Toronto (GBFS, over a thousand stations). Arrivals are paired by stop because the feed shares no trip ids with the schedule.
toronto.opentransit.techBrisbane, Australia
TransLink trains, buses, CityCats and the G:link across South East Queensland (GTFS + GTFS-Realtime: vehicles, arrivals and alerts).
brisbane.opentransit.techRome, Italy
ATAC metro, trams and buses with Roma Mobilità's data (GTFS + GTFS-Realtime: positions, arrivals and alerts).
roma.opentransit.techLisbon, Portugal
Carris Metropolitana's 941 lines across the 18 municipalities of the metro area (GTFS + live positions and alerts).
lisboa.opentransit.techKuala Lumpur, Malaysia
LRT, MRT, monorail and Rapid KL buses from data.gov.my's three GTFS feeds merged into one, plus live bus positions.
kualalumpur.opentransit.techCasablanca, Morocco
Casa Tramway's tramway and busway from a community GTFS; scheduled times until Morocco publishes realtime data.
casablanca.opentransit.techBoston, United States
MBTA subway, buses, commuter rail and ferries (GTFS + GTFS-Realtime) and Bluebikes (GBFS, 600+ stations).
boston.opentransit.techSantiago, Chile
Metro, Red buses and EFE trains from DTPM's GTFS, plus Bike Santiago (GBFS). Scheduled times: Chile has no open GTFS-Realtime yet.
santiago.opentransit.techAdd your city
One YAML, a GTFS feed and an OpenStreetMap extract. We will help you through it.
How to add a cityRepositories
- opentransit-api
Multi-tenant backend: GTFS, GTFS-RT, GBFS, CDS/MDS, OpenTripPlanner, geocoding, assistant, anonymous pushes, editable config.
Python · FastAPI · PostGIS
- opentransit-web
Web app (PWA), admin panel and per-city landing.
Next.js · MapLibre
- opentransit-mobile
iOS and Android app, Apple Watch and Live Activities.
Flutter · Swift · MapLibre
Why
Open data
Only public, openly licensed feeds. If your city publishes GTFS, it can use it today.
No lock-in
Nothing proprietary in the path: OpenTripPlanner, MapLibre, OpenFreeMap, Photon. Every piece is replaceable by configuration.
Cities own it
Each city deploys its own instance, with its brand, its panel and its data.
Honest with users
Estimates are shown as estimates; unverified data as unverified.
Join in
Cities, agencies, developers and designers. Open an issue, propose a city or send a pull request.