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 96.6%
  • HTML 2.5%
  • JavaScript 0.6%
  • CSS 0.2%
  • Shell 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-20 02:47:48 +02:00
.claude docs: allow claude to do some forgejo 2026-03-31 10:23:15 +02:00
.forgejo/workflows ci: use DEPLOY_USER, DEPLOY_TOKEN and REGISTRY_DOMAIN in the site build 2026-08-18 02:23:56 +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(spec): record the reference snapshot as the spec source of truth 2026-08-07 00:41:46 +02:00
fixtures/flex feat(flex): make a zone row editable on every trip 2026-08-16 18:47:32 +02:00
public feat(about): share the About modal link blocks and add SEO metadata 2026-08-20 01:54:50 +02:00
reference docs(spec): record the reference snapshot as the spec source of truth 2026-08-07 00:41:46 +02:00
scripts feat(load): unify the feed loading process with test-track 2026-08-15 03:19:12 +02:00
src refactor(types): drop dead flex/extension helpers and the file presence enum 2026-08-20 02:47:48 +02:00
.cz.toml chore(release): bump version 0.26.0 -> 0.27.0 2026-08-20 02:46:06 +02:00
.dockerignore ci: build and publish a site image instead of copying into a shared volume 2026-08-18 02:06:57 +02:00
.gitignore chore: stop tracking TODO.md and ignore scratchpad 2026-08-19 02:29:42 +02:00
.mcp.json build: set up forgejo mcp 2026-03-30 09:44:28 +02:00
.prettierrc working again 2025-09-17 02:57:03 +02:00
audit-ci.json Add development tools and error visibility system 2025-09-19 14:21:16 +02:00
CHANGELOG.md chore(release): bump version 0.26.0 -> 0.27.0 2026-08-20 02:46:06 +02:00
CLAUDE.md feat(fields): show and edit non-spec extension columns 2026-08-17 02:11:11 +02:00
commitlint.config.js feat(development): use semantic-release and related tools 2025-10-05 12:20:42 +02:00
CONTRIBUTING.md refactor: finish renaming to subdomain 2026-03-19 01:10:10 +01:00
Dockerfile ci: build and publish a site image instead of copying into a shared volume 2026-08-18 02:06:57 +02:00
eslint.config.js refactor: strengthen husky 2026-03-29 10:07:31 +02:00
FARES_V2_PLAN.md docs(spec): record the reference snapshot as the spec source of truth 2026-08-07 00:41:46 +02:00
KEYBOARD_NAV_PLAN.md feat(editor): move between rows in the Files table from the keyboard 2026-08-15 02:45:34 +02:00
knip.config.ts chore(knip): exclude the vendored feed-selection module from unused-export checks 2026-08-15 11:04:15 +02:00
LICENSE mostly working 2025-09-17 03:41:33 +02:00
lighthouserc.js Add development tools and error visibility system 2025-09-19 14:21:16 +02:00
NEXT_PLAN.md feat(fields): show and edit non-spec extension columns 2026-08-17 02:11:11 +02:00
nginx.conf ci: build and publish a site image instead of copying into a shared volume 2026-08-18 02:06:57 +02:00
package.json feat(load): unify the feed loading process with test-track 2026-08-15 03:19:12 +02:00
pathway-geometry-sandbox.html feat(map): render pathways and station geometry with theme-aware styling 2026-08-05 04:24:05 +02:00
PLAN_43_route_direction.md feat(navbar): use the brouter waypoints icon for the shapes button 2026-08-14 03:05:37 +02:00
PLAN_TODO.md fix(validation): report references broken by hidden whitespace 2026-08-14 12:34:24 +02:00
playwright.config.js initial commit 2025-09-16 02:52:37 +02:00
pnpm-lock.yaml feat(map): case route lines and add spotlight selection styling 2026-07-17 09:41:19 +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
README.md docs(spec): record the reference snapshot as the spec source of truth 2026-08-07 00:41:46 +02:00
rollup.config.js daisyui nav bar 2025-09-22 05:53:34 +02:00
tailwind.config.js add schedules and daisyui 2025-09-21 09:48:52 +02:00
test-metadata.js chore: remove emoji and em-dashes 2026-08-04 20:05:46 +02:00
timetable-loaded.png add missing files and bugfixes 2025-10-05 11:46:37 +02:00
tsconfig.json feat(map): render pathways and station geometry with theme-aware styling 2026-08-05 04:24:05 +02:00
vite.config.js build: add git-describe 2025-10-05 13:06:33 +02:00

