GTFS Viz

June 15, 2026 · View on GitHub

Deploy on Railway npm

Lightweight GTFS data visualizer and editor. Import, browse, edit, and export transit feeds — runs entirely client-side with DuckDB.

GTFS Viz Demo

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

GTFS Viz CLI Demo

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.