Posted by Garan Jenkin – Developer Relations Engineer
Put on OS has a thriving watch face ecosystem that includes a wide range of designs that additionally goals to attenuate battery impression. Builders have embraced the simplicity of making watch faces utilizing Watch Face Format – within the final yr, the variety of printed watch faces utilizing Watch Face Format has grown by over 180%*.
In the present day, we’re persevering with our funding and asserting model 4 of the Watch Face Format, obtainable as a part of Put on OS 6. These updates enable builders to precise even higher ranges of creativity by the brand new options we’ve added. And we’re supporting marketplaces, which supplies flexibility and management to builders and extra alternative for customers.
On this weblog publish we’ll cowl key new options, take a look at the documentation for extra particulars of adjustments launched in current variations.
Supporting marketplaces with Watch Face Push
We’re additionally asserting a very new API, the Watch Face Push API, geared toward builders who wish to create their very own watch face marketplaces.
Watch Face Push, obtainable on gadgets operating Put on OS 6 and above, works solely with watch faces that use the Watch Face Format watch faces.
We’ve partnered with well-known watch face builders – together with Facer, TIMEFLIK, WatchMaker, Pujie, and Recreative – in designing this new API. We’re excited that every one of those builders might be bringing their distinctive watch face experiences to Put on OS 6 utilizing Watch Face Push.

Watch faces managed and deployed utilizing Watch Face Push are all written utilizing Watch Face Format. Builders publish these watch faces in the identical method as publishing by Google Play, although there are some further checks the developer should make that are described within the Watch Face Push steering.

The Watch Face Push API covers solely the watch a part of this typical market system diagram – because the app developer, you could have management and duty for the telephone app and cloud parts, in addition to for constructing the Put on OS app utilizing Watch Face Push. You’re additionally accountable for the phone-watch communications, for which we advocate utilizing the Knowledge Layer APIs.
Including Watch Face Push to your mission
To start out utilizing Watch Face Push on Put on OS 6, embrace the next dependency in your Put on OS app:
// Guarantee newest model is utilized by checking the repository implementation("androidx.put on.watchface:watchface-push:1.3.0-alpha07")
Declare the required permission in your AndroidManifest.xml:
"com.google.put on.permission.PUSH_WATCH_FACES" />
Receive a Watch Face Push consumer:
val supervisor = WatchFacePushManagerFactory.createWatchFacePushManager(context)
You’re now prepared to begin utilizing the Watch Face Push API, for instance to checklist the watch faces you could have already put in, or add a brand new watch face:
// Record present watch faces, put in by this app val listResponse = supervisor.listWatchFaces() // Add a watch face supervisor.addWatchFace(watchFaceFileDescriptor, validationToken)
Understanding Watch Face Push
Whereas the fundamentals of the Watch Face Push API are straightforward to know and entry by the WatchFacePushManager interface, it’s vital to think about a number of different components when working with the API in apply to construct an efficient market app, together with:
- Setting lively watch faces – By means of a further permission, the app can set the lively watch face. Study the right way to combine this function, in addition to the right way to deal with the totally different permission situations.
To be taught extra about utilizing Watch Face Push, see the steering and reference documentation.
Updates to Watch Face Format
Images
Out there from Watch Face Format v4
The brand new Images factor permits the watch face to comprise user-selectable pictures. The factor helps each particular person pictures and a gallery of pictures. For a gallery of pictures, builders can select whether or not the pictures advance robotically or when the consumer faucets the watch face.

The consumer is ready to choose the pictures of their alternative by the companion app, making this a good way to incorporate true personalization in your watch face. To make use of this function, first add the required configuration:
"myPhoto" configType="SINGLE"/>
Then use the Images factor inside any PartImage, in the identical method as you’ll for an Picture factor:
"[CONFIGURATION.myPhoto]" defaultImageResource="placeholder_photo"/>
For particulars on the right way to help a number of pictures, and the right way to configure the totally different change behaviors, confer with the Images part of the steering and reference, in addition to the GitHub samples.
Transitions
Out there from Watch Face Format v4
Watch Face Format now helps transitions when exiting and coming into ambient mode.

That is achieved by the prevailing Variant tag. For instance, the hours and minutes within the above watch face are animated as follows:
"AMBIENT" goal="x" worth="100" interpolation="OVERSHOOT" />
By default, the animation takes the total extent of allowed time for the transition. The brand new interpolation attribute controls the animation impact – on this case the usage of OVERSHOOT provides a playful expertise.
The seconds are applied in a separate DigitalClock factor, which exhibits the usage of the brand new period attribute:
"AMBIENT" goal="alpha" worth="0" period="0.5"/>
The period attribute takes a worth between 0.0 and 1.0, with 1.0 representing the total extent of the allowed time. On this instance, through the use of a worth of 0.5, the seconds animation is faster – taking half the allowed time, compared to the hours and minutes, which take your entire transition interval.
For extra particulars on utilizing transitions, see the steering documentation, in addition to the reference documentation for Variant.
Shade Transforms
Out there from Watch Face Format v4
We’ve prolonged the usefulness of the Remodel factor by permitting coloration to be remodeled on the vast majority of parts the place it’s an attribute, and in addition permitting tintColor to be remodeled on Group and Half* parts comparable to PartDraw and PartText.
The primary exceptions to this addition are the clock parts, DigitalClock and AnalogClock, and in addition ComplicationSlot, which don’t at present help Remodel.
Along with extending the checklist of transformable attributes to incorporate colours, we’ve additionally added a handful of helpful features for manipulating coloration:
To see these in motion, let’s contemplate an instance.
The Climate knowledge supply offers the present UV index by [WEATHER.UV_INDEX]. When representing the UV index, these values are usually additionally assigned a coloration:

