---
title: "Deploy transit-sonified"
description: "Transit schedules played as music on a map, in the browser with DuckDB-WASM"
category: "Other"
url: https://railway.com/deploy/transit-sonified
---

# Deploy transit-sonified

Transit schedules played as music on a map, in the browser with DuckDB-WASM

**[Deploy transit-sonified on Railway](https://railway.com/template/transit-sonified)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/transit-sonified/manifest.json

- **Creator:** My Workspace
- **Category:** Other

## Template content

### transit-sonified

- **Source:** https://github.com/gabrielAHN/transit-sonified
- **Health check:** /
- **Public domain:** Yes

## Documentation

# Deploy and Host Transit Sonified on Railway

Transit Sonified plays a day of transit schedules as music on a map. Every departure in the New York Subway, Madrid Metro, Tokyo Metro and Hong Kong MTR is a note, and its station lights up on the map as it plays. The [GTFS DuckDB extension](https://github.com/gabrielAHN/gtfs-duckdb) turns the schedules into notes inside DuckDB-WASM, and [Strudel](https://strudel.cc)'s audio engine voices them. Each city has its own scale and instrument, written as a Strudel pattern you can edit live from the ♪ button.

Live demo: https://transit-sonified-production.up.railway.app

## About Hosting Transit Sonified

It's a static Vite + React site with no backend. Railpack builds it (`railpack.json`), and the build downloads the GTFS DuckDB extension's browser builds from its [v1.0.1 release](https://github.com/gabrielAHN/gtfs-duckdb/releases/tag/v1.0.1) and checks their SHA-256 sums. Caddy then serves `dist/` (`Caddyfile`) with the WASM content type, the precompressed schedule database and the city URLs (`/nyc`, `/madrid`, `/tokyo`, `/hong-kong`). The schedules ship as one prebuilt DuckDB file, and every query runs in the visitor's browser. A public domain is generated on deploy, and Railway checks `/` before sending it traffic.

## Why Deploy Transit Sonified on Railway

Railway builds the site straight from the GitHub repository and serves it over HTTPS on its own domain, with no Dockerfile, server code or variables to set. Deploy it and open the link.

## Common Use Cases

- Hear how a city's transit network moves through a day, with rush hours building as departures pile up.
- See how the GTFS DuckDB extension's `gtfs_sonify_stops` and `gtfs_sonify_events` turn a GTFS schedule into notes, with every query in one file (`src/engine/queries.ts`).
- Use it as a reference for running a DuckDB extension in the browser with DuckDB-WASM, deck.gl and MapLibre.

## Dependencies for Transit Sonified

- [GTFS DuckDB](https://github.com/gabrielAHN/gtfs-duckdb) v1.0.1 browser builds (`wasm_eh`, `wasm_mvp`), downloaded from its GitHub release at build time.
- [DuckDB-WASM](https://github.com/duckdb/duckdb-wasm), [deck.gl](https://deck.gl), [MapLibre](https://maplibre.org) with the CARTO Dark Matter basemap, and [Strudel](https://strudel.cc). The instruments load in the browser from Strudel's soundfont host.
- The schedules are built from the MTA subway, CRTM Metro de Madrid, mkuran.pl Tokyo rail and Just Use Wheels Hong Kong GTFS feeds, listed in the repository README.

### Deployment Dependencies

None. There are no variables to set. Optional build variables:

| Variable | What it does |
|---|---|
| `GTFS_EXTENSION_VERSION` | Build with another GTFS DuckDB release, e.g. `v1.0.0` |
| `GTFS_EXTENSION_SOURCE` | Use a GTFS DuckDB extension repository `.tar.gz` from a path or URL instead of the release |

Transit Sonified is licensed AGPL-3.0-or-later. Source: https://github.com/gabrielAHN/transit-sonified


## Similar templates

- [Rocky Linux](https://railway.com/deploy/rocky-linux) — Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀
- [Foundry Virtual Tabletop](https://railway.com/deploy/X5tR6G) — A Self-Hosted & Modern Roleplaying Platform
- [Letta Code Remote](https://railway.com/deploy/letta-code-remote) — Run a Letta Code agent 24/7. No inbound ports, just deploy.

Open this page in a browser: https://railway.com/deploy/transit-sonified
