Kanora
Kanora
All dispatches
Watchos

Kanora on the Watch, for Real

June 2, 20269 min readBy Ben Reed
kanorawatchosfeature

Where it started

The last run of Watch work changes the role of Kanora's Apple Watch app. The first Watch post covered the deliberately modest starting point: browse the iPhone library, control playback, and see what was playing from the wrist. That was useful, but it still made the Watch dependent on the phone. The new work gives the Watch its own local music path, then adds the pieces that make that path feel like part of the product rather than a developer demo.

The headline is simple: albums, playlists, and tracks can now be sent from the iPhone to the Watch for independent playback. Once the music is on the Watch, it lives in a Watch-local library and plays from Watch storage, through the Watch's own audio session, without asking the iPhone to stay nearby. For a music app built around ownership, local files, and listening without a service sitting in the middle, that distinction matters.

Why local playback matters

The obvious use case is running. Pick an album or a playlist on the iPhone, send it to the Watch, leave the phone at home, and listen from the wrist through headphones. The same thing applies to hiking, commuting light, walking the dog, working in the garden, or any other time when carrying a phone feels like overhead rather than utility. It is an iPod on your wrist, except the storage is already there and the library is yours.

That last part is not theoretical. An Apple Watch Ultra 2 has 64 GB of storage. Some of that is used by the system, apps, and caches, but a lot of it is sitting there doing very little for people who mostly use the Watch for health, notifications, and workouts. Music is one of the few things that can make that storage feel genuinely useful. A few lossless albums, a compressed running playlist, or a rotating set of favourites is exactly the sort of job local storage is good at.

Kanora's version of this is not trying to stream from the iPhone to the Watch. That would be the wrong shape for the problem. The point is to put selected music on the Watch, let the Watch play it directly, and keep the iPhone out of the loop once the transfer is done.

Sending music to the Watch

The sync flow is intentionally iPhone-led. The iPhone is where the full library already makes sense: larger screen, better browsing, more context, and a clearer place to decide what should take up limited Watch storage. Send to Watch now appears from the places people already browse, including album menus, playlist surfaces, track context menus, and the dedicated Watch tab when a paired Watch with the Kanora app is actually available. If there is no usable Watch, Kanora does not show a dead-end action.

On the Watch, the synced library has its own browsing surface for albums, playlists, artists, and tracks. Playback has two clear modes: On Watch for local synced music, and On iPhone for the existing companion-control behavior. Those modes are deliberately separate. Starting music from the Watch library should not disturb what the iPhone is doing, and controlling the iPhone should not pretend the Watch has local files it does not have.

Cover Flow belongs on the wrist

One of the nicer surprises is that Kanora now has full-blown Cover Flow on the Watch. That sounds like nostalgia bait until you actually use it with album artwork on a small round-cornered screen and a Digital Crown under your finger. It feels at home there in a way it no longer really does on a large phone screen full of search bars, filters, and dense lists.

There is some public appetite for this, too. I found an Apple Watch Reddit thread with the blunt title "If there ever was a device that was born to have an UI based on CoverFlow, it's the Apple Watch", plus another thread where someone noticed the old scrolling-album-cover reference on Apple Watch and the comments immediately turned into Cover Flow nostalgia. Older watchOS coverage made the same connection from the other direction: MacStories described the watchOS 4 Music design as "Cover Flow-esque", and AppleInsider noted that Apple's Radio app used a Cover Flow-like station display navigated with the Digital Crown.

The Kanora implementation leans into the parts that make sense on the Watch. Album, artist, and playlist browsing can use the same cover browser. The Digital Crown rotates through covers with haptic clicks. Touch swipes move across the row. A tap opens the selected item. A vertical swipe can enlarge or collapse the focused cover. There is also a reduced-motion path that falls back to native paging, because the right answer for watchOS is not to force motion on people who have explicitly asked the system for less of it.

The first version was too eager to open albums when a swipe began on a cover, which is exactly the kind of small Watch interaction bug that makes an otherwise good idea feel unreliable. The follow-up pass moved gesture ownership to the parent view and classifies the touch at lift-off: tiny movement is a tap, horizontal movement is a carousel swipe, vertical movement expands or collapses. That made the difference between a visual flourish and a browse surface I would actually use.

Making sync transparent

A fair amount of the work after the first merge was about making sync visible. Apple's old "it just works" line is fine right up until it doesn't, and then the useful thing is not another spinner but a clear view of what the app thinks is happening. The iPhone Sync to Watch screen now groups in-progress work by the album, playlist, or selection the user asked for, shows track-count progress, updates queued and completed rows live, and asks for confirmation before removing synced content.

The Watch tab can also carry a badge while transfer work is in flight, which is a small thing until the tab is hidden under More and the user has no other clue that a large album is still moving across. Underneath that, progress updates are emitted while files are moving, observers attach before refresh snapshots are published, outstanding file transfers are rebound after launch, and completed sync state no longer disappears from the UI just because the original job left the active queue. There is still deeper transfer telemetry work to do, but the user-facing surface now gives people a better way to understand where their music is.

Now Playing on the face

The newest layer is the Now Playing complication. Kanora now has a Watch complication extension that can show the current track across the common watch face families: rectangular, circular, inline, and corner. It works from either source. If the Watch is playing locally, the complication reads the Watch playback snapshot. If the iPhone is the active source, it reads the latest companion snapshot that reached the Watch. If neither source is active, or the last companion state is stale, it shows an idle state instead of lying with yesterday's track.

That required a small shared store rather than giving the widget extension access to the Watch app's database. The Watch app writes a compact Now Playing snapshot into an App Group, mirrors artwork as small JPEGs when it has it, and asks WidgetKit to reload the timeline when playback changes. The extension stays read-only. Tapping the complication deep-links back into the right place: Watch Now Playing, iPhone companion Now Playing, or the root app when nothing is active.

There were also a few watchOS-specific details that are easy to miss from the outside. Circular complications use a closed elapsed-time gauge that keeps ticking while playing and freezes when paused. Face-tinted modes swap artwork for a glyph because watchOS flattens images in those slots. Track and artist text is marked privacy-sensitive so it can be redacted on Always-On Display when the user's face settings ask for that. These are small choices, but they make the feature behave like it belongs on the watch face.

Things learned

I had not worked with watchOS in depth before this, and Claude did a lot of the mechanical heavy lifting while I tried to keep the product shape and architecture honest. The interesting part was how quickly watchOS pushes back when you try to treat it like small iOS. The screen is not just smaller; the whole interaction model is stricter.

Some of that was frustrating in the moment. The Watch has very firm ideas about navigation, controls, complications, privacy, background behavior, and what belongs on the face. Custom UI that feels reasonable in a simulator can be wrong once it meets the Human Interface Guidelines or the way watchOS actually renders tinted complications. The better answer was usually to stop fighting the platform: use the native Now Playing surface, let the system own the Digital Crown where it should, keep widget extensions read-only, and make the Watch app degrade instead of blocking when the phone is unreachable.

That is probably the main lesson from this tranche. The Watch is a good music device when the feature respects what the Watch is good at: glances, short interactions, local playback, headphones, and quick recovery back to the thing you were doing. It is not a good place to rebuild the iPhone library manager on a tiny screen.

What is still open

What this does not mean is that the Watch story is finished. Quick Launch and Recently Played complications are still separate work. Some physical-device validation remains the hard truth for offline playback and background audio, because simulators cannot answer every question that matters on the wrist. There is also a Watch test-target gap to close so the existing watchOS-guarded tests run directly instead of sitting behind platform guards.

The next practical pass is UX and UI polish. The foundation is now there: local sync, local playback, status visibility, management on the phone, and face-level Now Playing. The next job is to make the daily experience calmer and clearer, especially around storage decisions, transfer failures, and the small Watch screens where every row has to earn its space.

Still, the shape is now much clearer. Kanora on Apple Watch is no longer only a remote for the phone. It can carry music, play it locally, show what is happening on the face, and hand the user back to the right Now Playing surface with one tap. That is the practical version of the product idea: your library is yours, and the Watch should be able to take a useful slice of it with you.