finds.dev← search

// the find

opentripplanner/OpenTripPlanner

★ 2,753 · Java · NOASSERTION · updated Oct 2026

An open source multi-modal trip planner

OpenTripPlanner (OTP) is a Java-based multi-modal trip planning server that builds routable graphs from GTFS and OpenStreetMap data and serves itineraries over GraphQL. It's aimed at transit agencies and civic-tech teams who need real trip planning (bus/rail + walk/bike/ride-hail) rather than just point-to-point driving directions, and it's been running in production at agencies worldwide since TriMet launched it in 2009.

The test suite is the real signal here: ext-test alone covers multiple fare implementations per-agency (Orca, HSL, Atlanta, Oregon Hop), flex routing, carpooling insertion/matching, and empirical delay modeling — this is edge cases from real transit systems, not toy coverage. CI runs a speed test on every merged PR with results published to a public dashboard, which is a level of performance discipline most projects don't bother with. It's built entirely on open formats (GTFS, OSM) and exposes a GraphQL API, so it slots into existing transit data pipelines instead of inventing its own schema. And it's had 16+ years of continuous development funded by an actual transit agency plus adoption by many others, so it's not going to disappear.

It's a Java/Maven monolith — expect a slow build, a shaded JAR deploy model, and real JVM heap requirements once you load a city-sized OSM+GTFS graph into memory; this isn't something you spin up casually for a side project. The bundled JS client is explicitly described as for testing only, with the docs stating most real deployments build their own client from scratch — so OTP gives you the routing engine and API, nothing closer to end-user UI. The README itself has zero code/API examples; everything meaningful lives on the external docs site, so you can't evaluate the API shape from the repo alone. And the fare handling having separate v1 and v2 implementations plus per-agency custom classes (Atlanta, HSL, Orca, Oregon) signals that if your agency's fare structure isn't already supported, you're writing and maintaining your own fare service class against their internal interfaces.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →