list of Garmin devices by button count?

I bet  knows the answer to this but if anyone can tell me?

There's a list of devices by CIQ version, list of devices by ram size, list of devices by screen pixel size

But how about button count?

Do all forerunners and fenix series have five buttons? Are there exceptions?

Do any other models have five buttons?

Wasn't sure where to ask this so forgive the use of developer section as I am thinking best bet

ie. CIQ API, screen size and shape list

https://developer.garmin.com/connect-iq/compatible-devices/

ram size

https://raw.githubusercontent.com/flocsy/garmin-dev-tools/refs/heads/main/csv/device2memory-datafield.csv

and this thread has some helpful lists but not button count

 RE: Screen physical size list 

  • In general,

    forerunners, instincts and fenix have 5 buttons (the fr630 has 6)

    vivoactive, venu and approach ("touch only" devices) have2, but sometimes 3

    Things to consider is how you code your delegates.  The same code and be used without knowing how many buttons the device has.

    Check out the input sample in the sdk.

    Not all buttons are available in CIQ.  And trying to do something like your own long press is risky

  • I don't have a ready list, but would do a small script in any script language to loop over the devices in the Devices folder and in each directory read simulator.json and look for the size of the keys array. Not sure if it's 100% accurate, but here it is:

    for D in * ; do echo "$D:$(jq '.keys | length' $D/simulator.json)"; done

    approachs50:3
    approachs60:3
    approachs62:3
    approachs7042mm:3
    approachs7047mm:3
    d2air:3
    d2airx10:3
    d2bravo:5
    d2bravo_titanium:5
    d2charlie:5
    d2delta:5
    d2deltapx:5
    d2deltas:5
    d2mach1:5
    d2mach2:5
    descentg1:5
    descentg2:5
    descentmk1:5
    descentmk2:5
    descentmk2s:5
    descentmk343mm:5
    descentmk351mm:5
    edge1030:4
    edge1030bontrager:4
    edge1030plus:4
    edge1040:2
    edge1050:2
    edge130:5
    edge130plus:5
    edge520plus:7
    edge530:7
    edge540:7
    edge550:7
    edge820:4
    edge830:4
    edge840:7
    edge850:7
    edge_1000:4
    edge_520:7
    edgeexplore:4
    edgeexplore2:2
    edgemtb:7
    enduro:5
    enduro3:5
    epix:5
    epix2:5
    epix2pro42mm:5
    epix2pro47mm:5
    epix2pro51mm:5
    etrextouch:0
    fenix3:5
    fenix3_hr:5
    fenix5:5
    fenix5plus:5
    fenix5s:5
    fenix5splus:5
    fenix5x:5
    fenix5xplus:5
    fenix6:5
    fenix6pro:5
    fenix6s:5
    fenix6spro:5
    fenix6xpro:5
    fenix7:5
    fenix7pro:5
    fenix7pronowifi:5
    fenix7s:5
    fenix7spro:5
    fenix7x:5
    fenix7xpro:5
    fenix7xpronowifi:5
    fenix843mm:5
    fenix847mm:5
    fenix8pro47mm:5
    fenix8solar47mm:5
    fenix8solar51mm:5
    fenixchronos:5
    fenixe:5
    fr165:5
    fr165m:5
    fr230:5
    fr235:5
    fr245:5
    fr245m:5
    fr255:5
    fr255m:5
    fr255s:5
    fr255sm:5
    fr265:5
    fr265s:5
    fr45:0
    fr55:5
    fr57042mm:5
    fr57047mm:5
    fr630:4
    fr645:5
    fr645m:5
    fr735xt:5
    fr745:5
    fr920xt:6
    fr935:5
    fr945:5
    fr945lte:5
    fr955:5
    fr965:5
    fr970:5
    garminswim2:0
    gpsmap66:15
    gpsmap67:15
    gpsmap86:15
    gpsmaph1:15
    instinct2:5
    instinct2s:5
    instinct2x:5
    instinct3amoled45mm:5
    instinct3amoled50mm:5
    instinct3solar45mm:5
    instinctcrossover:5
    instinctcrossoveramoled:5
    instincte40mm:5
    instincte45mm:5
    legacyherocaptainmarvel:3
    legacyherofirstavenger:3
    legacysagadarthvader:3
    legacysagarey:3
    marq2:5
    marq2aviator:5
    marqadventurer:5
    marqathlete:5
    marqaviator:5
    marqcaptain:5
    marqcommander:5
    marqdriver:5
    marqexpedition:5
    marqgolfer:5
    montana7xx:4
    oregon7xx:2
    rino7xx:2
    system8preview:5
    venu:3
    venu2:3
    venu2plus:3
    venu2s:3
    venu3:3
    venu3s:3
    venu441mm:2
    venu445mm:2
    venud:3
    venusq:3
    venusq2:3
    venusq2m:3
    venusqm:3
    venux1:2
    vivoactive:3
    vivoactive3:1
    vivoactive3d:1
    vivoactive3m:1
    vivoactive3mlte:1
    vivoactive4:3
    vivoactive4s:3
    vivoactive5:3
    vivoactive6:2
    vivoactive_hr:3
    vivolife:0

  • now that was absolutely fantastic, many thanks

    looking for any surprises but nope, as predicted

    hmm that's interesting, the "vivoactive" which must mean v1 which I own because surprisingly still works and runs many apps and even stryd datafield

    but it only has two physical buttons - the screen can be touched though so I guess maybe that's considered a button?

    but if touch is a button then they didn't count any lily models which run apps but no physical buttons?

    oh wait no, apparently lily doesn't run apps so maybe that's why not listed

  • TL;DR simulator.json's keys array doesn't really list physical buttons at all (same with the device reference). The keys array really lists "Connect IQ" keys (like KEY_MENU, KEY_UP, etc.) which don't necessarily map 1 to 1 with physical buttons.

    The fact that most 5-button watches have 5 elements in keys[] is just a coincidence: the light button is always excluded, but the up button is counted twice (once for short press which means up, and once for long press which means menu).

    but it only has two physical buttons - the screen can be touched though so I guess maybe that's considered a button?

    It has two capacitive touch "buttons" below the screen:

    You could actually say there's 4 buttons.

    - top-left: light

    - top-right: start

    - bottom-left: back/lap

    - bottom-right: menu

    As for the keys in simulator.json:

    - vivoactive has this:

     "keys": [
            {
                "behavior": "onMenu",
                "id": "menu",
                "location": {
                    "height": 28,
                    "width": 41,
                    "x": 202,
                    "y": 312
                }
            },
            {
                "id": "enter",
                "location": {
                    "height": 34,
                    "width": 20,
                    "x": 275,
                    "y": 169
                }
            },
            {
                "behavior": "onBack",
                "id": "esc",
                "location": {
                    "height": 28,
                    "width": 44,
                    "x": 61,
                    "y": 312
                }
            }
        ],

    Note that simulator.json *never* shows the light button, since CIQ apps are unable to react to it.

    Also note that simulator.json always counts the "menu button" (if present), even for watches where the "menu button" is just a long press of a different button (like holding UP on most 5-button watches). This means that UP and MENU are distinct buttons in simulator.json for 5-button watches, and that the keys array doesn't really enumerate physical buttons per se.

    So it's kind of misleading to use the keys array to count physical buttons imo.

    As another example, here's the keys array for fr965:

     "keys": [
            {
                "behavior": "onSelect",
                "id": "enter",
                "location": {
                    "height": 130,
                    "width": 73,
                    "x": 570,
                    "y": 274
                }
            },
            {
                "behavior": "previousPage",
                "id": "up",
                "location": {
                    "height": 75,
                    "width": 31,
                    "x": 28,
                    "y": 422
                }
            },
            {
                "behavior": "onMenu",
                "id": "menu",
                "isHold": true,
                "location": {
                    "height": 75,
                    "width": 31,
                    "x": 28,
                    "y": 422
                }
            },
            {
                "behavior": "nextPage",
                "id": "down",
                "location": {
                    "height": 65,
                    "width": 53,
                    "x": 54,
                    "y": 575
                }
            },
            {
                "behavior": "onBack",
                "id": "esc",
                "location": {
                    "height": 66,
                    "width": 47,
                    "x": 572,
                    "y": 573
                }
            }
        ],

    The light button is not counted, but the up button is double-counted (once for short press, and once for long press which maps to KEY_MENU).