mapbox / mapbox/mapbox-navigation-ios
CarPlay: implement the navigation metadata channel (mapTemplateShouldProvideNavigationMetadata / rich CPManeuver fields / CPLaneGuidance) for OEM instrument-cluster rendering
Nobody has claimed this yet.
- Dominant language
- Swift
- Stars
- 918
- Forks
- 326
- Avg merge
- 1h 16m
- Merged PRs (30d)
- 3
Description
Feature request
The SDK's CarPlay integration (CarPlayManager / CarPlayNavigationViewController) populates CPNavigationSession maneuvers with instructionVariants, symbolSet, and travel estimates — which fully drives the main-scene guidance panel. However, it never opts into CarPlay's navigation metadata channel:
CPMapTemplateDelegate.mapTemplateShouldProvideNavigationMetadata(_:)is not implemented (defaults to false)CPManeuver.maneuverType,.junctionType,.trafficSide,.state(initial → prepare → execute progression) are never setCPNavigationSession.add(laneGuidances:)/CPLaneGuidanceare never used
Per Apple's CarPlay Developer Guide (June 2026 edition, pp. 55–58), this metadata is what vehicles with digital instrument clusters and HUDs use to natively render maneuvers, junction-aware iconography, and lane guidance — including vehicles that do not support app-window cluster scenes at all. Without it, CarPlay in metadata-capable vehicles renders a degraded or absent cluster experience for SDK-based apps, while the SDK already computes every needed input (maneuver types/modifiers, Intersection lane data, junction geometry) for its own UI.
Verified absent in 3.16.1 through 3.29.0-alpha.3 (changelog + source grep: zero matches for mapTemplateShouldProvideNavigationMetadata, CPLaneGuidance, maneuverType in the CarPlay integration).
Proposed shape
CarPlayManager(asCPMapTemplateDelegate) returnstruefrommapTemplateShouldProvideNavigationMetadata(opt-in via aCarPlayManagerDelegatehook or config flag for backward compatibility)CarPlayNavigationViewController's maneuver construction (the same path that setsinstructionVariants/symbolSet) additionally maps: MapboxDirectionsManeuverType/ManeuverDirection→CPManeuver.maneuverType+.junctionType; drive-side from the route's region →.trafficSide; step progress thresholds →.stateIntersection.approachLanes/usableApproachLanes/usableLaneIndication→CPLaneGuidance/CPLane, added viaCPNavigationSession.add(laneGuidances:)and referenced from the maneuvers
Context
We (Guardian AI, UAE/Pakistan telematics + navigation) ship CarPlay on SDK 3.x and have implemented the app-window instrument-cluster scene; the metadata channel is the remaining gap for metadata-driven clusters. Happy to contribute the mapping tables as a PR if maintainers are open to it — the enum mapping (Mapbox maneuver types/modifiers → CPManeuver types/junctions) is the main review surface.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with CarPlayManager as CPMapTemplateDelegate and the maneuver-construction path in CarPlayNavigationViewController. Review the proposed CPManeuver fields, CPLaneGuidance mapping, and CarPlayManagerDelegate or configuration hook for opt-in behavior. Done means metadata-capable vehicles receive maneuver, junction, traffic-side, state, and lane guidance data without forcing the channel on existing users.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- ios, swift
- Domain
- mobile
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100