GTFS Viz
June 15, 2026 · View on GitHub
Lightweight GTFS data visualizer and editor. Import, browse, edit, and export transit feeds — runs entirely client-side with DuckDB.

Features
- Import GTFS zips or load example datasets — no backend, no uploads
- Browse stations, stops, routes, and pathways on interactive maps and tables
- Edit stations, stops, routes, and pathway connections with live preview
- Draw and edit route shapes with drag-to-move points
- Compare trip schedules side-by-side across services
- Pathfinding between station parts with traversal times
- Export edited data back to GTFS CSV format
- CLI with local DuckDB database and browser dashboard
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 routes --type Bus
gtfs-viz station "Park Street"
gtfs-viz examples # See all commands
Test the CLI locally (development)
yarn install --ignore-engines
yarn cli:install-local # Build all packages and install CLI globally
gtfs-viz --help
Or use yarn cli:link to symlink instead of install. To run without installing:
yarn build
yarn cli import /path/to/feed.zip # Uses node packages/cli/dist/index.js
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.