GTFS.zone

A web-based GTFS (General Transit Feed Specification) editor inspired by geojson.io. Upload, visualize, edit, and export GTFS transit data with no login required.

Features

  • File Upload: Drag-and-drop or button upload for GTFS ZIP files
  • URL Loading: Load GTFS feeds directly from URLs
  • Interactive Map: Visualize stops and routes on an interactive map
  • Text Editor: Edit GTFS files with syntax highlighting
  • Fares v2: Editor for fare products, rules, timeframes, areas, and networks
  • Export: Download modified GTFS as ZIP file
  • Responsive: Works on desktop and mobile devices

Quick Start

# Install dependencies
npm install

# Start development server
npm start

# Run tests
npm test

# Build for production
npm run build

Technology Stack

  • Frontend: Vanilla JavaScript (ES6 modules)
  • Mapping: Leaflet.js
  • Editor: CodeMirror 6
  • Build: Rollup with Tailwind CSS
  • Testing: Playwright

Todo List - Future Features

Core Functionality

  • GTFS Validation: Integrate MobilityData GTFS validator
  • Advanced Error Handling: Better user feedback for parsing errors
  • Undo/Redo: Text editor history management
  • File Templates: Pre-configured GTFS file templates
  • Bulk Operations: Multi-file editing capabilities

User Experience

  • Dark Mode: Toggle between light and dark themes
  • Keyboard Shortcuts: Editor shortcuts for power users
  • Progress Indicators: Loading states for large files
  • Tour/Onboarding: First-time user guidance
  • Recent Files: Quick access to recently edited feeds

Data Visualization

  • Route Visualization: Color-coded route lines on map
  • Stop Clustering: Performance optimization for dense stop networks
  • Service Calendar: Visual representation of service patterns
  • Statistics Dashboard: Feed statistics and data quality metrics
  • 3D Visualization: Elevation and terrain integration

Advanced Editing

  • Smart Autocomplete: Context-aware field suggestions
  • Relationship Validation: Real-time foreign key validation
  • Batch Import: CSV import from external sources
  • Field Mapping: Map external data to GTFS fields
  • Version Control: Track changes and revert functionality

Performance & Scale

  • Streaming Parser: Handle very large GTFS files
  • Web Workers: Background processing for heavy operations
  • Caching Strategy: Improve load times for repeated operations
  • Memory Optimization: Better garbage collection for large datasets

Integration & Export

  • Multiple Formats: Export to JSON, GeoJSON, KML
  • API Integration: Connect to transit agency APIs
  • Real-time Data: GTFS-Realtime feed integration
  • Share Links: Generate shareable URLs for feeds
  • Embed Widget: Embeddable map widget for websites

Quality & Standards

  • GTFS Extensions: Support for GTFS-Flex
  • Accessibility: Full WCAG 2.1 compliance
  • Internationalization: Multi-language support
  • Print Support: Printable route maps and schedules
  • Offline Mode: Service worker for offline editing

Developer Experience

  • Plugin System: Extensible architecture for custom features
  • API Documentation: Comprehensive developer docs
  • TypeScript: Type safety and better IDE support
  • Component Library: Reusable UI components
  • Performance Monitoring: Real-time performance metrics

GTFS Implementation Status

Not all GTFS Schedule files have dedicated views: see docs/gtfs-implementation-status.md for a full breakdown of which files are fully supported, partially supported (table editor only), or not yet supported.

Releasing

Deployments are triggered by pushing a version tag. The Forgejo CI will build and copy the output to the server.

cz bump              # bumps version, updates changelog, creates tag (run on main only)
git push --follow-tags

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests for new functionality
  5. Run npm run lint and fix any issues
  6. Submit a pull request

License

MIT License - see LICENSE file for details.