A fast multi-modal journey planner built in Rust with a React frontend.
Glove loads GTFS data into memory, builds a RAPTOR index, and exposes a REST API for journey planning. It supports public transit, walking, cycling, and driving via Valhalla integration. The React portal provides an interactive map-based interface with autocomplete, route visualization, and multilingual support (FR/EN).
- RAPTOR algorithm — Round-based public transit routing with diverse alternatives
- Multi-modal — Public transit, walking, cycling (3 bike profiles), driving
- Indoor-aware transfers — Valhalla pedestrian routing with zero step/elevator penalties for intra-station walks, favoring underground passages
- Station-aware resolution — Stop IDs resolve to all platforms via parent_station, enabling correct routing through large station complexes (metro, RER, TGV)
- After-midnight routing — Queries before 4am automatically use previous day GTFS services for night buses and late trains
- Fuzzy autocomplete — Stop and address search with French diacritics normalization
- GTFS validation — 19 automated data quality checks (referential integrity, calendars, coordinates, transfers, pathways, display)
- Hot reload — Update GTFS data via API without downtime (lock-free with ArcSwap)
- Tile caching proxy — Map tiles fetched from configurable upstream server, cached locally on disk
- Interactive map — Leaflet with route polylines, elevation-colored bike routes, indoor/outdoor transfer distinction, dark theme
- Vertical nav rail — Quick access to search, GTFS validation, dataset info, API docs, metrics
- Multilingual — French and English (i18n)
- REST API — Documented with OpenAPI
- Prometheus metrics — Built-in monitoring endpoint (CPU, memory, HTTP counters)
- Rate limiting — Configurable per-IP rate limiting (tile proxy excluded)
- Clean Code — Rust backend with 179 tests, React frontend with 21 vitest tests
bin/download.sh all # Download GTFS, OSM and BAN data
bin/valhalla.sh # Start Valhalla (optional, for walk/bike/car)
bin/build.sh # Build release artifacts (backend + portal)
bin/start.sh # Production: run (auto-builds on first run)
bin/start.sh --dev # Dev: cargo-watch + Vite HMR- Portal: http://localhost:3000 (served by the frontend process in both production and dev)
- API: http://localhost:8080/api (Actix backend; the portal proxies
/apito it)
Full documentation is available at ltoinel.github.io/Glove, covering:
