1. Toybox.FitContributor
   URL: https://developer.garmin.com/connect-iq/api-docs/Toybox/FitContributor.html
   Toybox.FitContributor

# Module: Toybox.FitContributor

## Overview

The FitContributor module allows Applications and Data Fields to record Field data into FIT files on the device's file system during an activity. This is useful for recording data that is not already calculated by the device, which can be synced to a service like Garmin Connect.

There are three FitContributor message types available:

MESG_TYPE_SESSION

Session data is written once per recording session at the end of the recording, and is used for data that pertains to the entire session (e.g. average speed).

MESG_TYPE_LAP

Lap data is written once for every lap in the session, and used for data that pertains to each lap (e.g. average lap speed).

MESG_TYPE_RECORD

Depending on the device, record data is written once per second or when new data is available (Smart Recording), but is never written faster than once per second. This message type is used for instantaneous values (e.g. current speed).

Data type constants are also available for use with the createField() method.

## See Also:

Learn more about the FIT format

## Classes Under Namespace

## Constant Summary

### MessageType

API Level 1.3.0

The message type for session messages.

API Level 1.3.0

The message type for lap messages.

API Level 1.3.0

The message type for record messages.

| Name | Value | Since | Description |
| --- | --- | --- | --- |
| MESG_TYPE_SESSION | 18 |
| MESG_TYPE_LAP | 19 |
| MESG_TYPE_RECORD | 20 |

### DataType

API Level 1.3.0

API Level 1.3.0

API Level 1.3.0

API Level 1.3.0

API Level 1.3.0

API Level 1.3.0

API Level 1.3.0

API Level 1.3.0

API Level 1.3.0

| Name | Value | Since | Description |
| --- | --- | --- | --- |
| DATA_TYPE_SINT8 | 1 |
| DATA_TYPE_UINT8 | 2 |
| DATA_TYPE_SINT16 | 3 |
| DATA_TYPE_UINT16 | 4 |
| DATA_TYPE_SINT32 | 5 |
| DATA_TYPE_UINT32 | 6 |
| DATA_TYPE_STRING | 7 |
| DATA_TYPE_FLOAT | 8 |
| DATA_TYPE_DOUBLE | 9 |

---

Generated Jun 8, 2026, 3:42:16 PM

2. FitContributor with Data Field WITHOUT having to create entire App? - Connect IQ App Development Discussion - Connect IQ - Garmin Forums
   URL: https://forums.garmin.com/developer/connect-iq/f/discussion/4758/fitcontributor-with-data-field-without-having-to-create-entire-app
   FitContributor with Data Field WITHOUT having to create entire App? - Connect IQ App Development Discussion - Connect IQ - Garmin Forums

- Replies 26 replies
- Subscribers 15 subscribers
- Views 8520 views
- Users 0 members are here

Options

Related

# FitContributor with Data Field WITHOUT having to create entire App?

I need to do something very simple without having to write the code for an entire app. I've created a ConnectIQ Data Field which can easily be added to the pre-existing Garmin Run activity to show ANT+ sensor Power in watts from a force sensor in the running shoe, just like you would inside the Bike activity if you were riding with an ANT+ power meter. This combination with the Run activity allows combination of watts with Running Dynamics fields already available from the Garmin run strap. It works just find for display on the watch, but does not save to the pre-existing .FIT file generation within Garmin's own Run activity. Of course, it can work with the Bike app and save the power in watts, but then the running dynamics are not available there. Is there any way to use the FitContributor module to simply add this additional Power field to all the other ones already being recording in the Run activity .FIT file? I know you can do this by writing a complete app like the Moxy Sample, but this is for lots of fields in a truly unique configuration and I just need to add one field to the one-second record for power in watts. It says in the documentation that FitContributor works for a Data Field and App, but it does not say a Data Field WITHOUT creating a custom Watch App. Any thoughts? Great stuff in the forum on how to use FitContributor with Apps like Moxy sample, but not something simpler. Before I try it on my own, to strip Moxy way down to work as a Data Field for only one value, I'd like to know if it's even possible. Thanks, Ironman.Texas

- Sign in to reply
- Cancel

## Top Replies

- As with my own SimpleDataField app, the MFuel displays fine and shows data in the simulator or while doing a Run workout from the watch, since it's based on a simple calorie version, which I understand…

## All Replies

This should give you the basis of what you need, https://github.com/lcj2/ciq_monkeyfuel. It won't include the ANT piece you have but shows the FIT contributor in a data field. Since you are using power, you'll want to brush up on the use of native field mapping so that sites like strava, training peaks, sporttracks will use your power data in calculations. If after you review it and have more questions let me know but the answer to your question is that FIT contributor supports data fields. **NOTE** There are a couple FIT recording issues depending on the device for session and last lap but those are outside the developers control and have been reported for correction. You can review the bug report thread for the information.

> It says in the documentation that FitContributor works for a Data Field and App, but it does not say a Data Field WITHOUT creating a custom Watch App.

A Data field is one of the 4 "app types" in CIQ. Watch-App is another (a full blown, stand-alone app) (watchface and widget are the other two) You can use FitContrib in a data filed that's used in something like the native cycling app. A CIQ (or native) DF actually can not be used in a CIQ watch-app.

Thanks for the code references from GitHub. These are proving very helpful--I can just cut out most of what I don't need, because I only need ANT+ Power and its derivatives like Average Power. So if I successfully implement the FitContributor code segments for ANT+ Power, Average Power, and Lap Power in a DATA FIELD App, such as the Monkey Fuel example, will I then be able to load these 3 as Connect IQ data fields into the NATIVE Run app data screens. In other words, I would have a display that would show things like Average HR, Power, Lap Power and Average Pace (Run) on one data screen, and then save all of these to a .FIT file that would show up in Garmin connect as a RUN Activity? I want to avoid having to recalculate and/or recode all the other native data elements of the run app like Cadence, Average Cadence, Vertical Oscillation, Ground Contact Time, etc., and just develop my own additional Power data fields. Thanks, IronmanTexas

> will I then be able to load these 3 as Connect IQ data fields into the NATIVE Run app data screens.

Yes. You are implementing a data field. It just displays a bit of data to be shown inside a native app. You control the data that is shown in your data field on the watch screen, and you control what additional data is written to the .FIT file and displayed in Garmin Connect.

Can't get MonkeyFuel to record anything viewable from Garmin Connect

> This should give you the basis of what you need, https://github.com/lcj2/ciq_monkeyfuel. It won't include the ANT piece you have but shows the FIT contributor in a data field. Since you are using power, you'll want to brush up on the use of native field mapping so that sites like strava, training peaks, sporttracks will use your power data in calculations. If after you review it and have more questions let me know but the answer to your question is that FIT contributor supports data fields. **NOTE** There are a couple FIT recording issues depending on the device for session and last lap but those are outside the developers control and have been reported for correction. You can review the bug report thread for the information.

I'm new to the Connect IQ environment, so forgive me if I seem stupid. At first, I seemed to able to follow your code, but I still can't seem to get any additional data fields into a .FIT file for pre-existing Garmin Run App (on a 735xt or 920xt, the two I own and can test on) to show up from FIT files recorded either from the watch with a sideloaded data field or from the Connect IQ Simulator when I record the data. All that show up are there pre-existing run data fields. The MonkeyFuel app successfully builds, and creates the PRG and debug files, but also creates two more .JSON files in the bin folder (what are these for? I can guess, but no other sample app I've seen uses these). It loads into the watch and runs on the simulator, but I can't find any evidence of that field getting recorded. Is there some way I can check for this other than Garmin Connect or other web-based apps that read FIT files? As with my own SimpleDataField app, the MFuel displays fine and shows data in the simulator or while doing a Run workout from the watch, since it's based on a simple calorie version, which I understand. But like my own Power data field, there is no recording that I can find in the .FIT file. Could it be in there but just not showing up in GarminConnect? Does Garmin Connect make a prior restraint on adding any new data displays to something like a Running workout? Will I have to make up my own new sport, write a dedicated Watch App just get the one Power data field to record with traditional running metrics? Laps seem to have no effect, either, do not show up at all, just the regular Run lap like time or average pace for the lap. No way to see Monkey Fuel per lap that I can find or average MFuel for a session, not on the watch itself of the FIT file.

> I still can't seem to get any additional data fields into a .FIT file for pre-existing Garmin Run App

How are you looking for the data? Are you loading it up in monkeygraph utility or dumping it with one of the FIT file utilities that come with the FIT SDK?

> As with my own SimpleDataField app, the MFuel displays fine and shows data in the simulator or while doing a Run workout from the watch, since it's based on a simple calorie version, which I understand. But like my own Power data field, there is no recording that I can find in the .FIT file. Could it be in there but just not showing up in GarminConnect? Does Garmin Connect make a prior restraint on adding any new data displays to something like a Running workout? Will I have to make up my own new sport, write a dedicated Watch App just get the one Power data field to record with traditional running metrics?

Garmin Connect can't be used to test the data field because it relies on the FIT contributor definition file from the store when an app is published. All of your FIT file analysis for the simulator or side loaded apps will need to happen with Monkey Graph or the FIT to CSV tool from the FIT SDK. How are you determining that no data is in the file?

> Laps seem to have no effect, either, do not show up at all, just the regular Run lap like time or average pace for the lap. No way to see Monkey Fuel per lap that I can find or average MFuel for a session, not on the watch itself of the FIT file.

Assuming the lap information made it into the FIT file, they are not currently showing in Garmin Connect. This issue has been reported and hopefully is being worked on.

Problems getting monkeygraph to work with ANY app

> How are you looking for the data? Are you loading it up in monkeygraph utility or dumping it with one of the FIT file utilities that come with the FIT SDK?

Thanks for all the help. After using the FitSDK tools, I can now see my Power data fields for Record and Lap in the .FIT file once its converted to CSV form. Everything looks fine. But now, I can't seem to get ANY sample app or my own app to work with monkeygraph. I have used the App Export Wizard to create the IQ zipped up package, started monkeygraph from within Eclipse, then loaded both the exported IQ and generated FIT file using the File command in that window (FIT file generated from app sideloaded to the 735xt watch, not from the Simulator). Nothing happens in the PC window for Monkeygraph. I did the same thing with the Monkey Fuel sample app you suggested, which like my own is showing up fine in the .FIT file tabulation, but does nothing within monkeygraph. Then I tried running monkeygraph.bat from the command line, and I got a rather long list of not-good looking output which I don't fully understand (see output below). So apparently, I'm just not using monkeygraph right. Do all files like IQ, FIT and monkeygraph need to be in the same directory? Do I need to be passing other command line parameters to monkeygraph? Is there some more comprehensive documentation on monkeygraph? All I can find is in the forum, where no one seems to have trouble, and the main HTML documentation just a few suggestions to use it--not how or how to fix problems with it. One more question: many people in the forum get monkeygraph to work fine, then do NOT get Garmin Connect to show the FIT charts successfully. When I export to the IQ and upload to the store, is there a way to submit NOT for publication checking by Garmin but just show I can check as a developer if it truly works. I am doing everything in my resource and manifest file just like Monkey Fuel and the other sample apps--though mine is much simpler, just one data field, power as an integer, and one unit, watts. Really, my data field app is very simple, and treats running power just as if it came from a bike power meter--and it will work/test with a bike-connected ANT+ power meter as well. Really, I'm just taking a bike native field, Power in watts, and moving it into the Run native app as a ConnectIQ data field so it can be shown with things like cadence, GCT and Vertical Oscillation from the HRM/Run strap. No problem displaying or even averaging, since these are already available in the info object. Thanks, IronmanTexas OUTPUT FROM MONKEYGRAPH.BAT processing IQ and FIT files: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at com.garmin.monkeybrains.fitgraphs.graph.FitGraphXYDataset. (FitGraphXYDataset.java:63) at com.garmin.monkeybrains.fitgraphs.ui.MainUiController.buildCharts(MainUiController.java:163) at com.garmin.monkeybrains.fitgraphs.ui.MainUiController.buildTabs(MainUiController.java:145) at com.garmin.monkeybrains.fitgraphs.ui.MainUiController.actionPerformed(MainUiController.java:134) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.AbstractButton.doClick(Unknown Source) at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source) at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$500(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)

Are you providing a resource file to describe the fit contributions? In the sample project, you'd want to look at fit.xml. I had absolutely no problem getting this to work. The steps I followed...

Inside eclipse...

- Import the project by clicking File > Import > General > Existing Projects Into Workspace > Next > Browse, picking the project folder and then clicking Next.
- Build the .iq file by clicking ConnectIQ > App Export Wizard..., then selecting monkeyfuel from the Choose the project to export dropdown and clicking Finish.
- Configure a run configuration by clicking Run > Run Configurations... > Choose a Project > monkeyfuel and then clicking the Run button.
- The project is built and the simulator starts.

Inside the simulator...

- Start activity simulation by clicking Simulation > Fit Data > Simulate Data...
- Start activity recording by clicking the start button on the simulated device, or clicking Data Fields > Timer > Start Timer.
- Let the simulation run for a while.
- Insert a lap marker in the fit file by clicking the lap button on the simulated device, or by clicking Data Fields > Timer >
- Stop activity recording by clicking the start button on the simulated device, or clicking Data Fields > Timer > Stop Timer.
- Save the activity recording by clicking Data Fields > Timer > Save Activity.
- Close the simulator.
- [/list]

Inside monkeygraph...

- Load the .iq file by clicking File > Open IQ File, and selecting the .iq file from step 3.
- Load the .fit file by clicking File > Open FIT file, and browsing to the .fit file in %TEMP%\Garmin\Activities.

[/list] Travis

> FIT file generated from app sideloaded to the 735xt watch, not from the Simulator

Sorry, I missed this before I posted above.

> Do all files like IQ, FIT and monkeygraph need to be in the same directory?

No. I didn't need to do this in my testing.

> Do I need to be passing other command line parameters to monkeygraph?

No, just start monkeygraph and select the files from the UI.

> Is there some more comprehensive documentation on monkeygraph?

Not really. Just what is in the programmer's guide.

> When I export to the IQ and upload to the store, is there a way to submit NOT for publication checking by Garmin but just show I can check as a developer if it truly works.

Yes. Put DO NOT APPROVE in the app title or description when you submit it. Once you've got it all worked out, remove that and it'll get approved. Travis

3. Toybox.FitContributor.Field
   URL: https://developer.garmin.com/connect-iq/api-docs/Toybox/FitContributor/Field.html
   Toybox.FitContributor.Field

# Class: Toybox.FitContributor.Field

Inherits: Toybox.Lang.Object

Toybox.Lang.Object

Toybox.FitContributor.Field

show all

## Overview

A Field records custom FIT data from an Application or Data Field to a FIT file on the device's file system.

Once a Field is created with the createField() method, you can submit the next Field value with setData(), which will get written to the FIT file at the next opportunity. Depending on the device, writes to the FIT file may occur once per second or when new data is available (Smart Recording). Best practice is to only call setData() when values have changed to accommodate Smart Recording.

If setData() is called before the previous data is written out, the previous value will be lost and replaced by the current data. For this reason, we do not recommend using this feature for time-sensitive data requiring sub-second granularity.

## See Also:

Session.createField()

Smart Recording vs. Every Second Recording

Learn more about the FIT format

## Instance Method Summary collapse

setData(input as Lang.Object) as Void

Set the value to write to this Field.

## Instance Method Details

### setData(input as Lang.Object) as Void

https://developer.garmin.com/connect-iq/api-docs/Toybox/Lang/Object.html

Set the value to write to this Field.

---

Generated Jun 8, 2026, 3:42:16 PM

4. Writing to .fit files from a datafield app - Connect IQ App Development Discussion - Connect IQ - Garmin Forums
   URL: https://forums.garmin.com/developer/connect-iq/f/discussion/285/writing-to-fit-files-from-a-datafield-app
   Writing to .fit files from a datafield app - Connect IQ App Development Discussion - Connect IQ - Garmin Forums

- Replies 13 replies
- Subscribers 17 subscribers
- Views 4776 views
- Users 0 members are here

Options

Related

# Writing to .fit files from a datafield app

Hi, I've published a first version of a data field for garmin 920xt, and wonder if it will be possible to write data to the .fit file from tha IQ SDK. Regards and thanks for IQ, it's great ! Rafael

- Sign in to reply
- 5163151 likes this" data-format="{count}" data-configuration="Format=%7Bcount%7D&IncludeTip=true">
- Cancel

There is an ActivityRecording API available to the App type application, which records data to FIT files. Data fields run in the context of another activity, so they don't have the ability to record FIT files themselves--they just display information in new ways, though the activity in which the data field runs records as it normally would.

Yeah, but an app type application has to override a complete garmin app ;-). I just want the datafield to be able to write a record, hope garmin add this in the near future ;-). Regards,

I'm trying to get this to work as well. I followed the bananas earned example on this page:

but no data is saved for my custom datafield after the activity (walk) is completed and saved. Is there something else that I need to do? Also I set the field ID to 0, but how do I know if this conflicts or not with an existing ID that may be being used , custom or native?

You need to createField(), and make sure you have the data you want for that field at all times using setData() (I do it in compute() on every call.)

You need to have the xml file that defines how that data will be displayed in Garmin Connect, and for that data to be displayed, the DF needs to be installed from the app store.

As far as the field ID, it's really not just a 0. It's a combo of that plus your app ID, so it's only got to be unique in your data field.

Thanks,

Can you explain this more ? ==>

>> You need to have the xml file that defines how that data will be displayed in Garmin Connect, and for that data to be displayed

Do I need to create an XML file or does the user do it somehow manually or automatically?

It's used when you compile to build the fit_contributions.jso which is included in the iq file for the store.

For example, in a DF initialize(), I have this:

field=createField("piTemp",0,FitContributor.DATA_TYPE_FLOAT, {:mesgType => FitContributor.MESG_TYPE_RECORD});

in compute, this:

field.setData(tempValue);

And the fitContrib.xml has this:

```
<resources>
    <strings>
    	<string id="temp_label">Temp</string>
    	<string id="temp_units">F</string>
    	<string id="temp_title">piTemp</string>
    </strings>

     <fitContributions>
        <fitField id="0" displayInChart="true" chartTitle="@Strings.temp_title" fillColor="ff0000" sortOrder = "1" precision="2" displayInActivityLaps="false"
        dataLabel="@Strings.temp_label"
        unitLabel="@Strings.temp_units"/>
     </fitContributions>
</resources>
```

The result is this graph:

I think I followed everything required. I looked in the iq file and there is no fit_contributions.jso file. What could be the cause?

It will be in a folder for a part number along side the prg.

Where do you have your xml file? Induce an error in it and rebuild your app. It will give you a warning/error if it's in the proper place.

I looked in a couple of the part number folders. Just to be clear, I have to manually create fitContrib.xml right? Where do I put it? The documentation is not clear on this.

He goes under resources. Here's what I often do:

The fitcontrib.xml is what I posted a while back. It's app specific so you need to do your own.

5. FitContributor custom filed:  how to visualize it in Garmin Connect? - Connect IQ App Development Discussion - Connect IQ - Garmin Forums
   URL: https://forums.garmin.com/developer/connect-iq/f/discussion/6793/fitcontributor-custom-filed-how-to-visualize-it-in-garmin-connect
   FitContributor custom filed: how to visualize it in Garmin Connect? - Connect IQ App Development Discussion - Connect IQ - Garmin Forums

- Replies 9 replies
- Subscribers 16 subscribers
- Views 2243 views
- Users 0 members are here

Options

Related

# FitContributor custom filed: how to visualize it in Garmin Connect?

Hello,In my DataField I write to the FIT-File.`// Create the custom FIT data field we want to record. verticalSpeedFitField = DataField.createField( "vertical_speed", VERTICALSPEED_FIELD_ID, Fit.DATA_TYPE_UINT16, {:mesgType=>Fit.MESG_TYPE_RECORD, :units=>"m/h"} ); verticalSpeedFitField.setData(0); //and onceASecond with verticalSpeedFitField.setData(myVerticalSpeed.toNumber());` The goal is to see a graph with these values in The Garmin Connect Activities (https://connect.garmin.com/modern/activities)But I cant see anything from my VerticalSpeed there!What more do I have to do to make this happen?Tks

- Sign in to reply
- Cancel

## Top Replies

- You need to:- Add the information about your FitContributor field to the app XML (*)- Submit your app to the store (sideloaded apps won't show FitContributor values -- you can see the graph during testing…
- That was just an example and I'm not sure how much you actually used. You need to define the strings for the chart title, data label and unit label. I'm guessing you already did that otherwise you would…

## All Replies

You need to:- Add the information about your FitContributor field to the app XML (*)- Submit your app to the store (sideloaded apps won't show FitContributor values -- you can see the graph during testing by using the MonkeyGraph tool from the SDK)Also, there have been on-and-off again issues with displaying developer fields in either the mobile app or the website. These seem to be mostly fixed by now, but just in case check in both the app and the website.(*) e.g. https://developer.garmin.com/index.php/blog/post/connect-iq-2-the-full-circle

> First, you must enable the FitContributor permission in the manifest file. Next, you need to add your field definitions in your resources using the fitContributions block:` Namastes Namastes N(s) `

Thanks, but still not working...I added a resource.xml to the folder resoures:` ` The ID =0: (should therefore be correct.`const VERTICALSPEED_FIELD_ID = 0;` the permission is set in the manifest.xml-I downloaded it via the shop to the watch,-started an app witch contains this DataField,-Sync to Garmin Connect,where I can see my activity but this fitField!!Any hint?

That was just an example and I'm not sure how much you actually used. You need to define the strings for the chart title, data label and unit label. I'm guessing you already did that otherwise you would get a build error, but I would expect your actual code to look more like this:` Vertical Speed Vertical Speed m/h ` As I mentioned, it would help if you use the MonkeyGraph tool in the SDK to test locally:1) In simulator, record FIT file with your app.Simulation > Simulate DataData Fields > Timer > Start ActivityData Fields > Timer > Stop ActivityData Fields > Timer > Save Activity (this is important)Simulation > Save FIT session2) In Eclipse, export IQ file for appConnect IQ > App Export Wizard3) Start monkeygraphConnect IQ > Start monkeygraphOpen both the IQ file and the FIT file. Make sure that you see a graph; if not, you know that something is already wrong before you even upload the app to the store and test with Garmin Connect.Also, are you sure you don't want your FIT field to be a float type and not UINT16? I'm guessing that the vertical speed in metres per hour is not always going to be an integral value.And, I assume that your initialization code (createField, etc.) happens your data field initialize() function. If you do it at some other point (for whatever reason), it won't work (I've tried it -- long story).

Hello FlowState,Tks for your help It is working now!Seems it had a problem with type. string or INT, I do not know so exaclty.VerticalSpeed is rounded to 50 ex 450m/h. so I choosed SINT16had to use ToNumber.()So code is:`function initialize() { DataField.initialize(); // Create the custom FIT data field we want to record. verticalSpeedFitField = DataField.createField( "vertical_speed", VERTICALSPEED_FIELD_ID, Fit.DATA_TYPE_SINT16, // +/- 32767 {:mesgType=>Fit.MESG_TYPE_RECORD, :units=>"Up m/h"} ); verticalSpeedFitField.setData(0); } OnUpdate... verticalSpeedFitField.setData(myVerticalSpeed.toNumber());`

Hey, glad it's working for you now, although I wasn't much help. Your code in the OP had toNumber so I'm not sure what else is different except SINT16 instead of UINT16. Anyway, I should've mentioned that recording seems to silently fail if there's a type mismatch, but it's working now so it's all good.

You were a big help for the MonkeyGraph and the resource.xml.It saved me probably a lot of time.It is now in : https://apps.garmin.com/en-US/apps/1cc6cbe8-d655-4956-b870-54eea8bf9c6d Thank you

The vertical speed is only saved to FIT, when this DataField is active on the watch (visible).Otherwise it seems, that it goes to sleep. So in the graph I have "data holes", were the DataField was not active.Is there a workaround?

You want to do the data save in compute() and not in onUpdate(). Compute is called every second if the DF is visible or not, but onUpdate is only called when the DF is visible..

Thanks a lot, that was very useful.However my field is showing in garmin connect, but not in monkey graph. Thks Pierre

Toybox.FitContributor

Toybox.FitContributor.Field


400 "The prompt is too long: 323274, model maximum context length: 262144 (ref: 4d962d74-fec3-4fd2-b837-5aa2d6dc10a3)"


Summary:
## Goal
Create a personal, sideloaded Garmin Connect IQ freediving app that records dive time, depth, heart rate, and static breath-hold sessions, running on one of the user’s existing watches (Garmin Venu 2 or fēnix 3), for dives up to ~30 m.

## Constraints & Preferences
- Target hardware limited to **Garmin Venu 2** or **Garmin fēnix 3**; user prefers not to buy a fēnix 5 if possible.
- Maximum planned dive depth: **30 m**.
- Garmin does **not** rate these watches for diving:
  - Venu 2: 5 ATM (~50 m pressure equivalent), “Swim” rating, touchscreen AMOLED.
  - fēnix 3: 10 ATM (~100 m pressure equivalent), but Garmin states it is for surface swimming and diving may void warranty.
- Wrist-based optical HR does not work reliably underwater; underwater HR requires an ANT+ chest strap such as **HRM-Swim** or **HRM-Tri**.
- GPS does not work underwater; horizontal distance can only be estimated from accelerometer or logged for surface segments.
- Diving/freediving apps are **banned from the Connect IQ Store**; the app can only be used via personal sideloading.
- Depth must be derived from barometric pressure and calibrated at the surface.
- User wants static breath-hold timer functionality.

## Progress
### Done
- [x] Researched and documented water-resistance ratings and diving limitations of Venu 2, fēnix 3, and fēnix 5.
- [x] Identified Connect IQ policy constraints and sideloading requirements.
- [x] Researched underwater HR limitations and compatible chest straps.
- [x] Drafted a full structured implementation plan covering goal, constraints, approach, steps, verification, risks, and open questions.

### In Progress
- [ ] Refining the plan based on the user’s answers to open questions.

### Blocked
- (none)

## Key Decisions
- **Use existing watch instead of buying fēnix 5**: User wants the app to run on the Venu 2 or fēnix 3 they already own.
- **Target max depth ~30 m**: Below the pressure-equivalent ratings of both watches, but still beyond Garmin’s stated “surface swimming” use case, so warranty/damage risk remains.
- **Sideload-only distribution**: Because Garmin prohibits freediving apps in the Connect IQ Store.

## Next Steps
1. Answer the remaining open questions: water type (fresh vs. salt), whether the user has/will buy an HRM-Swim/Tri chest strap, desired safety alerts, and whether the user wants to write the Monkey C code themselves or have it implemented for them.
2. Determine the primary target device by checking which of the Venu 2 / fēnix 3 can reliably expose barometric pressure to Connect IQ and which SDK versions support each.
3. Select the final device and SDK version.
4. Set up the Connect IQ SDK and simulator.
5. Begin implementing the app skeleton with dive mode, breath-hold mode, and pressure-to-depth conversion.

## Critical Context
- **Venu 2 specs**: 5 ATM, “Swim” rating, pressure equivalent to 50 m; not dive-rated; touchscreen.
- **fēnix 3 specs**: 10 ATM, pressure equivalent to 100 m; explicitly limited to surface swimming by Garmin.
- **Garmin policy**: Apps for scuba diving, freediving, skydiving, and base-jumping are not listed in the Connect IQ Store; sideloading via USB to `GARMIN/APPS/` is the only viable path.
- **Underwater HR**: Wrist HR is unreliable underwater; requires HRM-Swim or HRM-Tri ANT+ chest strap that stores data and downloads it at the surface.
- **Depth calculation**: `depth ≈ (P − P_surface) / (ρ · g)`; needs surface calibration and fresh/salt-water density setting.
- **Original implementation plan**: already covers full approach, steps, verification, risks, and open questions.

---

**Turn Context (split turn):**

## Original Request
The user asked for a structured implementation plan for a Garmin Connect IQ sideloaded app for freediving/snorkeling up to 30 m in fresh water or pool, primarily for the watches they already own (Venu 2 and/or Fenix 3). Requirements: Venu 2 uses built-in HR; Fenix 3 uses an external HR monitor; only sideloading (no store submission); max 30 m. Before building, the user wants confirmation whether these watches can measure depth accurately enough and what the limitations of each would be.

## Early Progress
- Began researching device/API feasibility rather than writing code or the final plan.
- Searched and fetched Connect IQ device references and forum discussions about raw pressure/depth data on Fenix 3 and Venu 2.
- Identified a key concern: `Sensor.Info.pressure` on Fenix 3 appears auto-calibrated/filtered, which may make direct depth measurement unreliable.
- Fetched manuals/warnings for both watches, noting Venu 2 advises avoiding button presses underwater and relies on a touchscreen, while Fenix 3 is older and 10 ATM rated.
- Looked at `Toybox.FitContributor` docs as the likely mechanism for recording custom depth fields in a FIT activity.

## Context for Suffix
- Need to determine whether Venu 2 and Fenix 3 expose raw ambient/barometric pressure in Connect IQ (`Sensor.Info.ambientPressure`, API level support, SDK version limits).
- Need to confirm water/depth ratings and practical suitability for repeated submersion to 30 m.
- Need to evaluate UI/control limitations: Venu 2 touchscreen behavior underwater vs. Fenix 3 physical buttons.
- Need to assess HR underwater support (optical HR on Venu 2 vs. chest strap on Fenix 3) and whether wrist optical HR works reliably in water.
- Need to choose a recording app type that supports `FitContributor` so depth can be written to the FIT file.
- Research remains incomplete; the retained suffix likely continues feasibility analysis and then builds the structured plan.


The user is asking me to continue from a compacted summary. The goal is to create a personal, sideloaded Garmin Connect IQ freediving app. We need to determine device/API feasibility and then build a structured implementation plan.

Let me first check what files/data might exist in the workspace from previous work, then do targeted research on:
1. Whether Venu 2 and Fenix 3 expose raw ambient/barometric pressure in Connect IQ
2. SDK/API level support for each device
3. FitContributor recording type requirements
4. Underwater HR specifics

Let me start by exploring the current directory and any existing project files.

I’ll pick up where the feasibility research left off. First let me check what, if anything, is already in the workspace, then verify the key API/device questions before building the plan.

bash

ls -la && echo "---" && find . -maxdepth 3 -type f | head -50


total 17160
drwx------ 23 liph liph     4096 Jul 26 22:37 .
drwxr-xr-x  4 root root     4096 Mar 23 21:05 ..
drwxr-xr-x  6 liph liph     4096 Jul 24 10:01 .a5c
lrwxrwxrwx  1 liph liph       27 Mar 23 20:59 .aliases.zsh -> dotfiles/zshrc/.aliases.zsh
drwx------  3 liph liph     4096 Mar 23 21:06 .atuin
-rw-------  1 liph liph      327 Jul 23 22:13 .bash_history
-rw-r--r--  1 liph liph       21 Dec 10  2025 .bash_logout
-rw-r--r--  1 liph liph       57 Dec 10  2025 .bash_profile
-rw-r--r--  1 liph liph      172 Dec 10  2025 .bashrc
drwxr-xr-x  3 liph liph     4096 Mar 23 21:18 .bun
drwxr-xr-x 12 liph liph     4096 Jul 23 17:26 .cache
drwxr-xr-x  3 liph liph     4096 Mar 23 21:06 .cargo
lrwxrwxrwx  1 liph liph       16 Jul 22 08:50 code -> /mnt/flash1/code
drwxr-xr-x 11 liph liph     4096 Jul 24 08:47 .config
-rw-------  1 liph liph 70246400 Jul 23 17:37 core
drwxr-xr-x 30 liph liph     4096 Jul 23 16:54 dotfiles
drwxr-xr-x  3 liph liph     4096 Jul 23 17:33 .dotnet
lrwxrwxrwx  1 liph liph       26 Mar 23 20:59 .export.zsh -> dotfiles/zshrc/.export.zsh
-rw-r--r--  1 liph liph       45 Jul 23 13:58 .gitconfig
drwx------  3 liph liph     4096 Mar 24 09:39 .gnupg
drwx------ 17 liph liph     4096 Jul 23 22:18 .hermes
drwxr-xr-x  6 liph liph     4096 Jul 21 21:25 .local
drwxr-xr-x  3 liph liph     4096 Dec 30  2025 .locale
drwxr-xr-x  6 liph liph     4096 Jul 24 08:36 .npm
drwxr-xr-x  4 liph liph     4096 Jul 23 17:33 .nuget
drwxr-xr-x  4 liph liph     4096 Jul 21 22:02 .opencode
drwxr-xr-x  5 liph liph     4096 Mar 23 21:09 paru
lrwxrwxrwx  1 liph liph       15 Jul 21 21:25 .pi -> dotfiles/pi/.pi
lrwxrwxrwx  1 liph liph       27 Mar 23 20:59 .plugins.zsh -> dotfiles/zshrc/.plugins.zsh
drwxr-xr-x  4 liph liph     4096 Dec 30  2025 .pyenv
-rw-------  1 liph liph        0 Jul 23 21:44 .python_history
drwxr-xr-x  3 liph liph     4096 Dec 30  2025 scripts_arch
drwx------  2 liph liph     4096 Mar 23 21:17 .ssh
drwxr-xr-x  4 liph liph     4096 Mar 24 08:27 .tmux
lrwxrwxrwx  1 liph liph       24 Mar 24 08:11 .tmux.conf -> dotfiles/tmux/.tmux.conf
lrwxrwxrwx  1 liph liph       20 Mar 24 08:11 .tmuxp -> dotfiles/tmux/.tmuxp
drwxr-xr-x 29 liph liph     4096 Jul 23 18:01 UniClipboard
-rw-r--r--  1 liph liph    56183 Jul 26 22:37 .zcompdump
-rw-------  1 liph liph     2281 Mar 23 21:02 .zsh_history
lrwxrwxrwx  1 liph liph       21 Mar 23 20:59 .zshrc -> dotfiles/zshrc/.zshrc
---
./.cargo/.package-cache-mutate
./.cargo/.package-cache
./.cargo/.global-cache
./.cargo/registry/CACHEDIR.TAG
./.bashrc
./.atuin/logs/search.log.2026-07-22
./.atuin/logs/search.log.2026-07-24
./.atuin/logs/search.log.2026-07-21
./.atuin/logs/search.log.2026-07-23
./.a5c/state/019f9319-ba43-788b-93e4-6b42870de193.md
./.a5c/state/019f9335-1cc4-7a0f-bc0f-49a0a590d3fb.md
./.a5c/package.json
./.a5c/active/process-library.json
./.a5c/user-profile.md
./.a5c/config.json
./.a5c/user-profile.json
./.a5c/user-install-inputs.json
./.npm/_prebuilds/25d08f-better-sqlite3-v12.11.1-node-v141-linux-x64.tar.gz
./.npm/_update-notifier-last-checked
./.npm/_cacache/CACHEDIR.TAG
./.npm/_logs/2026-07-26T20_46_08_694Z-debug-0.log
./.npm/_logs/2026-07-24T16_05_16_305Z-debug-0.log
./.npm/_logs/2026-07-24T16_08_05_808Z-debug-0.log
./.npm/_logs/2026-07-26T20_46_09_251Z-debug-0.log
./.npm/_logs/2026-07-26T20_46_08_684Z-debug-0.log
./.npm/_logs/2026-07-24T16_11_53_858Z-debug-0.log
./.npm/_logs/2026-07-24T16_05_16_243Z-debug-0.log
./.npm/_logs/2026-07-26T20_46_08_685Z-debug-0.log
./.npm/_logs/2026-07-26T20_46_09_263Z-debug-0.log
./.npm/_logs/2026-07-24T16_11_58_147Z-debug-0.log
./.npm/_logs/2026-07-26T20_46_09_103Z-debug-0.log
./.ssh/code_ed25519.pub
./.ssh/code_ed25519
./.ssh/known_hosts.old
./.ssh/known_hosts
./.ssh/authorized_keys
./.zsh_history
./.bash_profile
./dotfiles/package.json
./dotfiles/ansible/setup.sh
./dotfiles/ansible/ansible.cfg
./dotfiles/ansible/DEPLOYMENT_GUIDE.md
./dotfiles/ansible/AGENTS.md
./dotfiles/ansible/BACKUP_RESTORE.md
./dotfiles/ansible/Makefile
./dotfiles/ansible/PROJECT_SUMMARY.md
./dotfiles/ansible/ARCHITECTURE.md
./dotfiles/ansible/START_HERE.md
./dotfiles/ansible/TROUBLESHOOTING.md
./dotfiles/ansible/README.md


UniClipboard/crates/uc-application/src/usecases/clipboard_history/cleanup.rs
 901: // set, and its bytes should never count toward the quota pressure

UniClipboard/crates/uc-daemon-client/src/ws_bridge.rs
 653: reason = "backpressure",
 654: "dropping realtime event under backpressure"
 680: reason = "backpressure_after_retry",

UniClipboard/crates/uc-infra/src/network/iroh/node.rs
 369: // their own backpressure on long paths.

UniClipboard/crates/uc-infra/src/pairing/session.rs
 60: /// seconds) while still bounded so a stuck subscriber exerts back-pressure

UniClipboard/crates/uc-platform/src/clipboard/watcher.rs
 338: // that never reaches downstream (e.g. `try_send` backpressure during the
 969: // next send fails (backpressure — exactly what a storm provokes). The

UniClipboard/docs/architecture/snapshot-cache/adr-001-snapshot-cache-pipeline.md
 39: - Backpressure behavior is explicit: queue full degrades and logs; queue closed


No existing project files for the Garmin app. The workspace is mostly dotfiles and UniClipboard. I need to research the key questions:

1. Does Venu 2 support Connect IQ apps that read ambient pressure? Which API level?
2. Does Fenix 3 support Connect IQ apps that read ambient pressure? Which API level?
3. What Connect IQ recording app type / permissions are needed for FitContributor?
4. Underwater HR limitations and HRM-Swim/Tri specifics

Let me search the web for these specifics. I'll use web_explore for research questions that require comparing sources.

Question: Garmin Connect IQ Venu 2 ambient pressure Sensor.Info API level SDK depth diving support

Question: Garmin Connect IQ Fenix 3 ambient pressure raw barometric Sensor.Info API level SDK FitContributor

Question: Garmin Connect IQ recording app FitContributor custom field depth requires what app type permissions Monkey C


Reviewed 2 sources · synthesized answer with 2 findings

Home | Garmin Developers

- [web_fetch] Community/practical context: A collection of Connect IQ apps and libraries Purpose This repo is officially maintained by the Garmin Connect IQ team, containing a small set of reference examples and monkey barr
- [web_fetch] Community/practical context: Garmin DevelopersBuild Something with Us Connect IQ™ SDKDevelop watch faces, data fields, widgets and apps for our wearable devices.Garmin Connect Developer ProgramDevelop custom a

Internal research: web_search ×1, web_fetch ×4, web_fetch_headless ×1

Findings
- [web_fetch] Community/practical context: A collection of Connect IQ apps and libraries Purpose This repo is officially maintained by the Garmin Connect IQ team, containing a small set of reference examples and monkey barr
- [web_fetch] Community/practical context: Garmin DevelopersBuild Something with Us Connect IQ™ SDKDevelop watch faces, data fields, widgets and apps for our wearable devices.Garmin Connect Developer ProgramDevelop custom a

Sources
- [web_fetch] GitHub - garmin/connectiq-apps: A collection of Connect IQ apps.: https://github.com/garmin/connectiq-apps
- [web_fetch] Home | Garmin Developers: https://developer.garmin.com/

Internal tools
Internal research: web_search ×1, web_fetch ×4, web_fetch_headless ×1

Caveat
Evidence is partial: the strongest readable sources were mostly community/practical context.

Home | Garmin Developers


Reviewed 3 sources · synthesized answer with 3 findings

Garmin International

Home | Garmin Developers

- [web_fetch] Community/practical context: A collection of Connect IQ apps and libraries Purpose This repo is officially maintained by the Garmin Connect IQ team, containing a small set of reference examples and monkey barr
- [web_fetch] Community/practical context: Skip to content Navigation Menu Pricing Provide feedback Saved searches Use saved searches to filter your results more quickly Sign up Appearance settings 249 followers http://deve
- [web_fetch] Community/practical context: Garmin DevelopersBuild Something with Us Connect IQ™ SDKDevelop watch faces, data fields, widgets and apps for our wearable devices.Garmin Connect Developer ProgramDevelop custom a

Internal research: web_search ×1, web_fetch ×4, web_fetch_headless ×1

Findings
- [web_fetch] Community/practical context: A collection of Connect IQ apps and libraries Purpose This repo is officially maintained by the Garmin Connect IQ team, containing a small set of reference examples and monkey barr
- [web_fetch] Community/practical context: Skip to content Navigation Menu Pricing Provide feedback Saved searches Use saved searches to filter your results more quickly Sign up Appearance settings 249 followers http://deve
- [web_fetch] Community/practical context: Garmin DevelopersBuild Something with Us Connect IQ™ SDKDevelop watch faces, data fields, widgets and apps for our wearable devices.Garmin Connect Developer ProgramDevelop custom a

Sources
- [web_fetch] GitHub - garmin/connectiq-apps: A collection of Connect IQ apps.: https://github.com/garmin/connectiq-apps
- [web_fetch] Garmin International: https://github.com/garmin
- [web_fetch] Home | Garmin Developers: https://developer.garmin.com/

Internal tools
Internal research: web_search ×1, web_fetch ×4, web_fetch_headless ×1

Caveat
Evidence is partial: the strongest readable sources were mostly community/practical context.

Garmin International

Home | Garmin Developers


Reviewed 4 sources · synthesized answer with 5 findings

Toybox.FitContributor

Cookbook | FIT SDK | Garmin Developers

- [web_fetch] Community/practical context: source https://developer.garmin.com/connect-iq/core-topics/activity-recording/ sdk 9.1.0 fetched 2026-05-30 generated auto-converted from SDK doc/docs/Core_Topics/Activity_Recordin
- [web_fetch] Community/practical context: source https://developer.garmin.com/connect-iq/core-topics/manifest-and-permissions/ sdk 9.1.0 fetched 2026-05-30 generated auto-converted from SDK doc/docs/Core_Topics/Manifest_an
- [web_fetch] Community/practical context: Overview The FitContributor module allows Applications and Data Fields to record Field data into FIT files on the device's file system during an activity. This is useful for record
- [web_fetch] Community/practical context: Garmin DevelopersOverviewGet the SDKFile TypesFIT CSV ToolCookbookElapsed, Timer, and Moving DurationsWorking with DatesDecoding FIT Activity FilesEncoding FIT Activity FilesWorkin
- [web_explore] Community/practical context: A collection of Connect IQ apps and libraries Purpose This repo is officially maintained by the Garmin Connect IQ team, containing a small set of reference examples and monkey barr

Internal research: web_search ×4, web_fetch ×13, web_fetch_headless ×0

Findings
- [web_fetch] Community/practical context: source https://developer.garmin.com/connect-iq/core-topics/activity-recording/ sdk 9.1.0 fetched 2026-05-30 generated auto-converted from SDK doc/docs/Core_Topics/Activity_Recordin
- [web_fetch] Community/practical context: source https://developer.garmin.com/connect-iq/core-topics/manifest-and-permissions/ sdk 9.1.0 fetched 2026-05-30 generated auto-converted from SDK doc/docs/Core_Topics/Manifest_an
- [web_fetch] Community/practical context: Overview The FitContributor module allows Applications and Data Fields to record Field data into FIT files on the device's file system during an activity. This is useful for record
- [web_fetch] Community/practical context: Garmin DevelopersOverviewGet the SDKFile TypesFIT CSV ToolCookbookElapsed, Timer, and Moving DurationsWorking with DatesDecoding FIT Activity FilesEncoding FIT Activity FilesWorkin
- [web_explore] Community/practical context: A collection of Connect IQ apps and libraries Purpose This repo is officially maintained by the Garmin Connect IQ team, containing a small set of reference examples and monkey barr

Sources
- [web_fetch] garmin-dev-skills/skills/garmin-dev/references/connect-iq-docs/portal/core-topics/activity-recording.md at main · athitupakan/garmin-dev-skills: https://github.com/athitupakan/garmin-dev-skills/blob/main/skills/garmin-dev/references/connect-iq-docs/portal/core-topics/activity-recording.md
- [web_fetch] garmin-dev-skills/skills/garmin-dev/references/connect-iq-docs/portal/core-topics/manifest-and-permissions.md at main · athitupakan/garmin-dev-skills: https://github.com/athitupakan/garmin-dev-skills/blob/main/skills/garmin-dev/references/connect-iq-docs/portal/core-topics/manifest-and-permissions.md
- [web_fetch] Toybox.FitContributor: https://developer.garmin.com/connect-iq/api-docs/Toybox/FitContributor.html
- [web_fetch] Cookbook | FIT SDK | Garmin Developers: https://developer.garmin.com/fit/cookbook/developer-data/

Internal tools
Internal research: web_search ×4, web_fetch ×13, web_fetch_headless ×0

Caveat
Evidence is partial: the strongest readable sources were mostly community/practical context.

Toybox.FitContributor

Cookbook | FIT SDK | Garmin Developers


web_explore gave very short answers without sources. I need more detailed information. Let me fetch specific documentation pages and forum threads. I should use ctx_fetch_and_index to store the Connect IQ docs, and maybe search for specific device compatibility.

Key pages:
- Connect IQ API reference for Sensor.Info / ambient pressure
- Connect IQ device compatibility / API level for Venu 2 and Fenix 3
- Connect IQ FitContributor docs
- Garmin forums about depth on Fenix 3 / Venu 2

Let me use ctx_fetch_and_index on relevant docs, and also search for more specific information.

Question: Garmin Venu 2 Connect IQ API level SDK version supported device specifications

Question: Garmin Fenix 3 Connect IQ API level SDK version max supported system 1 2 3

Question: Connect IQ Sensor.Info ambientPressure API which devices support barometric pressure diving depth


Compatible Devices | Connect IQ

- [web_fetch] Community/practical context: Set of Garmin Connect IQ SDK manifests files with actual list of supported devices Every year Garmin releases a lot of wearables devices with different minimal CIQ SDK levels. The
- [web_fetch] Community/practical context: Garmin Connect IQ SDK — LLM Reference Builder A Python script that converts the Garmin Connect IQ SDK HTML documentation into clean, LLM-friendly Markdown. Run it once against your
- [web_fetch] Community/practical context: Approach® S50390 x 390roundAMOLED5.1Approach® S60240 x 240roundMemory-In-Pixel (64 colors)2.4Approach® S62260 x 260roundMemory-In-Pixel (64 colors)3.0Approach® S70 42mm390 x 390rou

Internal research: web_search ×1, web_fetch ×4, web_fetch_headless ×1

Findings
- [web_fetch] Community/practical context: Set of Garmin Connect IQ SDK manifests files with actual list of supported devices Every year Garmin releases a lot of wearables devices with different minimal CIQ SDK levels. The
- [web_fetch] Community/practical context: Garmin Connect IQ SDK — LLM Reference Builder A Python script that converts the Garmin Connect IQ SDK HTML documentation into clean, LLM-friendly Markdown. Run it once against your
- [web_fetch] Community/practical context: Approach® S50390 x 390roundAMOLED5.1Approach® S60240 x 240roundMemory-In-Pixel (64 colors)2.4Approach® S62260 x 260roundMemory-In-Pixel (64 colors)3.0Approach® S70 42mm390 x 390rou

Sources
- [web_fetch] GitHub - AShuba/Garmin-CIQ-Manifests: Set of Garmin Connect IQ SDK manifests files with list of supported devices: https://github.com/AShuba/Garmin-CIQ-Manifests
- [web_fetch] GitHub - MJenkinsonGIT/SDKConsolidationScript: This is a script which consolidates the Garmin Connect SDK into an Indexed and more LLM friendly format. You can also specify the device you're working with to get a customized version without the data regarding other devices.: https://github.com/MJenkinsonGIT/SDKConsolidationScript
- [web_fetch] Compatible Devices | Connect IQ: https://developer.garmin.com/connect-iq/compatible-devices/

Internal tools
Internal research: web_search ×1, web_fetch ×4, web_fetch_headless ×1

Caveat
Evidence is partial: the strongest readable sources were mostly community/practical context.

Compatible Devices | Connect IQ


Garmin International

Connect IQ SDK | Garmin Developers

Home | Garmin Developers

- [web_fetch] Community/practical context: A collection of Connect IQ apps and libraries Purpose This repo is officially maintained by the Garmin Connect IQ team, containing a small set of reference examples and monkey barr
- [web_fetch] Community/practical context: Skip to content Navigation Menu Pricing Provide feedback Saved searches Use saved searches to filter your results more quickly Sign up Appearance settings 249 followers http://deve
- [web_fetch] Community/practical context: Make Your MarkBuilding unique wearable experiences leveraging Garmin device sensors and features is easy with Connect IQ. Using available APIs and ANT+ profiles, the apps you build
- [web_fetch] Community/practical context: Garmin DevelopersBuild Something with Us Connect IQ™ SDKDevelop watch faces, data fields, widgets and apps for our wearable devices.Garmin Connect Developer ProgramDevelop custom a
- [web_explore] Community/practical context: Connect IQ SDK for Android Samples Official documentation Android Guide: Connect IQ SDK for Android SDK License By downloading the SDK you agree to our License Agreement. Download

Internal research: web_search ×4, web_fetch ×16, web_fetch_headless ×0

Findings
- [web_fetch] Community/practical context: A collection of Connect IQ apps and libraries Purpose This repo is officially maintained by the Garmin Connect IQ team, containing a small set of reference examples and monkey barr
- [web_fetch] Community/practical context: Skip to content Navigation Menu Pricing Provide feedback Saved searches Use saved searches to filter your results more quickly Sign up Appearance settings 249 followers http://deve
- [web_fetch] Community/practical context: Make Your MarkBuilding unique wearable experiences leveraging Garmin device sensors and features is easy with Connect IQ. Using available APIs and ANT+ profiles, the apps you build
- [web_fetch] Community/practical context: Garmin DevelopersBuild Something with Us Connect IQ™ SDKDevelop watch faces, data fields, widgets and apps for our wearable devices.Garmin Connect Developer ProgramDevelop custom a
- [web_explore] Community/practical context: Connect IQ SDK for Android Samples Official documentation Android Guide: Connect IQ SDK for Android SDK License By downloading the SDK you agree to our License Agreement. Download

Sources
- [web_fetch] GitHub - garmin/connectiq-apps: A collection of Connect IQ apps.: https://github.com/garmin/connectiq-apps
- [web_fetch] Garmin International: https://github.com/garmin
- [web_fetch] Connect IQ SDK | Garmin Developers: https://developer.garmin.com/connect-iq/overview/
- [web_fetch] Home | Garmin Developers: https://developer.garmin.com/

Internal tools
Internal research: web_search ×4, web_fetch ×16, web_fetch_headless ×0

Caveat
Evidence is partial: the strongest readable sources were mostly community/practical context.

Garmin International

Connect IQ SDK | Garmin Developers

Home | Garmin Developers


Compatible Devices | Connect IQ

Device Reference

- [web_fetch] Community/practical context: A collection of Connect IQ apps and libraries Purpose This repo is officially maintained by the Garmin Connect IQ team, containing a small set of reference examples and monkey barr
- [web_fetch] Community/practical context: Approach® S50390 x 390roundAMOLED5.1Approach® S60240 x 240roundMemory-In-Pixel (64 colors)2.4Approach® S62260 x 260roundMemory-In-Pixel (64 colors)3.0Approach® S70 42mm390 x 390rou
- [web_fetch] Community/practical context: OverviewCompatible DevicesAPI DocsGet the SDKSubmit an AppStay InformedConnect IQ BasicsMonkey CCore TopicsUser Experience GuidelinesPersonality LibraryConnect IQ FAQReference Guid

Internal research: web_search ×1, web_fetch ×4, web_fetch_headless ×1

Findings
- [web_fetch] Community/practical context: A collection of Connect IQ apps and libraries Purpose This repo is officially maintained by the Garmin Connect IQ team, containing a small set of reference examples and monkey barr
- [web_fetch] Community/practical context: Approach® S50390 x 390roundAMOLED5.1Approach® S60240 x 240roundMemory-In-Pixel (64 colors)2.4Approach® S62260 x 260roundMemory-In-Pixel (64 colors)3.0Approach® S70 42mm390 x 390rou
- [web_fetch] Community/practical context: OverviewCompatible DevicesAPI DocsGet the SDKSubmit an AppStay InformedConnect IQ BasicsMonkey CCore TopicsUser Experience GuidelinesPersonality LibraryConnect IQ FAQReference Guid

Sources
- [web_fetch] GitHub - garmin/connectiq-apps: A collection of Connect IQ apps.: https://github.com/garmin/connectiq-apps
- [web_fetch] Compatible Devices | Connect IQ: https://developer.garmin.com/connect-iq/compatible-devices/
- [web_fetch] Device Reference: https://developer.garmin.com/connect-iq/device-reference/

Internal tools
Internal research: web_search ×1, web_fetch ×4, web_fetch_headless ×1

Caveat
Evidence is partial: the strongest readable sources were mostly community/practical context.

Compatible Devices | Connect IQ

Device Reference


The web_explore results are too terse. I need to fetch actual pages. Let me try direct fetch of known Connect IQ documentation URLs and device references. I'll use ctx_fetch_and_index for these.

Key URLs I know:
- https://developer.garmin.com/connect-iq/api-docs/ - API docs
- https://developer.garmin.com/connect-iq/api-docs/Toybox/Sensor/Info.html
- https://developer.garmin.com/connect-iq/api-docs/Toybox/SensorHistory/
- https://developer.garmin.com/connect-iq/api-docs/Toybox/FitContributor/
- https://developer.garmin.com/connect-iq/compatible-devices/ - device compatibility matrix

Let me try these.


fetched 3 c=1. ok=3 cache=0 err=0. 38 sections 55.5KB.

- [new]   CIQ Sensor.Info API::https://developer.garmin.com/connect-iq/api-docs/Toybox/Sensor/Info.html — 20 sections (18.0KB)
- [new]   CIQ FitContributor API::https://developer.garmin.com/connect-iq/api-docs/Toybox/FitContributor.html — 10 sections (7.9KB)
- [new]   CIQ device compatibility matrix::https://developer.garmin.com/connect-iq/compatible-devices/ — 8 sections (29.6KB)

ctx_search(queries: [...], source: "<label>") for full content.

---

### CIQ Sensor.Info API::https://developer.garmin.com/connect-iq/api-docs/Toybox/Sensor/Info.html

Toybox.Sensor.Info

# Class: Toybox.Sensor.Info

Inherits:

Toybox.Lang.Object

*   [Toybox.Lang.Object](../../Toybox/Lang/Object.html)

*   [Toybox.Sensor.Info](../../Toybox/Sensor/Info.html)

