GTFS Viz
May 4, 2026 · View on GitHub
Visualize, analyze, and edit GTFS transit data entirely in-browser with DuckDB WASM. No backend required.

Features
- Upload GTFS zips or load example datasets — all processing client-side
- Interactive maps and tables for stations, stops, and pathways
- Edit stations, stops, and pathway connections with live preview
- Pathfinding between station parts with traversal times
- Export edited data back to GTFS CSV format
- CLI with local DuckDB database and browser dashboard
- DuckDB extension installable from any DuckDB instance
Quick Start
Web App
Visit gtfs-viz-production-f1a4.up.railway.app or run locally:
yarn install --ignore-engines && yarn build:extension && yarn dev
CLI

npm install -g @gabrielahn/gtfs-viz-cli
gtfs-viz import /path/to/feed.zip
gtfs-viz stations --name "Park"
gtfs-viz station "Park Street"
gtfs-viz examples # See all commands
DuckDB Extension
The CLI and web app use the GTFS DuckDB extension for all station analysis, pathway queries, and pathfinding. See the extension docs for standalone usage.
Project Structure
packages/
duckdb-extension/ DuckDB extension (C++ native + TypeScript API + SQL)
web/ React web application (DuckDB WASM, Deck.gl, TanStack)
cli/ CLI tool (npm: @gabrielahn/gtfs-viz-cli)
Development
yarn install --ignore-engines
yarn build # Build all (extension -> web -> cli)
yarn dev # Web dev server at localhost:5173
yarn build:extension # Build DuckDB extension TS layer
yarn build:cli # Build CLI only
yarn check # Type-check all packages
Deploy
Railway via railpack.json: yarn build outputs to dist/, served by Caddy as SPA.