Releases: HSLdevcom/OpenTripPlanner
Releases · HSLdevcom/OpenTripPlanner
Release list
25.8.2026
Digitransit OTP Release Summary
Changelog 20260609 vs 20260825
Added PRs
- Critical fixes to the via and pass-through search #7593
- Clarify error codes of SIRI fuzzy trip matcher #7644
- Fix ArrayIndexOutOfBoundsException in RaptorPathToItineraryMapper #7639
- Move
ElevationProfileto street, reduceStreetPathAPI surface #7628 - Aggregate elevation lookup failures for points outside DEM coverage #7603
- Preserve real slope on edges steeper than 35% #7616
- Early pruning transfer relaxation #7665
- Refetch an itinerary #7649
- Graph Build Cache — Redesign Configuration and File Layout #7636
- Add dark mode toggle; standardize navbar item titles #7673
- Refactor and optimize geometry encoding/decoding #7668
- Make FLEX behave like a car in routing #7674
- Remove safety normalizer #7634
- Build scheduled transit leg geometry lazily #7685
- Sort trip's active dates in GTFS API #7672
- Implement on-board access in Transmodel trip API #7429
- Use edge endpoint instead of splitting very close to the end of an edge #7708
- Add
boardCostandreluctancefor all types of flex legs #7658 - State-based geofencing zone enforcement for vehicle rental routing #7544
- Add query for fetching number of canceled trips grouped by routes and patterns to GTFS API #7703
- Make TransitGroupPriority an official feature #7738
- Deprecate serviceJourneys filter in Transmodel #7712
- Grouping Trip calendar logic into a single service #7731
- Flex transfers in debug UI #7661
- Add canceledTrips query to Pattern type and patternsByIds query to the GTFS API #7714
- Add walk safety to OsmTagMapper #6944
- Allow http protocol for remote sources #7758
- Correctly handle missing realtime time updates via SIRI #7754
- Use prepared geometries for walkable area building #7333
- Add transactional repository and snapshot framework #7745
- Remove vehicle routing optimization and deprecate its API #7741
- Make StdTransferEarlyPruning.updateArrival O(1) Replace the per… #7682
- Add handling of no_exit/no_entry turn restrictions #7767
- Add canceledCalls to Stop type in the GTFS API #7768
- Remove computation of artifical P+R intersection nodes #7753
- Explicitly check out base branch in post-merge workflow #7812
- Curate CLAUDE.md for AI-agent usefulness and fix factual drift #7766
- Do not re-enable boarding at a cancelled SIRI call #7797
- Markdown prettier formatting #7815
- Report invalid line ref as DataImportIssue in NeTEx TripMapper #7790
- Fix ArrayIndexOutOfBoundsException in pass-through via chaining #7747
- Snapshot framework #7689
- Add vehicle id via real-time updates #7814
- Map GTFS notice assignments on trip segments to individual stop times #7809
- Parallelize and deduplicate way property computation #7823
- Penalize cycling on streets with embedded tram tracks #7816
- fix(transmodel): skip flex-window stops in intermediate estimated calls #7850
- Expose
TripOnServiceDateon trips and patterns, add notices #7813 - Add pickup/drop off filter to canceledCalls #7858
9.6.2026
Digitransit OTP Release Summary
Changelog 20260512 vs 20260609
Custom changes
- Fix to egresses in via point search
- Fix bug where edge is split 0/100 and dividing 0 by 0 causes a NaN in elevation data #390
Added PRs
- Expose that a SIRI added journey has an ExtraJourney alteration in Transmodel #7385
- Fix wrong context cast in Transmodel QuayAtDistanceType #7582
- Improve OTP warm-up #7576
- Raptor McRaptor cleanup (part 2) #7568
- Make elevation tile cache size configurable #7589
- Fix negative costs for steep bicycle and walk edges #7579
- Fix board stop for pass-through connections #7592
- Add Preparing DEM Data documentation page #7606
- Fix thread-safety bug in DefaultDataImportIssueStore #7608
- Reuse regex Matcher in transit-group priority lookup #7596
- Speed up OSM processing some more #7583
12.5.2026
Digitransit OTP Release Summary
Changelog 20260428 vs 20260512
Custom changes
- Fix to egresses in via point search
- Fix bug where edge is split 0/100 and dividing 0 by 0 causes a NaN in elevation data #390
Added PRs
- Add NO_DIRECT_MODE_CONNECTION routing error code for direct-only searches #7494
- De-duplicate boardinglocations on areas #7508
- Speed up tag lookup during OSM processing #7536
- Include entrances that are part of a stop area relation, change build config field
includeOsmSubwayEntrancestoincludeOsmStationEntrances#7170 - Add application warmup feature to run routing queries during startup #7509
- Add
startupRetryPeriodto GBFS feed configuration #7525 - Add support for transit group priority in the GTFS API #7451
- Set default fares to #7545
- Reduce memory consumption when parsing very large NeTEx files #7563
- Remove relation route name application #7539
- Skip transit search when no access or egress mode is set #7547
- Skip leg rebuild when fare/alert decoration would be a no-op #7546
- Replace C2-based pass-through with via-connection chaining #7496
- Improve Secret redaction for config File Logging #7560
- Always generate hop geometries in the GTFS graph builder #7571
- Coarsen speed and reluctance values at the request level #7569
- Fix RAPTOR path building for flex patterns with duplicated stops #7554
- Precompute cumulative pattern distance for O(1) leg distance lookup #7559
28.4.2026
Digitransit OTP Release Summary
Changelog 20260414 vs 20260428
Custom changes
- Fix to egresses in via point search
startupRetryPeriodfor GBFS updaters
Added PRs
- Fix NullPointerException when loading availableUntil for a rental bike #7388
- Add replacement mode filter to the GTFS API's planConnection query #7437
- Fix default boarding/alighting rules for SIRI ET ExtraJourneys (opentripplanner#7506) #7510
- Reduce allocations when building linestrings #7516
- Improve SpeedTest warm-up #7534
- Remove
GraphVisualizerand inefficient methods inShortestPathTree#7526 - Fix cost mismatch by anchoring pattern-ride pareto cost to last stop #7504
14.4.2026
Digitransit OTP Release Summary
Changelog 20260311 vs 20260414
Custom changes
- Support for coordinate visit via locations in access, egress and direct routing
Added PRs
- Add select/not filters to estimatedCalls in Transmodel #7305
- Cleanup regular transfer build parameters #7425
- Add CostlyAssertions feature that should be turned off in production and improve performance of via routing with coordinates #7301
- Added carpooling as an access/egress mode #7341
- Cache TransferIndexGenerator results to skip redundant regeneration #7355
- Improve compatibility with Swiss NeTEx data #7427
- fix: Introduce stable order for fareZones (tariffZones) #7434
- Prevent long routes mistakenly getting grouped across service-date #7452
- Migrate away from deprecated FeedScopedId.parse() #7457
- Expose GTFS feed version in the GTFS GraphQL API #7445
- Fix MC Raptor Pareto comparator performance regression #7440
- Use A* traversal distance for flex access/egress #7490
- Update to Java 25 #7246
- Add distance for stop-to-stop shapes,
PointsOnLinkin Transmodel API #6982 - Support
DestinationDisplayfor SIRIRecordedCall#7007 - Add transit service validity dates and CPU cores to GraphQL ServerInfo and transitInfo #6996
- Fix missing transfers #7042
- Add Transmodel
carpoolstreet mode #7084 - Add native scooter preference parameters to TransModel GraphQL API #7035
- Support
gml:LineStringformat with list ofgml:poselements #7135 - Add Route/Trip/TripOnServiceDate replacement to query APIs #7126
- Allow missing arrival time on the first stop in a GTFS-RT TripUpdate #7245
- Support for SIRI ArrivalStatus.ARRIVED on EstimatedCalls #7299
- Mark RecordedCall without ActualDepartureTime as not departed #7336
- Reject SIRI messages with missing Order attribute on calls #7324
- Add running days to flex routing #7281
- Fix booking time calculation for multi-day flex trip searches #7255
- Fix empty string handling for
banned.routesandbanned.agenciesin GTFS API #7340 - Improve stop connectivity check #7375
- Infer vehicle position's service date for ADDED trip #7179
- Fix walk steps for escalators leading directly to a station entrance #7361
- Reduce Raptor on-board optimal set by using strict less-than for tripSortIndex #7417
- fix: Return NO_TRANSIT_CONNECTION_IN_SEARCH_WINDOW when transit search finds no trips #7398
- Fix findTripTimesOnDate filters using wrong route mode and applying filters after limit #7408
11.3.2026
Digitransit OTP Release Summary
Changelog 20251106 vs 20260311
Custom changes
- Fix for subway entrance not showing up
Added PRs
- Multiplicative stairs and turn reluctance #6783
- Update contribution guidelines #6869
- Add estimated calls on same service and day in Transmodel API #6930
- Debug UI: Fix/enforce up to date package lock #6959
- Debug client itinerary compare #6882
- doc: add CLAUDE.md file #6939
- Correctly parse GTFS-Flex
priorNoticePeriod#6941 - Reduce graph size when processing turn restrictions #6908
- Allow refetching legs for trips with changed calling pattern #6902
- Use GBFS 3 manifest for feed discovery in rental service directory #6900
- Gracefully handle exceptions during GBFS updater setup #6954
- Fix RAPTOR data generation for additional search days in the past #6958
- Fix strange detours when street leg starts from the boundary of an area #6970
- Add
bikesAllowedStopMaxTransferDurationto build config to limit bike transfers #6787 - Crosswalk naming #6918
- Add distance for stop-to-stop shapes, PointsOnLink in Transmodel API #6982
- Support DestinationDisplay for SIRI RecordedCall #7007
- Fix duplicates in paging due to cost truncation in token #6973
- Added transit service validity dates and CPU cores to GraphQL ServerInfo and transitInfo #6996
- SIRI-ET updater via MQTT #6851
- Support for ETag and If-Not-Modified in GBFS updater #6963
- Visualize elevator edges and vertices in Debug UI #6885
- Check for NO_VALUE when mapping GTFS booking rules #7029
- Make
railway=platform_edgea boarding location #7037 - Upgrade to GraphiQL 5 #7025
- Add paging departure-time window fields to Transmodel API metadata #6975
- Fix duplicate labels for elevator vertices #7048
- Add a map popup to select from multiple features if they are overlapping #6928
- Don't fail the whole search if direct, flex or transit search generates a routing validation exception #7051
- Fix missing transfers #7042
- Fix coordinate fallback when linking locations in the street graph #7056
- Handle barrier entrances correctly #7067
- Fix default via vertex name translation mapping #7046
- To fix arriveBy searches always set arriveBy property to false in transfer requests #7089
- Improve handling of realtime updated StopPatterns #6909
- Refactor
ElevatorProcessorand add tests for elevators #7079 - Add Transmodel
carpoolstreetMode #7084 - Add information to GraphQL schemas about if a place in an itinerary is a via location #7090
- Fix NeTEx graph builder crash on duplicate StopPointInJourneyPattern #7092
- Propulsion type aware bike and scooter routing #7098
- Add support for the snow and ice NeTEx transport mode #7114
- Improve GTFS-RT backwards earliness propagation when update starts with
NO_DATA#7106 - Add native scooter preference parameters to TransModel GraphQL API #7035
- Normalize ServiceJourney/DatedServiceJourney ID prefixes in SIRI updates #7128
- Add information about the use of elevators, escalators, and stairs to queries with steps in the GTFS GraphQL API #6897
- Support gml:LineString format with list of gml:pos elements #7135
- Add Entur specific link on Emission type in transmodel API #7148
- Simplify handling of safety values #6767
- Change elevator cost calculation, add
reluctancefor elevators, and deprecateelevatorHopCost#7111 - Fix elevator ways with multiple intersection nodes #7181
- Improve indoor routing information in debug UI #7174
- Clear timetables after withdrawn NEW trips #6280
- Undeprecate car/bikepark nearest filters which were deprecated by accident #7209
- Fix SIRI-SX affects resolver #7210
- Add support for via-location visits in Raptor access and egress paths #7101
- Fix car routing using stations or multi-modal stations as locations #7151
- Add modes filter and totalCount to the canceled trips query in the GTFS API #7200
- Make sure flex transfers are indexed exactly once #7218
- Fix SIRI ET ExtraJourney trips not appearing in departure/arrival boards #7052
- Add
CarRequestto cache key inRaptorRequestTransferCache#7194 - Add booking time parameter to the GTFS API #7221
- Add HTTP response time metric #7133
- Add second criteria to the Raptor heuristics #7165
- Add Route/Trip/TripOnServiceDate replacement to query apis #7126
- Make filters for the canceled trips query in the GTFS API a list #7235
- Allow setting
maxThreadslower thanMIN_THREADSwhen using parameter #7224 - Allow missing arrival time on the first stop in a GTFS RT Trip Update #7245
- Direct transit search #7145
- Add ability to start a Raptor search from on-board a trip in MC range raptor #7241
- Change
@timingDataannotations in GTFS GraphQL API #7261 - Account for DST and multi-day trips in departure boards #7250
- Add publiccode.yml for OpenTripPlanner #7212
- Expose boolean extraCall field on EstimatedCall in Transmodel API #7272
- Fix mapping of
banned.tripin GTFS API #7288 - Add trip's
carsAllowedproperty to GTFS GraphQL API #7282 - Use only the closest vertices for each mode when linking with multiple street modes to improve performance [opentripplanner#7309](https://gith...
9.12.2025
- Pull from upstream
- Bug fix: entrances correctly allow barrier pass through
6.11.2025
- New changes pulled from upstream
- Bug fix: indoor car routing is no longer allowed by default
30.9.2025
- New changes pulled from upstream
- Fix incorrect speed tram icon and color in HSL routing
31.8.2025
OTP features required by digitransit UI release 1.9.2025 (new filter API, map layer update)