Skip to content

mobilis go

mobilis go launches the passenger TUI: a keyboard-driven dashboard for browsing GTFS transit schedules locally.

mobilis go                  # start and choose a feed interactively
mobilis go <feed_id>        # load a specific feed on startup

If <feed_id> refers to a feed that has not been downloaded yet, mobilis go will fetch and import it automatically before opening the dashboard.

Keybindings

Key Action
Q Quit
R Reload all data

Navigation between tabs uses the mouse or the arrow keys when a tab is focused.


Tab: Transit System

The first tab is the entry point for feed management within the TUI.

Two search bars are available at the top of the tab:

Search provider or feed name
Fuzzy text search across the bundled Mobility Database catalog (≈ 2 500 GTFS feeds worldwide). Press Enter or click Search to filter the catalog table below.
Search place
Geocodes a place name using the Nominatim API, then filters the catalog to feeds whose geographic bounding box contains that point. After the geocoder returns results, select the correct place and click Find feeds for place.

Downloaded feeds table

Lists every feed already downloaded into ~/.mobilis/feeds/. Select a row and click Load selected feed to open it in the dashboard.

Catalog feeds table

Lists all GTFS feeds from the Mobility Database catalog. Select a row and click Load selected feed to download, import and activate the feed — all in one step. This may take up to a minute depending on feed size.

Feed IDs

Catalog feeds use IDs of the form mdb-<number> or tld-<number>. Feeds you add manually (e.g. incofer, mbta) can use any name that is also the directory name under ~/.mobilis/feeds/.


Tab: Feed info

Displays metadata and basic statistics for the currently loaded feed.

Feed information

Fields read from feed_info.txt (when present in the feed):

Field Description
feed_publisher_name Organisation that publishes the feed
feed_publisher_url Publisher's website
feed_lang Default language of the feed
feed_start_date First day covered by the feed
feed_end_date Last day covered by the feed
feed_version Feed version string
feed_contact_email Contact email for feed issues
feed_contact_url Contact URL for feed issues

When feed_info.txt is absent from the feed, a notice is shown.

Feed stats

Metric Source
Routes Count of rows in routes.txt
Stops Count of rows in stops.txt
Stations Count of stops with location_type = 1 (when available)

Tab: Trips by route

Browse the trip schedule for any route in the loaded feed.

Trips by route tab screenshot

Layout

The tab is divided into three columns:

Column 1 — Search settings + Routes

Select an agency from the dropdown, set a date (default: today) and optionally set a time window with lower limit and upper limit (e.g. 07:00:00). Click Refresh trips (or press Enter in a filter field) to apply. The routes table below lists all routes for the selected agency.

Column 2 — Trips

After selecting a route, the matching trips are shown split into two groups:

  • Direction 0 — outbound trips.
  • Direction 1 — inbound (return) trips.

Each row shows departure time, first stop (From) and last stop (To).

If no trips are found for the current date, a persistent warning suggests the next date on which service runs.

Column 3 — Stop times

After selecting a trip in column 2, the full stop-time sequence (arrival time and stop name) is shown here.


Tab: Trips by stop

Browse all upcoming arrivals at a chosen stop.

Layout

The tab is divided into three columns:

Column 1 — Search

Select a route to filter the stops list. Additional search options (by stop name, place and radius) are reserved for a future release.

Column 2 — Stops

Lists every stop served by the selected route. Select a row to view its arrivals.

Column 3 — Next arrivals

After selecting a stop, shows all trips that call at that stop on the active date, with the route, scheduled arrival time and headsign.


GTFS queries

All data is read from ~/.mobilis/feeds/<feed_id>/<feed_id>.duckdb using a set of DuckDB temporary macros defined in src/mobilis/queries.sql:

Macro Purpose
routes_by_agency(agency_id) Routes for a given agency
active_trips_by_route(date, route_id) Trips active on a date
stop_times_by_trip(trip_id) Stop sequence for a trip
stops_by_route(route_id) Stops served by a route
trips_by_stop(date, stop_id) Arrivals at a stop on a date