Different API levels for eTrex Touch and GPSMAP H1 / H1i Plus?

Why does the SDK manager list different API levels for the eTrex Touch (2025 model) and the GPSMAP H1? As far as I know they share the same software and features (except of course for the keys). The eTrex Touch is listed at API level 5.1 and the GPSMAP H1 at API level 5.0. Not sure if it has any practical implications, so just wondering why it is the case.

  • You are right, compiler.json [*] for the respective devices (etrextouch and gpsmaph1) specifies different hardware part numbers but the same (sole) software part number for each device. etrextouch/compiler.json:partNumbers[0].connectIqVersion is 5.1.1, while gpsmaph1/compiler.json:partNumbers[0].connectIqVersion is 5.0.0

    Unlike most CIQ devices, in this case, compiler.json does not specify a corresponding firmware version for the software part number(s) for each device. Normally, each entry of compiler.json:partNumbers[] has both connectIqVersion and firmwareVersion fields. When you export your project for upload to the store, the value of firmwareVersion is placed in the manifest as minimumFirmwareVersion, and it's understood that the store will prevent users from installing that version of your app if their device has firmware lower than minimumFirmwareVersion (. This ensures that the user's device firmware version is at least firmwareVersion, and by implication, that their CIQ version is at least connectIqVersion (since Garmin keeps those values in sync when updating compiler.json:partNumbers[].

    I noticed that gpsmap86 is also like this (compiler.json lacks firmwareVersion), but not the earlier gpsmap* devices.

    Since gpsmaph1 and etrextouch were released around the same time, it's hard to say why connectIqVersion is different for each of them.

    --

    [*] In VS Code:

    - Open command palette (CTRL/CMD-SHIFT-P)

    - Select "Monkey C: Open Samples Folder". This will open a folder at .../Garmin/ConnectIQ/SDKs/[current sdk]/Samples

    - Navigate to .../Garmin/ConnectIQ/Devices. You will see a separate folder for every CIQ device, such as .../Garmin/ConnectIQ/Devices/etrextouch. Each folder has several files of interest, especially compiler.json and simulator.json

  • Not sure if it has any practical implications

    - The practical implication of the value of compiler.json:partNumbers[].connectIqVersion is that if you specify a higher minApiLevel, that part number will be excluded from the build. So if you specify a minApiLevel of 5.1.0, gpsmaph1 will be excluded from your project export, even if it's specified as a supported product in the manifest.

    - I noticed that the corresponding *.api.debug.xml files for each device show that extrextouch has CIQ API 5.1.0 functions like Graphics.addPoints, which gpsmaph1 lacks. So as far as the SDK is concerned, etrextouch has API 5.1.0 features and gpsmaph1 does not. This means that depending on your build options, has checks which test for API 5.1.0 features might be resolved at compile time and return false at for gpsmaph1, but true for etrextouch. (The default behaviour is to not resolve has checks at compile time though - it used to be the opposite)

    - The fact that firmwareVersion is not in either device's compiler.json:partNumbers[] array tells me that connectIqVersion will probably never be updated. The reason for this is that I think firmwareVersion is used to ensure that users have the minimum firmware (and minimum CIQ) that was configured in compiler.json at the time the app was exported. I don't think the store uses connectIqVersion to gate the minimum CIQ version on the device in the same way, but I could be wrong.

    Anecodal evidence for the above point:

    - compiler.json:partNumbers[].firmwareVersion gets added to the IQ manifest file as minimumFirmwareVersion, but connectIqVersion is added with the name connectIqVersion. Ofc that could just be sloppy naming, idk.

    So I'm not sure what the situation is for the real devices. Do they both have CIQ 5.1.1, or does one of them only have CIQ 5.0.0? Regardless of the reality on the device, the SDK will behave (for certain purposes) like gpsmaph1 only has CIQ 5.0.0.

    However, if you make sure your minApiLevel is at most 5.0.0, if you use has checks in your app to gate CIQ 5.1.0 features, and you avoid using the compiler flag which removes has checks at compile-time, you can still write an app that would support CIQ 5.1.0 features and deploy it to both etrextouch and gpsmaph1.

    If you own or you've seen both devices, and you know for sure they have identical software with identical CIQ version (5.1.0), you could file a bug report about this. Maybe Garmin could shed some light on some stuff where I'm just speculating (like why some devices lack firmwareVersion in compiler.json).

  • TL;DR Regardless of how etrextouch and gpsmaph1 are configured in the SDK:

    If you make sure your minApiLevel is at most 5.0.0, if you use has checks in your app to gate CIQ 5.1.0 features, and you avoid using the compiler flag which removes has checks at compile-time, you can still write an app that would support CIQ 5.1.0 features and deploy it to both etrextouch and gpsmaph1.

  • Thanks for the detailed reply!

    I only have access to a GPSMAP H1, and in the About screen it shows CIQ version 6.0.0 (on firmware version 6.04). So I would assume that it means it has API level 6.0.0?

    I'll try and find out what CIQ version an eTrex Touch has on current latest firmware, but I think the likelihood of it being 6.0.0 as well is high because the eTrex Touch and GPSMAP H1 / H1i Plus get updates at (almost) the same time with the same firmware version number. So I guess a bug report would be in order then.

  • Interestingly both devices seem to have been released with CIQ version 5.1.1 (see here and here). A recent firmware update (in November 2025) seems to have updated the CIQ version to 6.0.0 for both devices.

  • Well it's not unheard of for firmwareVersion / connectIqVersion in compiler.json to be lower than what's on the actual device.

    In the case of firmwareVersion, it's quite common, because once firmwareVersion is updated in compiler.json, it becomes the minimum version required for any user to install an app that's built going forward. And ofc, connectIqVersion always has to be synced with firmwareVersion.

    As far as CIQ 6.0.0 goes, even if some devices may have it, it's obviously not available to devs in a new SDK yet, so none of the device files (compiler.json) will reflect that version.

    Like I said, given that those 2 devices lack firmwareVersion in compiler.json, I would guess that connectIqVersion and the corresponding *.api.debug.xml file, as well as sim behaviour, might *never* be updated for newer CIQ versions. I don't see how it would be safe to do so, unless the store would actually use connectIqVersion in the IQ manifest to filter out devices in the wild which have a lower CIQ version.

    Hopefully the CIQ team can give some clarity on why things are the way they are. I don't think it's necessarily a bug, but it's def a head-scratcher. Again, you should be able to use newer CIQ functionality than what's specified in SDK device files (as long as you set minApiLevel low enough, you write your app with has checks and avoid removing has checks at compile-time), but it's possible that you won't be able to test certain things in the sim (assuming the device files are never updated to a newer CIQ version in the future - I could be wrong about my guess that they won't be updated tho.)