For all of your transit "crayon" needs, edit GTFS feeds to your hearts content with this web editor for GTFS static feeds. Inspired by geojson.io, this is meant to be a simple static site where you can upload, edit, and download files.
  • TypeScript 99%
  • HTML 0.4%
  • JavaScript 0.3%
  • Shell 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Max Katz-Christy 2fdec820bb
All checks were successful
Build and Deploy / build (push) Successful in 30s
Vulnerability scan / vuln-scan (push) Successful in 8s
chore(release): bump version 0.40.0 -> 0.40.1
2026-10-01 00:41:20 +02:00
.forgejo/workflows ci: check out from the public Forgejo URL in the vuln scan 2026-09-30 20:01:09 +02:00
.github/workflows ci: add osv-scanner vulnerability gate on GitHub and Forgejo Actions 2026-09-30 19:49:34 +02:00
.husky feat(spec): make the GTFS spec layer verbatim against the April 2026 reference 2026-08-06 01:39:54 +02:00
docs docs: rewrite README, refresh implementation status and CONTRIBUTING 2026-09-30 20:10:14 +02:00
fixtures/flex feat(flex): make a zone row editable on every trip 2026-08-16 18:47:32 +02:00
LICENSES chore: add CC-BY-4.0 license text and drop unused Leaflet eslint global 2026-09-30 21:45:37 +02:00
public feat(seo): static intro, structured data, and a PNG social card 2026-09-27 01:12:05 +02:00
reference docs: add REUSE licensing with Apache-2.0 attribution for the GTFS reference 2026-09-30 20:11:17 +02:00
scripts ci: add osv-scanner vulnerability gate on GitHub and Forgejo Actions 2026-09-30 19:49:34 +02:00
src fix: load the maplibre worker from a Vite-built URL 2026-10-01 00:14:47 +02:00
.cz.toml chore(release): bump version 0.40.0 -> 0.40.1 2026-10-01 00:41:20 +02:00
.dockerignore ci: build and publish a site image instead of copying into a shared volume 2026-08-18 01:44:34 +02:00
.gitignore build: bump interlocking to v4.0.0 and maplibre-gl to 6, drop dead tooling 2026-09-30 19:28:50 +02:00
.prettierrc working again 2025-09-17 02:57:03 +02:00
AGENTS.md docs: replace CLAUDE.md with a trimmed AGENTS.md 2026-09-30 20:09:38 +02:00
CHANGELOG.md chore(release): bump version 0.40.0 -> 0.40.1 2026-10-01 00:41:20 +02:00
CODE_OF_CONDUCT.md docs: add OpenRail code of conduct, governance, maintainers, security policy and publiccode.yml 2026-09-30 20:40:27 +02:00
commitlint.config.js feat(development): use semantic-release and related tools 2025-10-05 12:20:42 +02:00
CONTRIBUTING.md docs: rewrite README, refresh implementation status and CONTRIBUTING 2026-09-30 20:10:14 +02:00
Dockerfile ci: build and publish a site image instead of copying into a shared volume 2026-08-18 01:44:34 +02:00
eslint.config.js chore: add CC-BY-4.0 license text and drop unused Leaflet eslint global 2026-09-30 21:45:37 +02:00
GOVERNANCE.md docs: add OpenRail code of conduct, governance, maintainers, security policy and publiccode.yml 2026-09-30 20:40:27 +02:00
knip.config.ts chore(knip): scan css so tailwind and daisyui imports are followed 2026-09-30 19:45:05 +02:00
LICENSE.txt chore: relicense under AGPL-3.0 2026-08-27 15:32:50 +02:00
MAINTAINERS.md docs: add OpenRail code of conduct, governance, maintainers, security policy and publiccode.yml 2026-09-30 20:40:27 +02:00
nginx.conf fix(nginx): return 404 for unknown paths instead of the app 2026-09-27 01:12:03 +02:00
package.json docs: add REUSE licensing with Apache-2.0 attribution for the GTFS reference 2026-09-30 20:11:17 +02:00
pnpm-lock.yaml build: bump interlocking to v4.0.0 and maplibre-gl to 6, drop dead tooling 2026-09-30 19:28:50 +02:00
pnpm-workspace.yaml build: upgrade CI to pnpm 11 (pin @11.20.0, allowBuilds via pnpm-workspace.yaml) 2026-08-04 01:11:34 +02:00
postcss.config.js add object view 2025-09-18 01:31:12 +02:00
publiccode.yml docs: add OpenRail code of conduct, governance, maintainers, security policy and publiccode.yml 2026-09-30 20:40:27 +02:00
README.md docs: add REUSE licensing with Apache-2.0 attribution for the GTFS reference 2026-09-30 20:11:17 +02:00
REUSE.toml docs: add REUSE licensing with Apache-2.0 attribution for the GTFS reference 2026-09-30 20:11:17 +02:00
SECURITY.md docs: add OpenRail code of conduct, governance, maintainers, security policy and publiccode.yml 2026-09-30 20:40:27 +02:00
tsconfig.json build: bump interlocking to v4.0.0 and maplibre-gl to 6, drop dead tooling 2026-09-30 19:28:50 +02:00
vite.config.js build: bump interlocking to v4.0.0 and maplibre-gl to 6, drop dead tooling 2026-09-30 19:28:50 +02:00

GTFS.zone

A browser-based editor for GTFS (General Transit Feed Specification) transit data, inspired by geojson.io. Load a feed from a ZIP or a URL, view it on a map, edit it, and export it again. There is no login and no backend: all data stays in the browser, in IndexedDB.

Live: edit.gtfs.zone

Quick start

pnpm install
pnpm dev      # dev server on http://localhost:8080
pnpm build    # production build into dist/

Stack

  • TypeScript
  • MapLibre GL
  • Vite
  • Tailwind CSS v4 + DaisyUI 5
  • IndexedDB (via idb)
  • Zod
  • interlocking, the UI, map and GTFS modules shared with the other gtfs.zone apps

GTFS support

Not every GTFS Schedule file has a dedicated view. See docs/gtfs-implementation-status.md for which files have their own editor and which are only in the table viewer.

Contributing

See CONTRIBUTING.md. Bugs and feature requests go to the issue tracker.

Security

See SECURITY.md for how to report a vulnerability.

License

GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later), see LICENSE.txt. Per-file licensing is declared in REUSE.toml, with the license texts in LICENSES/.

Third-party content

reference/gtfs-reference.md, src/gtfs-spec/files/ and src/assets/gtfs-spec/ are derived from the GTFS Schedule reference, Copyright Google Inc. and contributors (maintained by MobilityData), licensed under the Apache License 2.0.