// the find
motis-project/motis
multimodal routing, geocoding, and map tiles
MOTIS is a C++ multimodal routing server that ingests OpenStreetMap, GTFS/NeTEx timetables, GTFS-RT/SIRI real-time feeds, and GBFS bike/scooter data to answer journey planning queries via a REST API. It's aimed at transit agencies, MaaS platforms, and anyone who needs a self-hosted routing backend without paying for commercial APIs. The live Transitous instance covers global transit data, which gives you a real sense of how far it scales.
The format support is genuinely impressive — GTFS, NeTEx, GTFS Flex, GTFS Fares v2, SIRI-ET/SX/FM, VDV 454, GBFS with geofencing — covering every major transit data standard in one binary. The memory model is the standout technical decision: traffic-day bitsets mean a full-year timetable takes roughly the same RAM as a single month, which makes planet-scale deployment on a single machine credible rather than aspirational. The OpenAPI spec is complete and pre-generated clients exist for JS, which means you can start querying without writing binding code. Elevator status tracking via SIRI-FM and FASTA is a detail that transit accessibility tooling almost always skips, and here it's a first-class endpoint with routing integration.
The build story is a mess unless you like C++ CMake setups — they use a custom dependency manager called `pkg` that's specific to this project, which adds an unusual bootstrapping step before you can even start. 544 stars for something this architecturally serious means the community is tiny and you're likely to hit obscure issues with no Stack Overflow answer waiting for you. The documentation is shallow relative to the system's complexity: a handful of setup guides covers getting started, but anything operational — tuning import performance for a large feed, understanding the RTT footpath update logic, operating the tile server under load — requires reading C++ headers. The import preprocessing step is a mandatory offline phase with no clear guidance on how long it takes or how much disk it needs for non-trivial datasets, which will surprise anyone used to databases that ingest data at runtime.