View in English

  • Global Nav Open Menu Global Nav Close Menu
  • Apple Developer
Search
Cancel
  • Apple Developer
  • News
  • Discover
  • Design
  • Develop
  • Distribute
  • Support
  • Account
Only search within “”

Quick Links

5 Quick Links

Videos

Open Menu Close Menu
  • Collections
  • Topics
  • All Videos
  • About

Back to WWDC25

Streaming is available in most browsers,
and in the Developer app.

  • About
  • Summary
  • Transcript
  • Code
  • Turbocharge your app for CarPlay

    Learn how to bring your Live Activities and widgets to CarPlay and CarPlay Ultra so people can view progress of their activities and see relevant information at a glance. Explore new template options available to all CarPlay apps, and learn how navigation apps can provide turn-by-turn metadata for display in the car's instrument cluster or HUD.

    Chapters

    • 0:00 - Introduction
    • 1:27 - CarPlay Ultra
    • 2:14 - Widgets
    • 5:07 - Live Activities
    • 6:49 - CarPlay framework
    • 17:15 - Demo
    • 21:38 - Next steps

    Resources

    • Adding StandBy and CarPlay support to your widget
    • Additional Tools for Xcode
    • CarPlay for developers
      • HD Video
      • SD Video

    Related Videos

    WWDC25

    • Optimize CPU performance with Instruments
    • What’s new in widgets

    WWDC24

    • Meet the next generation of CarPlay architecture
    • Say hello to the next generation of CarPlay design system

    WWDC22

    • Get more mileage out of your app with CarPlay
  • Search this video…

    Hi! I’m Olivia. I’m an engineer on the Car Experience team, and I’m so excited to talk to you today about CarPlay in iOS 26. CarPlay is the smarter, safer way to use iPhone in the car, and we are introducing a wealth of new ways to turbocharge your apps in CarPlay.

    Staying connected while driving is now easier than ever with tapbacks in Messages, pinned conversations, and a compact incoming call UI, so you can still keep an eye on your navigation destination.

    And, there are even more ways to see important information from your favorite apps, with helpful, glanceable widgets, and realtime updates from Live Activities.

    Vehicle screens come in many shapes and sizes. In iOS 26, some screen configurations allow drivers to adjust their display scale with Smart Display Zoom configurable within Settings in CarPlay. When Smart Display Zoom is enabled, your CarPlay app will be automatically resized to the new display scale.

    And also in iOS 26, your CarPlay apps automatically get an updated appearance, without any additional work on your end.

    CarPlay Ultra is the best of your iPhone, and the best of the car, together in a unified, consistent, and personalized experience, across all of the driver displays. Everything that you just saw, including the apps you know and love from driving in CarPlay today, are also available in CarPlay Ultra. With iOS 26, there are more ways than ever to bring your app to drivers on the road. If your app supports widgets or Live Activities, you can make them available to drivers in CarPlay, even if you don’t have a CarPlay App.

    And for CarPlay apps, there are new APIs in the CarPlay framework to allow drivers to seamlessly perform common scenarios while in the car.

    Let’s start with widgets in CarPlay.

    Drivers are able to navigate left of the CarPlay Dashboard to see your app’s supported widgets, even if you don’t have a CarPlay app. Widgets can launch apps in CarPlay, and on touchscreen vehicles, widgets support interaction. Drivers can customize which widgets they want to see in CarPlay by going to Settings → General → CarPlay on iPhone, and selecting their vehicle.

    The good news is that bringing your widget to CarPlay is incredibly easy. All you need to do is support the systemSmall widget family.

    Widgets can appear in different contexts on many different platforms. For example, a systemSmall widget can be added to your iPhone’s Home Screen, the lock screen, in StandBy, and now, in CarPlay. However, some widgets may not work well in certain contexts. For example, a widget that relies on high density text or information that isn’t relevant to a driver, may not be well suited as a widget in CarPlay. For these situations, you can take advantage of the disfavoredLocations modifier. By setting disfavoredLocations to include carPlay, your widget will be automatically grouped in CarPlay Settings with an indication that your widget is not optimized for CarPlay. If a driver does choose to include a disfavored widget in their CarPlay experience, interaction will be disabled.

    We recommend setting CarPlay as a disfavored location if your widget is a game or requires extensive user interaction.

    An example of this could be if your widget refreshes itself with new content each time it's tapped. It's also best to set CarPlay as a disfavored location if your widget doesn’t work in the car. If your widget relies on data protection classes A or B, it likely won’t work in CarPlay because most people use CarPlay while iPhone is locked. When a widget has an associated CarPlay app, that app can be launched by tapping on the widget. However, if your widget's primary purpose is to launch an app that isn’t available in CarPlay, consider using disfavoredLocation.

    Great widgets on iPhone provide simple, glanceable information, and the same is true in CarPlay. Here are some best practices to consider as part of your development.

    Your widgets are optimized for every vehicle, so widgetContentMargins are tailored for presentation in CarPlay. And, the widget background is removed when the containerBackgroundRemovable modifier is set to true. It’s also best to use system fonts and colors to make sure your text is legible in different contexts.

    Your app may already be providing timely updates through Live Activities. In iOS 26, that experience comes to CarPlay.

    When a supported Live Activity begins on iPhone, it automatically shows up in CarPlay Dashboard. And if CarPlay Dashboard is not visible, CarPlay ensures drivers don’t miss an important alert by showing it as a notification at the bottom of the display.

    And, like iPhone, users can turn off Live Activities in Settings, or control alerts by enabling a focus mode.

    To provide the most helpful, glanceable information to drivers, CarPlay uses the activity family small size class to display your Live Activity.

    This is the same size class used for Live Activities in the watchOS Smart Stack.

    If you don’t yet implement activity family small, CarPlay will fall back to showing the compact leading and trailing views from your Dynamic Island configuration. For the best experience, your app should only communicate the most significant states of the Live Activity, and consider that Live Activities in CarPlay are non-interactive. Testing your widgets or Live Activities is easy and you don’t even need a car! The CarPlay Simulator app for macOS lets you connect your iPhone to your Mac using a USB cable to recreate a full CarPlay experience. CarPlay Simulator is included in the “Additional Tools for Xcode” package available for download.

    To learn more about designing your widgets and Live Activities, check out the “What’s new in Widgets” video. Lets steer our focus onto full app experiences in the car. The CarPlay framework enables you to present a version of your app in CarPlay, so people can seamlessly perform common tasks while driving. It allows you to support a variety of categories. You can create experiences for audio playback, communication via SiriKit, driving tasks, EV charging and fueling, turn-by-turn route guidance, parking, and quick food ordering.

    If your app meets the criteria for one of these categories, you can request an entitlement, which lets your app take advantage of the CarPlay framework. The CarPlay framework includes many templates APIs. Each CarPlay app category has access to a set of templates that are designed specifically for that category. These template APIs provide UI optimized for use in the car, and give your app the ability to configure and respond to interactions.

    They also insulate your app from details of each car model, such as the display configuration or input hardware. Let’s check out some of the enhancements to CarPlay templates in iOS 26, including specific updates for audio and navigation apps.

    The list template is available to all CarPlay apps and lets your app show a list of items, such as a set of music tracks.

    The CPListImageRowItem is a type of item that can appear as a row in the list.

    It can be used to show a series of images, for example, to show unique album artwork. In iOS 26, we have new ways to customize the image row in your list template. There’s also new support to disable individual elements within the row item, as well as to allow the elements in your row item to span across multiple lines.

    If your app already uses CPListImageRowItem, you can now configure it with a “Row Element” to use the same presentation style, as well as take advantage of the new multiline, and disabling capabilities.

    “Card Element” is a different presentation style that shows a series of portrait-style cards. You can choose whether you’d like an image to fill the entire card, or to be displayed as a square at the top of the card. Title, subtitle, and a tint color can be optionally provided to enhance the look and feel of this element. For a more compact appearance, use “Condensed Element.” This style shows a title and an image configurable in either a rounded square, or circular shape. You can optionally show a subtitle and SF Symbol on the trailing side of the element.

    You can also express your content with a full image by using “Grid Element.” This is great for unique playlists or contact images.

    And finally, “Image Grid Element” can be used to show an image configurable in either a rounded square or circular shape, as well as an optional title and SF Symbol below the image. The List template also gets a new API to show pinned elements. Assign the headerGridButtons property on the CPListTemplate to present important elements at the top of your list, before the first list section.

    Then, create grid buttons with an image, title variants, and an optional handler, which is called when the button is tapped.

    For Communication apps, you can also provide a CPMessageGridItemConfiguration.

    The messageConfiguration allows you to provide a conversation identifier that SiriKit passes back to your app when a grid item is selected. It also allows you to indicate whether or not the item should show an unread indicator.

    Let’s switch tracks, and talk about CarPlay audio apps.

    If your app streams audio for sports events, you can now use a variant of the Now playing template to show the status of these events, right on the CarPlay screen.

    The Now playing template with sports mode is available to CarPlay audio apps on iOS 18.4 or later, and is intended for events that consist of 2 teams. It can show metadata such as team logos, team scores, the game clock, and more.

    When your app streams audio from a live or pre-recorded sporting event, you can transition its existing Now playing template into sports mode by creating a CPNowPlayingSportsEventStatus with information about the event, including the elapsed or remaining time in the eventClock parameter.

    The system will automatically count up or down from the point provided in the eventClock on your behalf.

    Next, instantiate a CPNowPlayingModeSports with your newly created event status, as well as information about the teams. Finally, set the nowPlayingMode on the now playing template to your CPNowPlayingModeSports instance.

    At any point during playback, your app can provide a new set of sports mode metadata to adjust scores, possession indicators, standings, and more. If you are streaming a pre-recorded event, your playback controls may allow time-shifting. When time-shifting occurs, ensure your app sends an update with the metadata that corresponds to the new playback position.

    Now that we’ve explored the new UI enhancements, let's tune in to some best practices for apps that support audio.

    CarPlay is a unique environment, because audio sources are mixed between those coming from iPhone, and those coming from the car. For example, drivers may be listening to a sports game in a CarPlay app, or enjoying FM or satellite radio, at the time they launch your app in CarPlay.

    Here’s some tips so that drivers enjoy playback without interruptions, and get the best possible listening experience.

    Only start your audio session when your app is about to start playing audio. When your app is no longer playing audio, be sure to deactivate your audio session.

    Spatial Audio and Dolby Atmos provide amazing, immersive ways to experience audio, and vehicles can support these formats for their sound systems. Support AirPlay enhanced audio buffering to bring this incredible experience to your app in CarPlay. For more details, see “Tune up your AirPlay audio experience.” Now, let’s shift gears and explore what’s new for navigation apps. With iOS 26, buttons in the CPMapTemplate automatically get a Liquid Glass appearance. Be sure to test the ways your button icons look with CarPlay Simulator. Many new vehicles support multitouch interactions, including any vehicle that supports CarPlay Ultra. Starting in iOS 26, if a vehicle supports multitouch interactions in CarPlay, drivers can interact with your navigation app using multitouch gestures.

    Your CPMapTemplate will receive callbacks that allow you to react accordingly and create a richer, more interactive map experience. Supported gestures include pinch to zoom, including double tap to zoom in, and two-finger double tap to zoom out, two-finger slide up and down to adjust pitch, and two-finger rotate.

    In supported cars, your CarPlay navigation app can display information on multiple screens and surfaces. By default, your app draws its map in the CarPlay display.

    It can appear in the CarPlay Dashboard as well, by declaring support for the dashboard navigation scene, and implementing the required delegates. In iOS 16.4, we introduced support for another map in secondary display areas. Check out the video “Get more mileage out of your app with CarPlay” linked below to learn more.

    Most new cars also support showing glanceable turn-by-turn metadata in their instrument cluster or heads up display.

    Let’s talk about how navigation metadata works.

    When your app runs in CarPlay, iPhone is connected to the vehicle.

    As people drive, your app creates a series of upcoming maneuver descriptions, including metadata for maneuver and junction types.

    Your metadata is sent to the vehicle, which then maps it to its closest visual type and controls its appearance for rendering on screen.

    Use CPManeuver to specify each maneuver. It takes one of 54 maneuver types. Here are some examples.

    You can also specify a junction type which helps describe more complex intersections such as a roundabout. It can include the number of exits, the angle of each exit, and guidance to the driver on which exit to take.

    Focus on the semantic meaning of the type, as the car defines how it looks.

    I have a navigation app called Coastal Roads, and I’d like to go ahead and add support for metadata.

    CarPlay knows my app can support navigation metadata because I return true when the system calls mapTemplateShouldProvideNavigationMetadata. To maximize performance of my app, I provide as many maneuver and lane guidance objects up-front to my CPNavigationSession when route guidance starts.

    And, if rerouting is needed, I’ll first pause the current trip, and create a CPRouteInformationObject with the updated information for the route. When I resume the trip with the object, the system will display the new route. You can test all of this in CarPlay Simulator, right on your Mac. You can also test it in the many vehicles on the road that support metadata. Lets see how it looks in one of those cars.

    Here we are in the car. This car has a large center screen and an instrument cluster display behind the steering wheel. I’ve already paired my iPhone, and CarPlay is up and running.

    This is the CarPlay Dashboard in iOS 26. The new design looks amazing, and it’s immediately familiar because it’s just like your iPhone. I’m currently running the sample navigation app “Coastal Roads” which displays a map on the left, and in the upper right, you can see its dashboard buttons. Dashboard buttons provide useful shortcuts or favorites, and it’s easy to specify them using instances of CPDashboardButton.

    Earlier in the video, we introduced widgets for CarPlay. Widgets are a familiar way to get glanceable information from your favorite apps, right here on the car’s screen. I simply swipe to the right and here they are! As you can see, I can quickly choose which widgets I want to have on the screen.

    You can customize which widgets appear in CarPlay by going to Settings → General → CarPlay on iPhone. Now let’s go into the Coastal Roads navigation app.

    I made sure to update the CPMapButton and CPBarButton images in my app to look good on top of Liquid Glass.

    I've configured one of my bar buttons, to bring up a preview of my favorite drive to the Coastal Roads Ferry. OK, now let’s look at the instrument cluster display.

    This car keeps important driving information in the instrument cluster, so its easily glanceable while driving. If I change the view, I can view turn-by-turn route guidance in a convenient location. Route guidance hasn't started yet, so lets start our route. We’re starting off driving straight for 140 ft. Right now, metadata from Coastal Roads is specifying the maneuver type “straightAhead” which is typically shown as a straight arrow. I can see the remaining distance counting down, and the street name.

    Now we’re taking a slight left turn at a -45° angle onto Starfish St, and the maneuver updates. Coastal Roads also set the junctionElementAngles to 80° and -5°, so I can see where else the road leads. We’re now coming up on a sharp left turn, and the app set the turn angle to be -135°. As you can see, the car renders it with a different appearance. Now, I'm going to quickly jump onto Horizon Highway. Where I can see the onRamp maneuver type. And now, the offRamp maneuver type.

    I'll take a couple more left turns.

    And then will keepRight onto Pebble Pier at an exit angle of 20 degrees.

    And I've finally reached the ferry! Coastal Roads sent the enter_ferry maneuver type and then sent the arriveAtDestination maneuver type.

    As you can see, metadata is a powerful way to show directions in the instrument cluster or in the heads-up display.

    CarPlay takes care of communication with the car, sending over your metadata, and managing state, so you can focus on creating a great route guidance experience in your app. To optimize the performance of your navigation app, your app can observe thermal levels, and reduce the detail that your map is drawing, or transition into an overview mode, which may not require as frequent view updates.

    Keep in mind that your CADisplayLink frame rates in CarPlay may automatically adapt according to device conditions.

    Also consider that if your app is displaying a map both in the center console and in the instrument cluster, that the two views don’t need to show the same content. Consider placing one of your views in an overview mode to give the driver different navigation perspectives. The additional benefit of this, is that you’ll reduce the amount of animated view updates your app requires. Checkout “Optimize CPU performance with Instruments” for more. That’s it! With widgets and Live Activities, there are more ways than ever to bring your app to drivers on the road.

    And with updates to the CarPlay framework, your CarPlay apps can be more expressive and capable, and even work inside the instrument cluster or heads-up display. For more information, check out the CarPlay developer link below. Happy driving!

    • 3:21 - Set CarPlay as a disfavored location

      // Disfavored locations modifier for CarPlay
      
      WidgetConfiguration()
          .disfavoredLocations([.carPlay], for: [.systemSmall])
    • 10:05 - List template with pinned elements with grid buttons

      // Pinned elements
      
      var headerGridButtons: [CPGridButton]?
      
      // Create a Grid Button
      
      class CPGridButton
      
      init(titleVariants: [String],
           image: UIImage,
           handler: ((CPGridButton) -> Void)?)
    • 10:22 - List template with pinned elements with grid buttons for messages

      // Pinned elements
      
      var headerGridButtons: [CPGridButton]?
      
      // For Communication apps
      
      class CPGridButton
      
      init(titleVariants: [String],
           image: UIImage,
           messageConfiguration: CPMessageGridItemConfiguration?,
           handler: ((CPGridButton) -> Void)?)
      
      class CPMessageGridItemConfiguration
      
      init(conversationIdentifier: String, unread: Bool)
    • 11:20 - Now playing template with sports mode

      // Now playing template with sports mode
      
      let clock = CPNowPlayingSportsClock(elapsedTime: time, paused: false)
      
      let status = CPNowPlayingSportsEventStatus(
          eventStatusText: ["1st"], // 1st quarter
          eventStatusImage: UIImage(named: "Semifinals"),
          eventClock: clock
      )
      
      let sports = CPNowPlayingModeSports(
          leftTeam: getLeftTeam(), // CPNowPlayingSportsTeam
          rightTeam: getRightTeam(), // CPNowPlayingSportsTeam
          eventStatus: status,
          backgroundArtwork: getBackgroundArtwork() // get UIImage
      )
      
      CPNowPlayingTemplate.sharedTemplate.nowPlayingMode = sports
    • 14:15 - Multitouch callbacks

      // Multitouch
      
      // Zoom callback
      
      func mapTemplate(_ mapTemplate: CPMapTemplate,
                       didUpdateZoomGestureWithCenter center: CGPoint,
                       scale: CGFloat,
                       velocity: CGFloat) {     }
      
      // Pitch callback
      
      func mapTemplate(_ mapTemplate: CPMapTemplate,
                       pitchWithCenter center: CGPoint) {     }
      
      // Rotate callback
      
      func mapTemplate(_ mapTemplate: CPMapTemplate,
                       didRotateWithCenter center: CGPoint,
                       rotation: CGFloat,
                       velocity: CGFloat) {     }
    • 16:28 - Add support for metadata

      // Add support for metadata
      
      // Declare support
      
      func mapTemplateShouldProvideNavigationMetadata(_ mapTemplate: CPMapTemplate) -> Bool {
          true
      }
      
      // Provide maneuver information up-front
      
      cpNavigationSession.add(maneuvers)
      cpNavigationSession.add(laneGuidance)
      
      // Reroute
      
      cpNavigationSession.pauseTrip(for: .rerouting, description: "Rerouting")
      cpNavigationSession.resumeTrip(updatedRouteInformation: cpRouteInformation)
    • 0:00 - Introduction
    • In iOS 26, CarPlay features widgets, Live Activities, display zoom, and an updated appearance which your apps get automatically.

    • 1:27 - CarPlay Ultra
    • CarPlay Ultra is the best of your iPhone and the best of the car, together in a unified, consistent, and personalized experience. All the new features, including your apps, are also available in CarPlay Ultra.

    • 2:14 - Widgets
    • Your widgets appear in CarPlay even if you don't have a CarPlay app. All you need to do is support the 'systemSmall' widget family. If your widget is not functional or suitable in the car, set 'disfavoredLocations' to include 'carPlay’.

    • 5:07 - Live Activities
    • Live Activities appear in CarPlay Dashboard or as notifications. CarPlay uses the activity family small size class, the same that's used for the watchOS Smart Stack. If you don't implement activity family small, CarPlay will use your compact leading and trailing views. Use the CarPlay Simulator app for macOS to test widgets and Live Activities.

    • 6:49 - CarPlay framework
    • Use the CarPlay framework to present a version of your app in CarPlay. CarPlay supports audio, communication, driving task, EV charging, fueling, navigation, parking, and quick food ordering app categories via template APIs. The list template has been updated with 5 new presentation styles for image row items, and pinned elements at the top of lists for quick access. The now playing template has a new sports mode to show team scores for streaming events. Audio apps can support Spatial Audio and Dolby Atmos via AirPlay enhanced audio buffering. Navigation apps can present information on multiple screens, including maneuver metadata in the instrument cluster or head-up display in supported cars.

    • 17:15 - Demo
    • For this demo, the CarPlay navigation app 'Coastal Roads' has been updated to send maneuver metadata to the car. The app provides an array of maneuver types, distances, and street names that are rendered by the car for display, in this case on the instrument cluster display.

    • 21:38 - Next steps
    • With support for widgets and Live Activities, there are more ways than ever to bring your app to CarPlay. Updates to the CarPlay framework enable your app to be more expressive and capable.

Developer Footer

  • Videos
  • WWDC25
  • Turbocharge your app for CarPlay
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • App Extensions
    • App Store
    • Audio & Video
    • Augmented Reality
    • Design
    • Distribution
    • Education
    • Fonts
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Machine Learning
    • Open Source
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Tutorials
    • Downloads
    • Forums
    • Videos
    Open Menu Close Menu
    • Support Articles
    • Contact Us
    • Bug Reporting
    • System Status
    Open Menu Close Menu
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles
    • Feedback Assistant
    Open Menu Close Menu
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program
    • News Partner Program
    • Video Partner Program
    • Security Bounty Program
    • Security Research Device Program
    Open Menu Close Menu
    • Meet with Apple
    • Apple Developer Centers
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Academies
    • WWDC
    Get the Apple Developer app.
    Copyright © 2025 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines