26 August 2025
This post is part of Wear OS Spotlight Week. Today, we're focusing on creating engaging experiences across the various surfaces available on the wrist.
Developing for the growing ecosystem of Wear OS is a unique and rewarding challenge that encourages you to think beyond mobile patterns. Wear's design philosophy focuses on crafting experiences for a device that's always with the user, where meaningful interactions take seconds, not minutes. A successful wearable app doesn't attempt to maximize screen time; it instead aims to deliver meaningful glanceable experiences that help people stay present and productive while on the go. This vision is now fully enabled by the next generation of hardware, which we explored last week with the introduction of the new Pixel Watch 4.
Wear OS devices also introduce constraints that push you to innovate. Power efficiency is critical, requiring you to build experiences that are both beautiful and battery-conscious. You'll also tackle challenges like handling offline use cases and catering for a variety of screen sizes.
Despite these differences, you'll find yourself on familiar technical foundations. Wear OS is based on Android, which means you can leverage your existing knowledge of the platform, architecture, developer APIs, and tools to create wearable experiences.
Wear OS offers a range of surfaces to inform and engage users. This allows you to tailor your app's presence on the watch, providing the right information at the right time and scaling your development investment to best meet your users' needs.
Watch faces display the time and are the first thing a user sees when they look at their watch. We'll cover watch faces in more detail in other blog posts across Wear OS Spotlight week.
Apps provide a richer, more immersive UI for complex tasks that are too involved for other surfaces.
Notifications provide glanceable, time-sensitive information and actions.
Complications display highly-glanceable, relevant data from your app directly on the user's chosen watch face. Learn more about building complication data sources for Wear OS.
Tiles (Widgets for Wear OS) offer fast, predictable access to information and actions with a simple swipe from the watch face.
Whilst a variety of Wear OS surfaces let developers to engage with users in different ways, it may be overwhelming to get started. We recommend approaching Wear OS development in phases and scale up your investment over time:
Notifications are a core part of the Wear OS experience, delivering glanceable, time-sensitive information and actions for the user. Because Wear OS is based on Android, it shares the same notification system as mobile devices, letting you leverage your existing knowledge to build rich experiences for the wrist.
From a development perspective, it helps to think of a notification not as a simple alert, but as a declarative UI data structure that is shared between the user's devices. You define the content and actions, and the system intelligently renders that information to best suit the context and form factor. This declarative approach has become increasingly powerful. On Wear OS, for example, it's the mechanism behind ongoing activities.
One great thing about notifications is that you don't even need a Wear OS app for your users to see them on their watch. By default, notifications generated by your phone app are automatically "bridged", or mirrored, to a connected watch, providing an instant wearable presence for your app with no extra work. These bridged notifications include an action to open the app on the phone.
You can enhance this default behavior by adding wearable-specific functionality to your phone notifications. Using NotificationCompat.WearableExtender, you can add actions that only appear on the watch, offering a more tailored experience without needing to build a full Wear OS app.
// Prerequisites: // // 1. You've created the notification channel CHANNEL_ID // 2. You've obtained the POST_NOTIFICATIONS permission val channelId = "my_channel_id" val sender = "Clem" val subject = "..." val notification = NotificationCompat.Builder(applicationContext, channelId) .apply { setContentTitle("New mail from $sender") setContentText(subject) setSmallIcon(R.drawable.new_mail_mobile) // Added for Wear OS extend( NotificationCompat.WearableExtender().apply { setSmallIcon(R.drawable.new_mail_wear) } ) } .build() NotificationManagerCompat.from(applicationContext).notify(0, notification)
Once you build a dedicated app for Wear OS, you'll need to develop a clear notification strategy to avoid a common challenge: duplicate notifications. Since notifications from your phone app are bridged by default, a user with both your phone and watch apps installed could see two alerts for the same event.
Wear OS provides a straightforward way to manage this:
If your mobile and watch apps generate similar but distinct notifications, you can link them using setDismissalId(). When a user dismisses a notification on one device, any notification with the same dismissal ID on another connected device is also dismissed.
From a user's perspective, apps and tiles may feel very similar. Both are full-screen experiences that are visually rich, support animations, and handle user interaction. The main differences are in how they are launched, and their specific capabilities:
Apps and tiles are built using distinct technologies. Apps can be built with Jetpack Compose, while tiles are defined declaratively using the ProtoLayout library. This distinction allows each surface to be highly optimized for its specific role – apps can provide rich, interactive experiences while tiles remain fast and power-efficient.
Apps provide the richest experience on Wear OS. Jetpack Compose for Wear OS is the recommended UI toolkit for building them – it works seamlessly with other Jetpack libraries and accelerates development productivity. Many prominent apps, like Gmail, Calendar and Todoist, are built entirely with Compose for Wear OS.
If you've used Jetpack Compose for mobile development, you'll find that Compose for Wear OS shares the same foundational principles and mental model. However, building for the wrist requires some different techniques, and the toolkit provides a specialized UI component library optimized for watches.
Wear OS has its own dedicated Material Design, foundation, and navigation libraries to use instead of the mobile Jetpack libraries. These libraries provide UI components tailored for round screens and glanceable interactions, and are each supported by Android Studio's preview system.
Learn how to use Jetpack Compose on Wear OS to get started, including sample code.
Wear OS also provides APIs designed for power efficiency and the on-wrist use case, as well as Wear OS versions of mobile APIs:
Tiles offer quick, predictable access to the information and actions users need most, accessible with a simple swipe from the watch face. By using platform data bindings to display sources like step count or heart rate, you can provide timely and useful information in your tile.
Tiles are built declaratively using the ProtoLayout libraries, which are optimized for performance and power efficiency—critical considerations on a wearable device. Learn more about how to get started with tiles and how to make use of sample tile layouts.
There has never been a better time to start building for Wear OS. If you have feedback on the APIs, please let us know using the issue trackers for Wear Compose and Tiles. We look forward to seeing what you build!