iOS 27 introduces a new CarPlay video app category allowing users to browse and play videos on supported in-car displays, along with major CarPlay framework enhancements including card thumbnails with overlays, a MiniPlayer for now playing, Voice Control template expansion to all app categories, and navigation panel APIs.
⢠Video apps can now present a full browsing UI on CarPlay displays in cars that support the 'video in car' feature, opening a new category for streaming and content apps
⢠The new MiniPlayer for now playing templates gives all CarPlay apps a persistent, glanceable playback control automatically ā no extra code needed
⢠Voice Control template is now available across all CarPlay app categories (not just navigation), enabling richer in-car conversational experiences
Demonstrates building a CarPlay video browsing list using CPListTemplate with card-style thumbnails, playback progress overlays, and CPPlaybackConfiguration ā the core pattern for the new CarPlay video app category in iOS 27.
import CarPlay
import UIKit
class CarPlaySceneDelegate: UIResponder, CPTemplateApplicationSceneDelegate {
var interfaceController: CPInterfaceController?
func templateApplicationScene(
_ templateApplicationScene: CPTemplateApplicationScene,
didConnect interfaceController: CPInterfaceController
) {
self.interfaceController = interfaceController
let rootTemplate = buildVideoListTemplate(session: templateApplicationScene.sessionConfiguration)
interfaceController.setRootTemplate(rootTemplate, animated: false, completion: nil)
}
func buildVideoListTemplate(session: CPSessionConfiguration) -> CPListTemplate {
// Check if the connected car supports video playback
let supportsVideo = session.contentStyle == .dark // placeholder; real check via CPSessionConfiguration video support
// Build a playback configuration for an in-progress video
let playbackConfig = CPPlaybackConfiguration(
elapsedTime: 142,
duration: 600,
playbackAction: .play
)
playbackConfig.preferredPresentation = .video
// Create a thumbnail overlay badge
let overlayText = CPListItemOverlay(text: "NEW")
// Build a card-style list item with thumbnail, overlay, and playback progress
let videoItem = CPListItem(
text: "Swiss Alps: A Journey Through Time",
detailText: "10 min Ā· Documentary"
)
videoItem.playbackConfiguration = playbackConfig
videoItem.overlay = overlayText
videoItem.accessoryType = .none
// Assign a thumbnail image (replace with real asset)
if let thumbnail = UIImage(systemName: "mountain.2.fill") {
videoItem.setImage(thumbnail)
}
videoItem.handler = { [weak self] item, completion in
self?.startVideoPlayback(for: "swiss-alps")
completion()
}
// Build a sports overlay item
let leftTeam = CPListItemSportsTeam(name: "Eagles", score: "3")
let rightTeam = CPListItemSportsTeam(name: "Lions", score: "2")
let sportsOverlay = CPListItemSportsOverlay(
leftTeam: leftTeam,
rightTeam: rightTeam,
eventStatus: "LIVE"
)
let sportsItem = CPListItem(
text: "Eagles vs Lions ā Live",
detailText: "Sports Channel HD"
)
sportsItem.sportsOverlay = sportsOverlay
if let sportsThumb = UIImage(systemName: "sportscourt.fill") {
sportsItem.setImage(sportsThumb)
}
sportsItem.handler = { _, completion in completion() }
let section = CPListSection(items: [videoItem, sportsItem], header: "Featured Videos", sectionIndexTitle: nil)
let listTemplate = CPListTemplate(title: "Videos", sections: [section])
// Enable MiniPlayer (default is true; shown here for clarity)
if let nowPlayingTemplate = CPNowPlayingTemplate.shared as? CPNowPlayingTemplate {
nowPlayingTemplate.allowsMiniPlayer = true
}
return listTemplate
}
func startVideoPlayback(for videoID: String) {
// Trigger AirPlay video streaming to the CarPlay display
print("Starting video playback for \(videoID)")
}
func templateApplicationScene(
_ templateApplicationScene: CPTemplateApplicationScene,
didDisconnect interfaceController: CPInterfaceController
) {
self.interfaceController = nil
}
}Apps targeting both audio and video audiences should include both CarPlay audio AND video entitlements so the app appears in all CarPlay-enabled cars, not just video-capable ones. CPPlaybackConfiguration must be updated on every playback state change to keep thumbnails accurate. Voice Control overlay text should be shorter than full-screen variants to fit the available overlay space.
CarPlay video apps only appear on the CarPlay home screen in vehicles that support the 'video in car' feature; video playback may fall back to audio-only if the car indicates video is unavailable while driving
More iOS 27 APIs land every week.
Get notified when new capabilities are published ā no noise, just signal.