We wish to characterize this info as an Arc, not solely exhibiting the worth, but in addition utilizing the suitable coloration. We are able to obtain this as follows:
"0" centerY="0" top="420" width="420" startAngle="165" endAngle="165" course="COUNTER_CLOCKWISE"> "endAngle" worth="165 - 40 * (clamp(11, 0.0, 11.0) / 11.0)" /> "20" coloration="#ffffff" cap="ROUND"> "coloration" worth="extractColorFromWeightedColors(#97d700 #FCE300 #ff8200 #f65058 #9461c9, 3 3 2 3 1, false, clamp([WEATHER.UV_INDEX] + 0.5, 0.0, 12.0) / 12.0)" />
Let’s break this down:
- The primary Remodel restricts the UV index to the vary 0.0 to 11.0 and adjusts the sweep of the Arc in keeping with that worth.
- The second Remodel makes use of the brand new extractColorFromWeightedColors operate.
- The first argument is our checklist of colours
- The second argument is a listing of weights – you may see from the chart above that inexperienced covers 3 values, whereas orange solely covers 2, so we use weights to characterize this.
- The third argument is whether or not or to not interpolate the colour values. On this case we wish to stick strictly to the colour conference for UV index, so that is false.
- Lastly within the fourth argument we coerce the UV worth into the vary 0.0 to 1.0, which is used as an index into our weighted colours.
The outcome appears like this:

In addition to having the ability to present uncooked colours and weights to those features, they can be used with values from issues, comparable to HR, temperature or steps purpose. For instance, to make use of the colour vary laid out in a purpose complication:
"coloration" worth="extractColorFromColors( [COMPLICATION.GOAL_PROGRESS_COLORS], [COMPLICATION.GOAL_PROGRESS_COLOR_INTERPOLATE], [COMPLICATION.GOAL_PROGRESS_VALUE] / [COMPLICATION.GOAL_PROGRESS_TARGET_VALUE] )"/>
Introducing the Reference factor
Out there from Watch Face Format v4
The brand new Reference factor means that you can confer with any transformable attribute from one a part of your watch face scene in different components of the scene tree.
In our UV index instance above, we’d additionally just like the textual content labels to make use of the identical coloration scheme.
We may carry out the identical coloration remodel calculation as on our Arc, utilizing [WEATHER.UV_INDEX], however that is duplicative work which may result in inconsistencies, for instance if we alter the precise coloration hues in a single place however not the opposite.
Returning to the Arc definition, let’s create a Reference to the colour:
"0" centerY="0" top="420" width="420" startAngle="165" endAngle="165" course="COUNTER_CLOCKWISE"> "endAngle" worth="165 - 40 * (clamp(11, 0.0, 11.0) / 11.0)" /> "20" coloration="#ffffff" cap="ROUND"> "coloration" title="uv_color" defaultValue="#ffffff" /> "coloration" worth="extractColorFromWeightedColors(#97d700 #FCE300 #ff8200 #f65058 #9461c9, 3 3 2 3 1, false, clamp([WEATHER.UV_INDEX] + 0.5, 0.0, 12.0) / 12.0)" />
The colour of the Arc is calculated from the comparatively complicated extractColorFromWeightedColors operate. To keep away from repeating this elsewhere in our watch face, we’ve added a Reference factor, which takes as its supply the Stroke coloration.
Let’s now have a look at how we are able to devour this worth in a PartText elsewhere within the watch face. We gave the Reference the title uv_color, so we are able to merely confer with this in any expression:
"0" y="225" width="450" top="225"> "225" centerY="0" width="420" top="420" startAngle="120" endAngle="90" align="START" course="COUNTER_CLOCKWISE"> "SYNC_TO_DEVICE" measurement="24"> "coloration" worth="[REFERENCE.uv_color]" /> %d "[WEATHER.UV_INDEX]" />
Because of this, the colour of the Arc and the UV numeric worth at the moment are coordinated:

For extra particulars on the right way to use the Reference factor, confer with the Reference steering.
Textual content autosizing
Out there from Watch Face Format v3
Typically the precise size of the textual content to be proven on the watch face can range, and as a developer you wish to steadiness having the ability to show textual content that’s each legible, but in addition full.
Auto-sizing textual content can assist remedy this drawback, and might be enabled by the isAutoSize attribute launched to the Textual content factor:
"CENTER" isAutoSize="true">
Having set this attribute, textual content will then robotically match the obtainable house, beginning on the most measurement laid out in your Font factor, and with a minimal measurement of 12.
For instance, step depend may vary from tens or tons of by to many hundreds, and the brand new isAutoSize attribute allows finest use of the obtainable house for each doable worth:

For extra particulars on isAutoSize, see the Textual content reference.
Android Studio help
For builders working in Android Studio, we’ve added help to make working with Watch Face Format simpler, together with:
- Run configuration help
- Auto-complete and useful resource reference
- Lint checking
That is obtainable from Android Studio Canary model 2025.1.1 Canary 10.
Study Extra
To be taught extra about constructing watch faces, please check out the next assets:
We’ve additionally just lately launched a codelab for Watch Face Format and have up to date samples on GitHub to showcase new options. The problem tracker is on the market for offering suggestions.
We’re excited to see the watch face experiences that you simply create and share!
Discover this announcement and all Google I/O 2025 updates on io.google beginning Might 22.
* Google Play knowledge for interval 2024-03-24 to 2025-03-23