[show all](#)

## Overview

The Sensor.Info class contains all of the information provided by enabled sensors.

[Sensor.Info](../../Toybox/Sensor/Info.html) can be retrieved on e…
### CIQ FitContributor API::https://developer.garmin.com/connect-iq/api-docs/Toybox/FitContributor.html

Toybox.FitContributor

# Module: Toybox.FitContributor

## Overview

The FitContributor module allows Applications and Data Fields to record [Field](../Toybox/FitContributor/Field.html) data into FIT files on the device's file system during an activity. This is useful for recording data that is not already calculated by the device, which can be synced to a service like Garmin Co…
### CIQ device compatibility matrix::https://developer.garmin.com/connect-iq/compatible-devices/

Compatible Devices | Connect IQ | Garmin Developers

*   [Overview](/connect-iq/overview/)

*   [Compatible Devices](/connect-iq/compatible-devices/)

*   [API Docs](/connect-iq/api-docs/)

*   [Get the SDK](/connect-iq/sdk/)

*   [Submit an App](/connect-iq/submit-an-app/)

*   [Stay Informed](/connect-iq/stay-informed/)

*   [Connect IQ Basics](/connect-iq/connect-iq-basics/)

*…


Good, the pages are indexed. Now I need to query them for the specific information about ambient pressure, FitContributor field types, and device support for Venu 2 / Fenix 3. Let me use ctx_search.

ambientPressure pressure field API level supported devices

Venu 2 API level SDK version Connect IQ supported features

Fenix 3 API level SDK version max system Connect IQ supported features

Field definition recording custom data activity type requires

FitContributor Field app type permissions Monkey C example depth

Fenix 3 specifications API level max SDK

Fenix 3HR Fenix3 Connect IQ version supported


## ambientPressure pressure field API level supported devices

--- [current-session | 2026-07-26 21:00 | CIQ Sensor.Info API::https://developer.garmin.com/connect-iq/api-docs/Toybox/Sensor/Info.html] ---
### Class: Toybox.Sensor.Info > Instance Attribute Details > var accel as [Lang.Array](../../Toybox/Lang/Array.html)<[Lang.Number](../../Toybox/Lang/Number.html)\> or **Null** (1)

### var accel as [Lang.Array](../../Toybox/Lang/Array.html)<[Lang.Number](../../Toybox/Lang/Number.html)\> or **Null**

The accelerometer reading of the x, y, and z axes as an Array of [Number](../../Toybox/Lang/Number.html) values in millig-units.

Note:

Some devices do not enable the accelerometer at startup. To get valid data from this field on such devices, applications must enable the sensor with a call to [registerSensorDataListener](../../Toybox/Sensor.html#registerSensorDataListener-instance_function).

Since:

API Level 1.2.0

Supported Devices:

--- [current-session | 2026-07-26 21:00 | CIQ Sensor.Info API::https://developer.garmin.com/connect-iq/api-docs/Toybox/Sensor/Info.html] ---
### Class: Toybox.Sensor.Info > Instance Attribute Details > var mag as [Lang.Array](../../Toybox/Lang/Array.html)<[Lang.Number](../../Toybox/Lang/Number.html)\> or **Null** (1)

### var mag as [Lang.Array](../../Toybox/Lang/Array.html)<[Lang.Number](../../Toybox/Lang/Number.html)\> or **Null**

The magnetometer reading of the x, y, and z axes as an Array of [Number](../../Toybox/Lang/Number.html) values in milliGauss (mG).

Note:

Some devices do not enable the magnetometer at startup. To get valid data from this field on such devices, applications must enable the sensor with a call to [registerSensorDataListener](../../Toybox/Sensor.html#registerSensorDataListener-instance_function).

Since:

API Level 1.2.0

Supported Devices:

---

## Venu 2 API level SDK version Connect IQ supported features

--- [current-session | 2026-07-26 21:00 | CIQ Sensor.Info API::https://developer.garmin.com/connect-iq/api-docs/Toybox/Sensor/Info.html] ---
### Class: Toybox.Sensor.Info > Instance Attribute Details > var oxygenSaturation as [Lang.Number](../../Toybox/Lang/Number.html) or **Null**

### var oxygenSaturation as [Lang.Number](../../Toybox/Lang/Number.html) or **Null**

The current oxygen saturation in percent (%)

Since:

API Level 3.2.0

Supported Devices:

*   Approach® S50
*   Approach® S70 42mm
*   Approach® S70 47mm
*   Captain Marvel
*   D2™ Air X10
*   D2™ Air
*   D2™ Mach 1
*   D2™ Mach 2 Pro
*   D2™ Mach 2
*   Darth Vader™
*   Descent™ G1 / G1 Solar
*   Descent™ G2
*   Descent™ Mk2 / Mk2i
*   Descent™ Mk2 S
*   Descent™ Mk3 43mm / Mk3i 43mm
*   Descent™ Mk3i 51mm
*   Enduro™ 3
*   Enduro™
*   epix™ (Gen 2) / quatix® 7 Sapphire
*   epix™ Pro (Gen 2) 42mm
*   epix™ Pro (Gen 2) 47mm / quatix® 7 Pro
*   epix™ Pro (Gen 2) 51mm / D2™ Mach 1 Pro / tactix® 7 – AMOLED Edition
*   fēnix® 5 Plus
*   fēnix® 5S Plus
*   fēnix® 5X Plus
*   fēnix® 6 / 6 Solar / 6 Dual Power
*   fēnix® 6 Pro / 6 Sapphire / 6 Pro Solar / 6 Pro Dual Power / quatix® 6
*   fēnix® 6S / 6S Solar / 6S Dual Power
*   fēnix® 6S Pro / 6S Sapphire / 6S…

…6X Pro Solar / tactix® Delta Sapphire / Delta Solar / Delta Solar - Ballistics Edition / quatix® 6X / 6X Solar / 6X Dual Power
*   fēnix® 7 / quatix® 7
*   fēnix® 7 Pro - Solar Edition (no Wi-Fi)
*   fēnix® 7 Pro
*   fēnix® 7S Pro
*   fēnix® 7S
*   fēnix® 7X / tactix® 7 / quatix® 7X Solar / Enduro™ 2
*   fēnix® 7X Pro - Solar Edition (no Wi-Fi)
*   fēnix® 7X Pro
*   fēnix® 8 43mm
*   fēnix® 8 47mm / 51mm / tactix® 8 47mm / 51mm / quatix® 8 47mm / 51mm
*   fēnix® 8 Pro 47mm / 51mm / MicroLED / quatix® 8 Pro 47mm / 51mm
*   fēnix® 8 Solar 47mm
*…

--- [current-session | 2026-07-26 21:00 | CIQ Sensor.Info API::https://developer.garmin.com/connect-iq/api-docs/Toybox/Sensor/Info.html] ---
### Class: Toybox.Sensor.Info > Instance Attribute Details > var heading as [Lang.Float](../../Toybox/Lang/Float.html) or **Null**

### var heading as [Lang.Float](../../Toybox/Lang/Float.html) or **Null**

The true north referenced heading in radians.

This provides compass orientation if it is supported by the device.

Since:

API Level 1.0.0

Returns:

*   [Lang.Float](../../Toybox/Lang/Float.html)

---

## Fenix 3 API level SDK version max system Connect IQ supported features

--- [current-session | 2026-07-26 21:00 | CIQ Sensor.Info API::https://developer.garmin.com/connect-iq/api-docs/Toybox/Sensor/Info.html] ---
### Class: Toybox.Sensor.Info > Instance Attribute Details > var heading as [Lang.Float](../../Toybox/Lang/Float.html) or **Null**

### var heading as [Lang.Float](../../Toybox/Lang/Float.html) or **Null**

The true north referenced heading in radians.

This provides compass orientation if it is supported by the device.

Since:

API Level 1.0.0

Returns:

*   [Lang.Float](../../Toybox/Lang/Float.html)

--- [current-session | 2026-07-26 21:00 | CIQ Sensor.Info API::https://developer.garmin.com/connect-iq/api-docs/Toybox/Sensor/Info.html] ---
### Class: Toybox.Sensor.Info > Instance Attribute Details > var oxygenSaturation as [Lang.Number](../../Toybox/Lang/Number.html) or **Null**

### var oxygenSaturation as [Lang.Number](../../Toybox/Lang/Number.html) or **Null**

The current oxygen saturation in percent (%)

Since:

API Level 3.2.0

Supported Devices:

*   Approach® S50
*   Approach® S70 42mm
*   Approach® S70 47mm
*   Captain Marvel
*   D2™ Air X10
*   D2™ Air
*   D2™ Mach 1
*   D2™ Mach 2 Pro
*   D2™ Mach 2
*   Darth Vader™
*   Descent™ G1 / G1 Solar
*   Descent™ G2
*   Descent™ Mk2 / Mk2i
*   Descent™ Mk2 S
*   Descent™ Mk3 43mm / Mk3i 43mm
*   Descent™ Mk3i 51mm
*   Enduro™ 3
*   Enduro™
*   epix™ (Gen 2) / quatix® 7 Sapphire
*   epix™ Pro (Gen 2) 42mm
*   epix™ Pro (Gen 2) 47mm / quatix® 7 Pro
*   epix™ Pro (Gen 2) 51mm / D2™ Mach 1 Pro / tactix® 7 – AMOLED Edition
*   fēnix® 5 Plus
*   fēnix® 5S Plus
*   fēnix® 5X Plus
*   fēnix® 6 / 6 Solar / 6 Dual Power
*   fēnix® 6 Pro / 6 Sapphire / 6 Pro Solar / 6 Pro Dual Power / quatix® 6
*   fēnix® 6S / 6S Solar / 6S Dual Power
*   fēnix® 6S Pro / 6S Sapphire / 6S Pro Solar / 6S Pro Dual Power
*   fēnix® 6X Pro / 6X Sapphire / 6X Pro Solar / tactix® Delta Sapphire / Delta Solar / Delta Solar - Ballistics Edition / quatix® 6X / 6X Solar / 6X Dual Power
*   fēnix® 7 / quatix® 7
*   fēnix® 7 Pro - Solar Edition (no Wi-Fi)
*   fēnix® 7 Pro
*   fēnix® 7S Pro
*   fēnix® 7S
*   fēnix® 7X / tactix® 7 / quatix® 7X Solar / Enduro™ 2
*   fēnix® 7X Pro - Solar Edition (no Wi-Fi)
*   fēnix® 7X Pro
*   fēnix® 8 43mm
*   fēnix® 8 47mm / 51mm / tactix® 8 47mm / 51mm / quatix® 8 47mm / 51mm
*   fēnix® 8 Pro 47mm / 51mm…

> Throttle: call #1/8 in this window. 2 call(s) before soft cap. Prefer ctx_search(queries: [...]) array form for multi-query workloads — it counts as a single call.


## Field definition recording custom data activity type requires

--- [current-session | 2026-07-26 21:00 | CIQ FitContributor API::https://developer.garmin.com/connect-iq/api-docs/Toybox/FitContributor.html] ---
### Module: Toybox.FitContributor > Overview

## Overview

The FitContributor module allows Applications and Data Fields to record [Field](../Toybox/FitContributor/Field.html) data into FIT files on the device's file system during an activity. This is useful for recording data that is not already calculated by the device, which can be synced to a service like Garmin Connect.

There are three FitContributor message types available:

MESG\_TYPE\_SESSION

Session data is written once per recording session at the end of the recording, and is used for data that pertains to the entire session (e.g. average speed).

MESG\_TYPE\_LAP

Lap data is written once for every lap in the session, and used for data that pertains to each lap (e.g. average lap speed).

MESG\_TYPE\_RECORD

Depending on the device, record data is written once per second or when new data is available (Smart Recording), but is never written faster than once per second. This message type is used for instantaneous values (e.g. current speed).

Data type constants are also available for use with the [createField()](../Toybox/ActivityRecording/Session.html#createField-instance_function) method.

--- [current-session | 2026-07-26 21:00 | CIQ FitContributor API::https://developer.garmin.com/connect-iq/api-docs/Toybox/FitContributor.html] ---
### Module: Toybox.FitContributor > See Also: (1)

## See Also:

*   [Session.createField()](../Toybox/ActivityRecording/Session.html#createField-instance_function)

*   [Learn more about the FIT format](http://www.thisisant.com/resources/fit)

Example:

Using a FitContributor Field in a SimpleDataField app

```
using Toybox.FitContributor;
using Toybox.WatchUi;
class BananasEarnedView extends WatchUi.SimpleDataField
{
    var bananasEarnedField = null;
    var totalBananas = 0.0;

    const CALORIES_PER_BANANA = 105.0;
    const BANANAS_FIELD_ID = 0;

    function initialize() {
        SimpleDataField.initialize();

        // Create the custom FIT data field we want to record.
        bananasEarnedField = createField(
            "bananas_earned",
            BANANAS_FIELD_ID,
            FitContributor.DATA_TYPE_FLOAT,
            {:mesgType=>Fit.MESG_TYPE_RECORD, :units=>"B"}
        );

        bananasEarnedField.setData(0.0);
    }

    function compute(info) {
        if (info != null && info.calories != null) {
            // Calculate and set data to be written to the Field
            totalBananas = (info.calories / CALORIES_PER_BANANA).toFloat();
            bananasEarnedField.setData(totalBananas);
        }
        // Display the data on the screen of the device
        return totalBananas;
    }
}
```

Since:

API Level 1.3.0

App Types and Runtime Contexts:

*   Data Field

*   Glance

*   Watch App

Supported Devices:

---

## FitContributor Field app type permissions Monkey C example depth

--- [current-session | 2026-07-26 21:00 | CIQ FitContributor API::https://developer.garmin.com/connect-iq/api-docs/Toybox/FitContributor.html] ---
### Module: Toybox.FitContributor > See Also: (1)

## See Also:

*   [Session.createField()](../Toybox/ActivityRecording/Session.html#createField-instance_function)

*   [Learn more about the FIT format](http://www.thisisant.com/resources/fit)

Example:

Using a FitContributor Field in a SimpleDataField app

```
using Toybox.FitContributor;
using Toybox.WatchUi;
class BananasEarnedView extends WatchUi.SimpleDataField
{
    var bananasEarnedField = null;
    var totalBananas = 0.0;

    const CALORIES_PER_BANANA = 105.0;
    const BANANAS_FIELD_ID = 0;

    function initialize() {
        SimpleDataField.initialize();

        // Create the custom FIT data field we want to record.
        bananasEarnedField = createField(
            "bananas_earned",
            BANANAS_FIELD_ID,
            FitContributor.DATA_TYPE_FLOAT,
            {:mesgType=>Fit.MESG_TYPE_RECORD, :units=>"B"}
        );

        bananasEarnedField.setData(0.0);
    }

    function compute(info) {
        if (info != null && info.calories != null) {
            // Calculate and set data to be written to the Field
            totalBananas = (info.calories / CALORIES_PER_BANANA).toFloat();
            bananasEarnedField.setData(totalBananas);
        }
        // Display the data on the screen of the device
        return totalBananas;
    }
}
```

Since:

API Level 1.3.0

App Types and Runtime Contexts:

*   Data Field

*   Glance

*   Watch App

Supported Devices:

--- [current-session | 2026-07-26 21:00 | CIQ FitContributor API::https://developer.garmin.com/connect-iq/api-docs/Toybox/FitContributor.html] ---
### Module: Toybox.FitContributor > Overview

## Overview

The FitContributor module allows Applications and Data Fields to record [Field](../Toybox/FitContributor/Field.html) data into FIT files on the device's file system during an activity. This is useful for recording data that is not already calculated by the device, which can be synced to a service like Garmin Connect.

There are three FitContributor message types available:

MESG\_TYPE\_SESSION

Session data is written once per recording session at the end of the recording, and is used for data that pertains to the entire session (e.g. average speed).

MESG\_TYPE\_LAP

Lap data is written once for every lap in the session, and used for data that pertains to each lap (e.g. average lap speed).

MESG\_TYPE\_RECORD

Depending on the device, record data is written once per second or when new data is available (Smart Recording), but is never written faster than once per second. This message type is used for instantaneous values (e.g. current speed).

Data type constants are also available for use with the [createField()](../Toybox/ActivityRecording/Session.html#createField-instance_function) method.

> Throttle: call #2/8 in this window. 1 call(s) before soft cap. Prefer ctx_search(queries: [...]) array form for multi-query workloads — it counts as a single call.


## Venu 2 specifications API level

--- [current-session | 2026-07-26 21:00 | CIQ device compatibility matrix::https://developer.garmin.com/connect-iq/compatible-devices/] ---
### Untitled (6)

… | 3.4 |
|

![](https://static.garmincdn.com/en/products/010-02172-51/g/cf-sm-d454beb1-ffd5-4d70-9f9e-7a2202cb536c.jpg)

Rey™

 | 218 x 218 | round | Memory-In-Pixel (64 colors) | 3.3 |
|

![](https://static.garmincdn.com/en/products/010-02173-12/v/cf-sm-9af674f3-640f-43f0-91df-117ed510ffcf.jpg)

Venu®

 | 390 x 390 | round | AMOLED | 3.3 |
|

![](https://res.garmin.com/en/products/010-02430-01/v/cf-sm-9d304379-e44e-4cd9-b877-69096b753348.jpg)

Venu® 2

 | 416 x 416 | round | AMOLED | 5.0 |
|

![](https://static.garmincdn.com/en/products/010-02496-01/v/cf-sm-8f74e70d-0dc3-480a-b8d4-a684aaffdf4a.jpg)

Venu® 2 Plus

 | 416 x 416 | round | AMOLED | 5.0 |
|

![](https://static.garmincdn.com/en/products/010-02429-00/v/cf-sm-d3c4ea1a-a6cf-4b83-b799-c3d142efd5be.jpg)

Venu® 2S

 | 360 x 360 | round | AMOLED | 5.0 |
|

![](https://res.garmin.com/en/products/010-02784-01/v/cf-sm.jpg)

Venu® 3

 | 454 x 454 | round | AMOLED | 5.2 |
|

![](https://res.garmin.com/en/products/010-02785-00/v/cf-sm.jpg)

Venu® 3S

 | 390 x 390 | round | AMOLED | 5.2 |
|

![](https://res.garmin.com/en/products/010-03013-02/v/cf-sm.jpg)

Venu® 4 41mm

 | 390 x 390 | round | AMOLED | 6.0 |
|

![](https://res.garmin.com/en/products/010-03013-02/v/cf-sm.jpg)

Venu® 4 45mm / D2™ Air X15

 | 454 x 454 | round | AMOLED | 6.0 |
|

![](https://static.garmincdn.com/en/products/010-02173-12/v/cf-sm-9af674f3-640f-43f0-91df-117ed510ffcf.jpg)

Venu® Mercedes-Benz® Collection

 | 390 x 390 | round | AMOLED | 3.3 …

--- [current-session | 2026-07-26 21:00 | CIQ device compatibility matrix::https://developer.garmin.com/connect-iq/compatible-devices/] ---
### Untitled (1)

Compatible Devices | Connect IQ | Garmin Developers

*   [Overview](/connect-iq/overview/)

*   [Compatible Devices](/connect-iq/compatible-devices/)

*   [API Docs](/connect-iq/api-docs/)

*   [Get the SDK](/connect-iq/sdk/)

*   [Submit an App](/connect-iq/submit-an-app/)

*   [Stay Informed](/connect-iq/stay-informed/)

*   [Connect IQ Basics](/connect-iq/connect-iq-basics/)

*   [Monkey C](/connect-iq/monkey-c/)

*   [Core Topics](/connect-iq/core-topics/)

*   [User Ex…

…elines](/connect-iq/app-review-guidelines/)

*   [Monetization](/connect-iq/monetization/)

*   [Device Reference](/connect-iq/device-reference/)

MenuCompatible Devices

×

Device Type:

AllWatches/WearablesOutdoor HandheldsEdge

Supported CIQ Version:

All

*   [

    All](#)
*   [

    1.2](#)
*   [

    1.4](#)
*   [

    2.4](#)
*   [

    3.0](#)
*   [

    3.1](#)
*   [

    3.2](#)
*   [

    3.3](#)
*   [

    3.4](#)
*   [

    5.0](#)
*   [

    5.1](#)
*   [

    5.2](#)
*   [

    6.0](#)

| Watches/Wearables | Screen Resolution | Screen Shape | Screen Technology | API Level |
| --- | --- | --- | --- | --- |
|
![](https://res.garmin.com/en/products/010-03010-00/v/cf-sm.jpg)

Approach® S50

 | 390 x 390 | round | AMOLED | 5.1 |
|

![](https://static.garmincdn.com/en/products/010-01702-00/v/cf-sm.jpg)

Approach® S60

 | 240 x 240 | round | Memory-In-Pixel (64 colors) | 2.4 |
|

![](https://static.garmincdn.com/en/products/010-02200-00/v/cf-sm…

---

## Fenix 3 specifications API level max SDK

--- [current-session | 2026-07-26 21:00 | CIQ device compatibility matrix::https://developer.garmin.com/connect-iq/compatible-devices/] ---
### Untitled (1)

Compatible Devices | Connect IQ | Garmin Developers

*   [Overview](/connect-iq/overview/)

*   [Compatible Devices](/connect-iq/compatible-devices/)

*   [API Docs](/connect-iq/api-docs/)

*   [Get the SDK](/connect-iq/sdk/)

*   [Submit an App](/connect-iq/submit-an-app/)

*   [Stay Informed](/connect-iq/stay-informed/)

*   [Connect IQ Basics](/connect-iq/connect-iq-basics/)

*   [Monkey C](/connect-iq/monkey-c/)

*   [Core Topics](/connect-iq/core-topics/)

*   [User Experience Guidelines](/connect-iq/user-expe…

…nnect-iq/monetization/)

*   [Device Reference](/connect-iq/device-reference/)

MenuCompatible Devices

×

Device Type:

AllWatches/WearablesOutdoor HandheldsEdge

Supported CIQ Version:

All

*   [

    All](#)
*   [

    1.2](#)
*   [

    1.4](#)
*   [

    2.4](#)
*   [

    3.0](#)
*   [

    3.1](#)
*   [

    3.2](#)
*   [

    3.3](#)
*   [

    3.4](#)
*   [

    5.0](#)
*   [

    5.1](#)
*   [

    5.2](#)
*   [

    6.0](#)

| Watches/Wearables | Screen Resolution | Screen Shape | Screen Technology | API Level |
| --- | --- | --- | --- | --- |
|
![](https://res.garmin.com/en/products/010-03010-00/v/cf-sm.jpg)

Approach® S50

 | 390 x 390 | round | AMOLED | 5.1 |
|

![](https://static.garmincdn.com/en/products/010-01702-00/v/cf-sm.jpg)

Approach® S60

 | 240 x 240 | round | Memory-In-Pixel (64 colors) | 2.4 |
|

![](https://static.garmincdn.com/en/products/010-02200-00/v/cf-sm-bc8fd553-731f-4fc3-98dd-…

--- [current-session | 2026-07-26 21:00 | CIQ device compatibility matrix::https://developer.garmin.com/connect-iq/compatible-devices/] ---
### Untitled (7)

| 390 x 390 | round | AMOLED | 6.0 |
|

![](https://static.garmincdn.com/en/products/010-01605-03/g/cf-sm.jpg)

vívoactive® HR

 | 148 x 205 | rectangle | Memory-In-Pixel (64 colors) | 2.4 |

| Outdoor Handhelds | Screen Resolution | Screen Shape | Screen Technology | API Level |
| --- | --- | --- | --- | --- |
|
![](https://res.garmin.com/en/products/010-02940-00/v/cf-sm.jpg)

eTrex® Touch

 | 240 x 400 | rectangle | Transflective Liquid-Crystal (High Color) | 5.1 |
|

![](https://static.garmincdn.com/en/products/010-01918-00/g/cf-sm-239388ff-962c-49e5-bd4d-9d0936be669d.jpg)

GPSMAP® 66s / 66i / 66sr / 66st

 | 240 x 400 | rectangle | Transflective Liquid-Crystal (High Color) | 3.1 |
|

![](https://res.garmin.com/en/products/010-02812-00/g/cf-sm.jpg)

GPSMAP® 67 / 67i

 | 240 x 400 | rectangle | Transflective Liquid-Crystal (High Color) | 3.2 |
|

![](https://static.garmincdn.com/en/products/010-02235-00/g/cf-sm-b5128964-2292-4542-86e2-6becc7a575ca.jpg)

GPSMAP® 86s / 86sc / 86i / 86sci

 | 240 x 400 | rectangle | Transflective Liquid-Crystal (High Color) | 3.0 |
|

![](https://res.garmin.com/en/products/010-02920-00/g/cf-sm.jpg)

GPSMAP® H1 / H1i Plus

 | 282 x 470 | rectangle | Transflective Liquid-Crystal (High Color) | 5.0 |
|

![](https://static.garmincdn.com/en/products/010-02133-00/g/cf-sm-eed10c23-6410-4fb4-bbe7-d235d8c1de78.jpg)

Montana® 7 Series

 | 480 x 800 | rectangle | Transflective Liquid-Crystal (High Color) | 3.2 |
|

![](https://static.garmincdn.co

---

## Fenix 3HR Fenix3 Connect IQ version supported

--- [current-session | 2026-07-26 21:00 | CIQ device compatibility matrix::https://developer.garmin.com/connect-iq/compatible-devices/] ---
### Untitled (1)

Compatible Devices | Connect IQ | Garmin Developers

*   [Overview](/connect-iq/overview/)

*   [Compatible Devices](/connect-iq/compatible-devices/)

*   [API Docs](/connect-iq/api-docs/)

*   [Get the SDK](/connect-iq/sdk/)

*   [Submit an App](/connect-iq/submit-an-app/)

*   [Stay Informed](/connect-iq/stay-informed/)

*   [Connect IQ Basics](/connect-iq/connect-iq-basics/)

*   [Monkey C](/connect-iq/monkey-c/)

*   [Core Topics](/connect-iq/core-topics/)

*   [User Experience Guidelines](/connect-iq/user-experience-guidelines/)

*   [Personality Library](/connect-iq/personality-library/)

*   [Connect IQ FAQ](/connect-iq/connect-iq-faq/)

*   [Reference Guides](/connect-iq/reference-guides/)

*   [App Review Guidelines](/connect-iq/app-review-guidelines/)

*   [Monetization](/connect-iq/monetization/)

*   [Device Reference](/connect-iq/device-reference/)

MenuCompatible Devices

×

Device Type:

AllWatches/WearablesOutdoor HandheldsEdge

Supported CIQ Version:

All

*   [

    All](#)
*   [

    1.2](#)
*   [

    1.4](#)
*   [

    2.4](#)
*   [

    3.0](#)
*   [

    3.1](#)
*   [

    3.2](#)
*   [

    3.3](#)
*   [

    3.4](#)
*   [

    5.0](#)
*   [

    5.1](#)
*   [

    5.2](#)
*   [
   …

--- [current-session | 2026-07-26 21:00 | CIQ device compatibility matrix::https://developer.garmin.com/connect-iq/compatible-devices/] ---
### Untitled (3)

![](https://static.garmincdn.com/en/products/010-02158-02/v/cf-sm-c561cac8-1a27-4bb1-8374-d99dc6afe57a.jpg)

fēnix® 6 Pro / 6 Sapphire / 6 Pro Solar / 6 Pro Dual Power / quatix® 6

 | 260 x 260 | round | Memory-In-Pixel (64 colors) | 3.4 |
|

![](https://static.garmincdn.com/en/products/010-02159-00/v/cf-sm-880ca1fb-2302-4a53-bfda-962e357fd7f8.jpg)

fēnix® 6S / 6S Solar / 6S Dual Power

 | 240 x 240 | round | Memory-In-Pixel (64 colors) | 3.4 |
|

![](https://static.garmincdn.com/en/products/010-02159-14/v/cf-sm-6f0a6934-59f4-467c-8a6d-e74cb01d5ca6.jpg)

fēnix® 6S Pro / 6S Sapphire / 6S Pro Solar / 6S Pro Dual Power

 | 240 x 240 | round | Memory-In-Pixel (64 colors) | 3.4 |
|

![](https://static.garmincdn.com/en/products/010-02157-01/v/cf-sm-47dff6dd-beb7-42eb-9daa-3585c81c12ea.jpg)

fēnix® 6X Pro / 6X Sapphire / 6X Pro Solar / tactix® Delta Sapphire / Delta Solar / Delta Solar - Ballistics Edition / quatix® 6X / 6X Solar / 6X Dual Power

 | 280 x 280 | round | Memory-In-Pixel (64 colors) | 3.4 |
|

![](https://static.garmincdn.com/en/products/010-02540-20/v/cf-sm-650273c3-5d6c-4615-b9b0-dc811c4755ac.jpg)

fēnix® 7 / quatix® 7

 | 260 x 260 | round | Memory-In-Pixel (64 colors) | 5.2 |
|

![](https://res.garmin.com/en/products/010-02777-10/v/cf-sm.jpg)

fēnix® 7 Pro

 | 260 x 260 | round | Memory-In-Pixel (64 colors) | 5.2 |
|

![](https://res.garmin.com/en/products/010-02777-02/g/cf-sm.jpg)

fēnix® 7 Pro - Solar Edition (no Wi-Fi)

 | 260 x 260 | round | Memory-In-Pix…

⚠ search call #3/8 in this window. Results limited to 2/query. 5 call(s) remaining before block. Batch queries: ctx_search(queries: ["q1","q2","q3"]) or use ctx_batch_execute.


I got useful info:
- Venu 2: API Level 5.0
- The FitContributor API is available in Data Field, Glance, Watch App since API Level 1.3.0

But I still need:
- Fenix 3 API level (couldn't find directly in search results - need to search again or look at the table more carefully)
- Whether `pressure` field is supported on Fenix 3 / Venu 2 (Sensor.Info has `pressure` attribute since 1.3.0 maybe?)
- Supported devices for the `pressure` field

Let me search the Sensor.Info API specifically for "pressure" and "ambientPressure". Also fetch the full page if needed.

var pressure supported devices Sensor.Info

ambientPressure attribute Sensor Info Garmin Connect IQ

pressure field API level since barometric depth

Question: Garmin Fenix 3 Connect IQ API level 1.4 or 2.4 maximum supported CIQ version

Question: Garmin Connect IQ Sensor.Info.pressure ambientPressure Fenix 3 Venu 2 barometer raw pressure


## var pressure supported devices Sensor.Info

--- [current-session | 2026-07-26 21:00 | CIQ Sensor.Info API::https://developer.garmin.com/connect-iq/api-docs/Toybox/Sensor/Info.html] ---
### Class: Toybox.Sensor.Info > Instance Attribute Details > var pressure as [Lang.Float](../../Toybox/Lang/Float.html) or **Null**

### var pressure as [Lang.Float](../../Toybox/Lang/Float.html) or **Null**

The barometric pressure in Pascals (Pa).

This returns barometric pressure calibrated to sea level. Since pressure varies dues to several factors, a GPS-based altitude must first be obtained, then the ambient (local) pressure is measured by the pressure sensor before conversion to a calibrated barometric pressure value.

Since:

API Level 1.0.0

Returns:

*   [Lang.Float](../../Toybox/Lang/Float.html)

---

## ambientPressure attribute Sensor Info Garmin Connect IQ

--- [current-session | 2026-07-26 21:00 | CIQ Sensor.Info API::https://developer.garmin.com/connect-iq/api-docs/Toybox/Sensor/Info.html] ---
### Class: Toybox.Sensor.Info > Instance Attribute Details

## Instance Attribute Details

---

## pressure field API level since barometric depth

--- [current-session | 2026-07-26 21:00 | CIQ Sensor.Info API::https://developer.garmin.com/connect-iq/api-docs/Toybox/Sensor/Info.html] ---
### Class: Toybox.Sensor.Info > Instance Attribute Details > var pressure as [Lang.Float](../../Toybox/Lang/Float.html) or **Null**

### var pressure as [Lang.Float](../../Toybox/Lang/Float.html) or **Null**

The barometric pressure in Pascals (Pa).

This returns barometric pressure calibrated to sea level. Since pressure varies dues to several factors, a GPS-based altitude must first be obtained, then the ambient (local) pressure is measured by the pressure sensor before conversion to a calibrated barometric pressure value.

Since:

API Level 1.0.0

Returns:

*   [Lang.Float](../../Toybox/Lang/Float.html)

⚠ search call #4/8 in this window. Results limited to 1/query. 4 call(s) remaining before block. Batch queries: ctx_search(queries: ["q1","q2","q3"]) or use ctx_batch_execute.


Compatible Devices | Connect IQ

- [web_fetch] Community/practical context: AI CODE CREATIONGitHub CopilotWrite better code with AIGitHub Copilot appDirect agents from issue to mergeMCP RegistryNewIntegrate external toolsDEVELOPER WORKFLOWSActionsAutomate
- [web_fetch] Community/practical context: Approach® S50390 x 390roundAMOLED5.1Approach® S60240 x 240roundMemory-In-Pixel (64 colors)2.4Approach® S62260 x 260roundMemory-In-Pixel (64 colors)3.0Approach® S70 42mm390 x 390rou
- [web_fetch] Community/practical context: But I cannot get it to work 1) In the SDK manager, select the latest SDK and download all devices, as Jim said 2) When creating your app, make sure the minimum supported API is 1.3

Internal research: web_search ×1, web_fetch ×4, web_fetch_headless ×1

Findings
- [web_fetch] Community/practical context: AI CODE CREATIONGitHub CopilotWrite better code with AIGitHub Copilot appDirect agents from issue to mergeMCP RegistryNewIntegrate external toolsDEVELOPER WORKFLOWSActionsAutomate
- [web_fetch] Community/practical context: Approach® S50390 x 390roundAMOLED5.1Approach® S60240 x 240roundMemory-In-Pixel (64 colors)2.4Approach® S62260 x 260roundMemory-In-Pixel (64 colors)3.0Approach® S70 42mm390 x 390rou
- [web_fetch] Community/practical context: But I cannot get it to work 1) In the SDK manager, select the latest SDK and download all devices, as Jim said 2) When creating your app, make sure the minimum supported API is 1.3

Sources
- [web_fetch] unsupervised_topic_modeling/topics/en/17/100/50/topics at master · annontopicmodel/unsupervised_topic_modeling: https://github.com/annontopicmodel/unsupervised_topic_modeling/blob/master/topics/en/17/100/50/topics
- [web_fetch] Compatible Devices | Connect IQ: https://developer.garmin.com/connect-iq/compatible-devices/
- [web_fetch] Is it possible to develop for Fenix 3 today (2023)?: https://forums.garmin.com/developer/connect-iq/f/discussion/333085/is-it-possible-to-develop-for-fenix-3-today-2023

Internal tools
Internal research: web_search ×1, web_fetch ×4, web_fetch_headless ×1

Caveat
Evidence is partial: the strongest readable sources were mostly community/practical context.

Compatible Devices | Connect IQ


Raw pressure data

Toybox.Activity.Info

ConnectIQ: Access of internal sensors

- [web_fetch] Community/practical context: Hey guys,This is how I do it in my app.Data available: sensor.altitude (from pressure using baro setting) and sensor.pressure (that really gives the barometer setting adjusted with
- [web_fetch] Community/practical context: Instance Attribute Details var altitude as Lang.Float or Null The altitude above mean sea level in meters (m). Elevation is derived from the most accurate source: Barometer or GPS
- [web_fetch] Community/practical context: 0 I want to develop an application with eclipse project type "Watch-App". Basically I'm interested to get the Temperature and Speed without any external sensor. My watch (Fenix 3)

Internal research: web_search ×1, web_fetch ×4, web_fetch_headless ×1

Findings
- [web_fetch] Community/practical context: Hey guys,This is how I do it in my app.Data available: sensor.altitude (from pressure using baro setting) and sensor.pressure (that really gives the barometer setting adjusted with
- [web_fetch] Community/practical context: Instance Attribute Details var altitude as Lang.Float or Null The altitude above mean sea level in meters (m). Elevation is derived from the most accurate source: Barometer or GPS
- [web_fetch] Community/practical context: 0 I want to develop an application with eclipse project type "Watch-App". Basically I'm interested to get the Temperature and Speed without any external sensor. My watch (Fenix 3)

Sources
- [web_fetch] Raw pressure data: https://forums.garmin.com/developer/connect-iq/f/discussion/1217/raw-pressure-data
- [web_fetch] Toybox.Activity.Info: https://developer.garmin.com/connect-iq/api-docs/Toybox/Activity/Info.html
- [web_fetch] ConnectIQ: Access of internal sensors: https://stackoverflow.com/questions/31242034/connectiq-access-of-internal-sensors

Internal tools
Internal research: web_search ×1, web_fetch ×4, web_fetch_headless ×1

Caveat
Evidence is partial: the strongest readable sources were mostly community/practical context.

Raw pressure data

Toybox.Activity.Info

ConnectIQ: Access of internal sensors


Critical finding: `Sensor.Info.pressure` is **barometric pressure calibrated to sea level**, NOT raw ambient pressure. The API docs say:
"This returns barometric pressure calibrated to sea level. Since pressure varies dues to several factors, a GPS-based altitude must first be obtained, then the ambient (local) pressure is measured by the pressure sensor before conversion to a calibrated barometric pressure value."

This means we cannot use `Sensor.Info.pressure` for depth directly - it's filtered/calibrated to sea level. We need raw ambient pressure.

The question is whether Connect IQ exposes raw ambient pressure. There might be `Sensor.Info.ambientPressure` which I haven't found yet in the docs I fetched. Let me check if there are newer API docs or other pressure fields. The web explore results are too short. Let me fetch the full Sensor module docs and search for ambientPressure, or check if there are newer API levels.

Also, I should look at whether `SensorHistory` provides raw pressure, or if ActivityRecording has any altitude/pressure info.

Let me fetch more API docs: Sensor module, SensorHistory, ActivityRecording, and search for ambientPressure or raw pressure.


fetched 3 c=1. ok=3 cache=0 err=0. 79 sections 122.6KB.

- [new]   CIQ Sensor module::https://developer.garmin.com/connect-iq/api-docs/Toybox/Sensor.html — 39 sections (52.4KB)
- [new]   CIQ SensorHistory API::https://developer.garmin.com/connect-iq/api-docs/Toybox/SensorHistory.html — 21 sections (48.5KB)
- [new]   CIQ ActivityRecording API::https://developer.garmin.com/connect-iq/api-docs/Toybox/ActivityRecording.html — 19 sections (21.7KB)

ctx_search(queries: [...], source: "<label>") for full content.

---

### CIQ Sensor module::https://developer.garmin.com/connect-iq/api-docs/Toybox/Sensor.html

Toybox.Sensor

# Module: Toybox.Sensor

## Overview

The Sensor module provides access to sensor data.

Sensor allows Apps to register for updates to the current sensor data. It also enables apps to control the ANT+ sensors supported natively by the device, which are described by the provided SENSOR\_\* constants.

Example:

Using heart rate sensors to display current heart rate…
### CIQ SensorHistory API::https://developer.garmin.com/connect-iq/api-docs/Toybox/SensorHistory.html

Toybox.SensorHistory

# Module: Toybox.SensorHistory

## Overview

The SensorHistory module contains the interface for SensorHistory.

SensorHistory provides access to historical information recorded by the on-board sensors of device hardware. The amount of information that is available is device dependent. This means that one device may provide more information than another. Th…
### CIQ ActivityRecording API::https://developer.garmin.com/connect-iq/api-docs/Toybox/ActivityRecording.html

Toybox.ActivityRecording

# Module: Toybox.ActivityRecording

## Overview

The Activity Recording module will allow Apps to access the FIT file recording capabilities of the device.

Apps can use this module to allow the user to start and stop recordings, create laps, and save recorded data. SPORT\_\* and SUB\_SPORT\_\* constants are provided as enums.

The SPORT\_\* defines the…


Now let me search for ambientPressure and raw pressure across all the CIQ docs I have.

ambient pressure uncalibrated barometric depth diving

Sensor.Info pressure raw sensor value Pascals calibrated sea level

getElevationHistory barometric pressure raw

Session createField depth recording activity type permissions

createField requires recording session ActivityRecording

FitContributor field app type watch app data field


## ambientPressure raw pressure Sensor

--- [current-session | 2026-07-26 21:00 | CIQ Sensor module::https://developer.garmin.com/connect-iq/api-docs/Toybox/Sensor.html] ---
### Module: Toybox.Sensor > Typedef Details > **SensorType** as [Sensor.RemoteSensorType](../Toybox/Sensor.html#RemoteSensorType-module) or [Sensor.OnboardSensorType](../Toybox/Sensor.html#OnboardSensorType-module)

### **SensorType** as [Sensor.RemoteSensorType](../Toybox/Sensor.html#RemoteSensorType-module) or [Sensor.OnboardSensorType](../Toybox/Sensor.html#OnboardSensorType-module)

Since:

API Level 1.0.0

---

## ambient pressure uncalibrated barometric depth diving
No results found.

---

## Sensor.Info pressure raw sensor value Pascals calibrated sea level

--- [current-session | 2026-07-26 21:00 | CIQ Sensor module::https://developer.garmin.com/connect-iq/api-docs/Toybox/Sensor.html] ---
### Module: Toybox.Sensor > Instance Method Details > **getInfo()** as [Sensor.Info](../Toybox/Sensor/Info.html)

### **getInfo()** as [Sensor.Info](../Toybox/Sensor/Info.html)

Get the current Sensor [Sensor.Info](../Toybox/Sensor/Info.html).

This is useful for retrieving the current sensor info either on demand or periodically within a [Timer](../Toybox/Timer/Timer.html).

Note:

Will cause an app crash if called from a data field app

Example:

Get accelerometer data once per second

```
using Toybox.Sensor;
using Toybox.System;
using Toybox.Timer;
var dataTimer = new Timer.Timer();
dataTimer.start(method(:timerCallback), 1000, true); // A one-second timer
function timerCallback() {
    var sensorInfo = Sensor.getInfo();
    if (sensorInfo has :accel && sensorInfo.accel != null) {
        var accel = sensorInfo.accel;
        var xAccel = accel[0];
        var yAccel = accel[1];
        System.println("x: " + xAccel + ", y: " + yAccel);
    }
}
```

Returns:

*   [Sensor.Info](../Toybox/Sensor/Info.html)

See Also:

*   [Toybox.Timer.Timer](../Toybox/Timer/Timer.html)

Since:

API Level 1.0.0

⚠ search call #5/8 in this window. Results limited to 1/query. 3 call(s) remaining before block. Batch queries: ctx_search(queries: ["q1","q2","q3"]) or use ctx_batch_execute.