Deep dive
Plug in.
Press
play.
Apple CarPlay is Run2Beat’s third runtime — alongside the iPhone app and the Apple Watch companion. Same library, same player, same equalizer. This page is the long version of what shows up in the car, what Apple allows audio apps to build, and how the in-car surface stays in lock-step with your phone.
The product principle
Identical to the Watch split of responsibilities: the iPhone is the configuration and processing hub. Library imports, BPM recipes, playlist editing, equalizer preset create/rename/delete and pitch rendering all happen on the phone. CarPlay is a read-only playback runtime that exposes only what a driver needs at the wheel — browse, start playback, toggle favourite, switch EQ preset. There is no creating, renaming, deleting or editing in the car.
That is why the homepage line “Setup, presets and EQ stay on the iPhone — the car just plays” is not marketing fluff; it is the architecture.
Three driving-safe tabs
The in-car UI is a system tab bar with three tabs, deliberately mirroring the Watch app so the surfaces feel familiar across devices:
- BPM lists — alphabetical browse of every saved recipe. Open a list and you get a single Shuffle action plus a read-only track listing. In-car BPM playback is shuffle-only; you cannot pick a starting track from the wheel.
- Playlists — the same hierarchy the iPhone uses: Favorites first, then pinned playlists, then your folders, then ungrouped lists. Open a playlist for Play, Shuffle, or tap a track to start from that row.
- Equalizer — presets only. A Standard (flat) row plus one row per saved preset, with a checkmark on the active choice. No per-band sliders in the car — Apple’s HIG treats fine-grained controls as a distraction while driving.
What CarPlay lets you build (and what it doesn’t)
CarPlay is not a place to ship a custom UI. Audio apps get a constrained set of system templates and nothing else. Every layout decision below is downstream of that fact.
Available building blocks include a top-level tab bar (up to five tabs), list templates with sections and rows, and the shared system Now Playing screen — where apps may attach up to five custom buttons but cannot replace the layout, move the transport controls, or override fonts. Notable things audio apps cannot do: draw a custom interface in the car; customise Now Playing’s hero / scrubber / transport chrome; hide tabs based on state; show animations inside list rows; or invent gestures beyond list taps and the stock transport.
The only real lever for visual richness on Now Playing is the artwork you hand to the system Now Playing info centre — which is why the branded placeholder cover matters so much when a track has no embedded art.
One process, one player, one store
The CarPlay scene runs in the same iPhone process as the phone UI. Both scenes must therefore agree on the library database (playlists created on iPhone appear in the car without a manual refresh), the process-wide shared player (pause in the car pauses on the phone mini-player), and the shared equalizer (a preset switched at a red light is heard immediately). A classic per-view player would mean double playback whenever both screens were visible; CarPlay attaches to the same shared player the dashboard already uses.
There is no separate CarPlay target and no extra sync channel to the Watch. The car reads the same library database and the same equalizer the phone does, so all three surfaces stay in lock-step.
Playlists tab — same hierarchy as iPhone
The Playlists builder mirrors the phone ordering: Favorites and pinned at the top, then user-defined groups in the same order you arranged them in Manage Groups (or alphabetical if you never set a manual order), then ungrouped playlists. Collapsed groups on iPhone are intentionally ignored in the car — CarPlay list sections cannot collapse, so every section stays expanded and the head unit scrolls.
Every row can show a 1-or-4 album-art mosaic matching the phone’s playlist artwork grid, pre-rendered at about 80 pt so memory stays bounded when scrolling large libraries. Zero covers fall back to a system icon; one to three covers use the first full-bleed; four or more become a 2×2 grid with a hairline gutter.
Starting playback uses the same path as the phone playlist detail view: build a queue, optionally enable shuffle after start (because the player resets shuffle on play), then show the shared Now Playing screen. Showing that screen twice is an error in CarPlay, so Run2Beat only pushes it when Now Playing is not already on top.
BPM lists tab — shuffle only, on purpose
BPM recipes come from the same preference store the iPhone BPM Lists screen writes. Rows show the familiar N tracks · duration subtitle. Open a recipe and the only action that starts audio is Shuffle; the track list is a preview so you can see what is coming.
Two details keep that contract honest without looking broken. Disabled rows in CarPlay are automatically dimmed, and the product forbids dimmed text — so track rows stay fully enabled and opaque, with an empty tap handler that only dismisses CarPlay’s tap-acknowledgment spinner. Without that handler the spinner would hang forever and block Shuffle. Shuffle itself calls the same pitch-correct BPM recipe playback path the phone uses, so every tempo refinement on iPhone lands in the car for free.
Equalizer tab — presets, not sliders
The Equalizer tab is a thin presentation layer over the same shared equalizer described on the Equalizer deep dive. Standard plus saved presets; tap to activate; checkmark on the active row. No band sliders, matching Apple’s driving-safety guidance and the Watch picker’s spirit. Switching a preset updates live audio through the shared player immediately.
Now Playing — favourite star and artwork
CarPlay’s Now Playing screen is owned by the system. Apps cannot redesign it; they can attach a handful of buttons and supply metadata. Run2Beat adds a favourite star that uses the same filled / outline symbols as the iPhone mini player. The button is rebuilt on every state change because its image cannot be swapped after it is first shown.
Favourite state stays correct even when you toggle from the phone mid-drive: every site that mutates favourite status posts a shared notification, and the CarPlay controller rebuilds the star. It also watches the current track, so advancing to a different song refreshes the button for that track’s status.
Artwork is both the hero image and the blurred backdrop behind the template. Tracks without embedded covers used to leave a flat, empty Now Playing screen. Run2Beat always supplies artwork to the system Now Playing info centre — the track’s own cover when present, otherwise a branded 1024×1024 placeholder with a warm diagonal gradient and a waveform glyph, in the same spirit as Apple Music’s fallback covers. Declaring a large maximum artwork size also prevents tiny imported thumbnails from capping how large CarPlay is willing to draw the hero. The same placeholder lifts the iPhone lock screen and Watch transport for cover-less tracks.
Performance on large libraries
On libraries with many thousands of tracks, a naive refresh strategy is fatal. Early builds rebuilt every CarPlay list whenever the current track changed: rematerialising the whole library and redecoding mosaics on the main thread for seconds at a time. Audio kept playing on its real-time thread, but Now Playing metadata, tap completions and row paints starved — which looked like “artwork arrives late”, “BPM detail won’t open”, or even “the equalizer overlay is animating” when mosaics rippled on auto-advance.
The fix is layered: builders cache a library snapshot for the CarPlay session and refresh it only when the library actually changes; mosaics are cached per playlist / recipe; root tabs subscribe to playlist / recipe / playing state rather than every track advance; and when the playing list does change, only the affected row images are updated surgically. Connecting to a head unit also prefetches dashboard artwork so the first Now Playing paint is not cold.
Design rules from Apple’s HIG
- Limit interaction to a few taps — nothing drills deeper than two levels from the tab bar.
- Make playback the priority; Equalizer is the only non-playback tab and sits at the edge of the bar.
- Use system templates only; honour the system Now Playing screen.
- No ads or promotional content in the car.
The short version
CarPlay is a driving-safe window onto the same Run2Beat library and player you already use on iPhone and Apple Watch. Three tabs, shuffle-first BPM lists, full playlist control, preset-only EQ, a favourite star that stays in sync, and artwork that never leaves the Now Playing screen empty. Setup stays on the phone; the car just plays.
→ Back to the overview