Connect IQ SDK

Designing For Connect IQ

The Connect IQ system allows third party developers to bring their design and experience to Garmin products. Your ideas and content are what will power the wearable revolution! This document will go over some of the guidelines of designing an app for a Garmin wearable device.

Thinking Wearable

The KISS principal[1] is one of the best rules of thumb when making a wearable app. One of the synonyms of the word “watch” is “to observe”. When designing smart watch apps, it is best to keep in mind that watches are best when used to observe. Great wearable apps stay out of the user’s way, and keep the interactions to a minimum. Give the user fast access to the information and key interactions they care about. Garmin devices have access to a number of different sensors, including GPS, compass, accelerometer, barometer, as well as the ANT+ network. Let the user see information about themselves in interesting ways.

Design For App Types

The Connect IQ app types are based on the use case of the app. Watch apps have full control of the device. Widgets provide glanceable information to the user. Data fields allow customization of the Garmin activities. Watch faces provide custom displays for the home screen of the watch.

In this section we will delve into the specific guidelines for each use case.

Watch Apps

Watch apps are by far the most robust type of app available. These allow the most flexibility and customization to the app designer. They also provide the most access to the capabilities of the wearable device, such as accessing ANT+ sensors, the accelerometer and reading/recording FIT files.

The suite of Garmin wearables are each designed to fulfill different needs and behaviors of active individuals, from endurance runners to triathletes to outdoor enthusiasts and adventurers. The core focus of these wearables centers on the recording and tracking of activities, from running to hiking to skiing. Users of the different Garmin wearables desire to track specific types of data and great care should be taken in designing your watch app to understand the needs of the user doing a particular activity or task and provide appropriate feedback, metrics and configurability to give the user the best experience.

The initial view of the app should be a call to action. If your app represents some form of activity like hiking or weight lifting, the initial view of the app should ask to be started. Present the user with information from the sensors that make them want to hit the start button.

Garmin commonly uses page loops to present multiple pages of information. Page loops are a carousel of pages, each one a unique view on the activity. This is a common metaphor in Garmin products and easy to implement in Connect IQ.

When your app is presenting large amounts of text to the user, try to keep information in the center of the screen. On round screens the top and bottom of the screen provide a limited viewing area. Use the top for contextual headers, scroll arrows, and other small hints of information.

Widgets

Widgets provide glanceable and relevant information accessible from the watch face. The most important element of the widget is the main page. This is what the user will see upon navigating to your widget; for the best experience this main page should provide relevant, timely and easily digestible information to the user.

The base view of a widget should be a presentation of critical information. Put key information the user will care about on the main page. The main page should only handle the launch widget behavior and the menu behavior. If the user performs the launch widget behavior, you can push a page that presents deeper information.

Your widget should load and unload quickly. Widgets are presented to the user as a carousel, and they may be starting your widget only to get to the next one. If your widget takes too long to load or unload, users will remove it from the watch and punish your app with a one star review.

An illustration of the widget page loop
An illustration of the widget page loop

Because widgets are intended to be glanceable and live in a page loop, behaviors available from the main page are limited. Widgets can open a menu, and on products with touch screens, widgets can provide controls from the main page such as play and pause controls provided in a music player widget. To provide interaction on non-touch products or to provide more views or content in your widget, it must be launched or entered to interact with it. If interaction is desired, widgets should either provide controls from the widget page or should be enterable, but these two widget interactions should not be combined.

If more actions or configurability need to be supported, the widget can open a menu at any time when it is in view. Once entered, interactive widgets can be structured in a page-based manner, similar to watch apps, or hierarchically. Once a widget is opened, a back behavior must be provided to return the user to the main widget face.

Data Fields

Data fields can run inside an already supported activity on the device and are a great way to provide new metrics to users by performing calculations on data already being recorded. Because data fields are integrated in with existing activities, it is best if they appear in the same font and format as that used for the native data fields. For that reason, the simple layout is best as it will ensure your data field will have the same native look and will scale appropriately to all data screen layouts. If you would like to customize your data field, for example, by inserting a bitmap in place of a numerical value, you will need to ensure that your custom field will scale appropriately from a one field, two field, three field, etc. layout.

Use a SimpleDataField when possible to guarantee your data field will have the native look and feel of the other Garmin Data Fields. Connect IQ will try to ensure your data displays with the best font and layout possible.

Watch Faces

Watch faces run continuously on the device and can have the most effect on power consumption. A poorly designed watch face — one that takes too long to draw — can greatly degrade the battery life of the wearable.

Because of power concerns, watch faces have the least access to APIs in the system. They have access to graphics, bitmaps, fonts, current activity tracker status, current battery status, and the user’s activity profile. They cannot access the compass, GPS, or other sensors.

Watch faces should extend the WatchFace class in Toybox::WatchUi. Watch faces update at once a minute in low power mode, or once a second when in full power mode. The watch will transition out of low power mode when the user gestures to look at it. When entering full power mode, watch faces call onExitSleep(), which can be used to trigger animations and timers. The onEnterSleep() method is called when entering low power mode and is used to terminate any active timers. Both of these methods are inherited from Toybox.WatchUi.WatchFace.

If you use custom fonts for numeric display, use the filter option to only load the critical glyphs. This will save memory that you can use for additional graphics


  1. Keep It Simple Stupid. Also accepted: “Kiss the fuzzy monkey who wuvs you so much”  ↩