Overview

AppBuilder is a flexible app for Garmin watches (and cycling computers) that lets you create own your data field using a math formula. (Follow the latest updates and discuss the app in the forum thread.)

If you run or bike with a Garmin, there may have been a few times when you wanted to see more data, like "How fast did I run my work intervals?"

Thanks to Garmin's excellent Connect IQ app store, we've been able to download free apps to show us more information while we run or bike. Sometimes you know what information you want, but an app doesn't exist for it. If that information is based on a math formula (like "cadence / 2"), that's where AppBuilder comes in.

AppBuilder allows you to calculate almost anything you want, and record it to the activity FIT file, so you can view the data in a graph in Garmin Connect later. This is an improvement over many built-in fields, which do not record to the file.

Here's just a few examples of apps that have been created using AppBuilder:
  • Yacht race timer
  • Marathon predictor
  • Normalized power, Intensity Factor
  • Distance to next aid station, with alerts
  • Elevation grade
  • 5 second countdown that repeats indefinitely, with beep/vibration alerts
  • Interval rest timer (while watch is paused)
  • Pace in opposite units (km or miles)
  • Stride length
  • Alternate between min and max HR, every 5 seconds
  • Count sprints
The only limits to what you can build are your imagination, and the available memory on Garmin devices.

Download AppBuilder from the Connect IQ store, for free.

Comments

  1. Wow, thank you so much for this. I've need a "pace averaged over a short time" and here it is - along with a heap of other very useful stuff. Thanks for saving me the effort of writing it in raw MonkeyC - I really wasn't looking forward to that!

    I have a couple of suggestions/requests:
    * maybe make the "label" optional. It takes space on the display and you generally know what's where anyway.
    * is it possible to access data stored in FIT files from other activities? The background to this is that my training regime has me running a certain effort (formula of distance and pace) each day but not necessarily in a single run. I'd like to have a field which took the distance and pace from previous runs today as well as the live data from this run and told me when I'm allowed to stop (!) - or more helpfully how much further I need to run at this pace to make sure my coach won't shout at me.

    Again, thanks for this toolset.

    ReplyDelete
    Replies
    1. Hey Calvin,

      Sorry for the late reply.

      - Re: making "label" optional
      I can't really do this for AppBuilder 5 (and not 5+), because AppBuilder 5 is a simple data field which means the CIQ framework takes care of rendering the field (and the label is mandatory.) AppBuilder 5+ is a complex data field which does its own full-screen rendering (and supports 4 layouts) but it's only available for high-end watches with lots of memory.

      - On accessing data from other activities
      Sorry, the CIQ framework doesn't allow this.

      Thanks for interest!

      Delete
  2. Hmm, I'm not sure why I'm "unknown" above but I'm Calvin
    https://www.strava.com/athletes/calvin_sambrook

    ReplyDelete
  3. Hello Flowstate. I'm trying to display on an Edge 1000 when running a course the estimated time until the destination based on the average speed for the last minute. I'm using the expression distanceToDestination_raw/timeavg(speed_raw,60)
    But when the GPS is first switched on the field displays !Name. I have activated a course but I'm not actually moving. Have I done something wrong or do I need to be moving along the course for the field to display correctly?

    ReplyDelete
    Replies
    1. On reading your documentation more I see that the error is beacuse distanceToDestination is not supported in the basic App. I tried the formula in the App 5 and it works!

      Delete
  4. Great app! I'm having trouble creating a formula. I'd like to know instantaneous calories/hour, as a measure of effort. Thank you!

    ReplyDelete
    Replies
    1. Sorry for the late reply.

      Try:

      calories / timer / 3600

      Delete
  5. Hi - First superb app - many thanks for developing it. I am using it to test algorithms for mapping hr to power. I have got it working on my Vivoactive 3 using the App Builder 5 - but I cant get the same formula to work on my Edge 820 in the 5+ app. It appears to be the element "prev(hr)" ..... am I missing something?

    ReplyDelete
    Replies
    1. Hmm, that's strange. I tried it in the simulator and it seems to work. If you're still having problems, please send me an email.

      Delete
  6. Thanks for a great app, you've allowed me to have a lot more freedom with my Garmin Edge. However, I'd like to install the AppBuilder 5+ on a Garmin Edge 830, but it's listed as being not compatible. Apparently, AppBuilder 5 is compatible with the 830, and the 5+ version is compatible with the similar 1030 and 820 devices, so I'm wondering if this is just an oversight or what's the problem. Thanks.

    ReplyDelete
    Replies
    1. AppBuilder 5+ should be available on Edge 830. I'm looking at the store page now and seeing it. Shoot me an email if you're still having trouble.

      Delete
  7. Hi, I would like to a timer that goes on when over some HR threshold and if I go down it resets. Could it be done?

    ReplyDelete
    Replies
    1. I did somethink like:

      setv(if(when(HR gt 155), 1, null), timer);
      setv(if(when(HR lt 150), 1, null), 0);
      if(getv(1), timer-getv(1), HR)

      Awesome tool!!

      Delete
    2. Nice. Glad you found a formula that works for you :)

      Delete
    3. One issue I have is that no matter the data page layout the fonts of the AppBuilder field are very small, do you have any insights? Also I made a calculation to show my drivetrain and it works great!! I'm so happy

      Delete
    4. setv(if(Cadence gt 70, 1, null), round(5.2 * Cadence / Speed));
      setv(2, findeq(getv(1), 11,13,15,17,19,22,25,28,32,36,42))
      setv(3, findgteindex(getv(1), 11,13,15,17,19,22,25,28,32,36,42) + 1)
      '40x' + getv(2) + ' (' + getv(3) + ')'

      With this I show my current gearing like: '40x13 (2)'
      Where 40 is my chainring 1x11, my wheels are 700c (gravel)

      Delete
    5. Hey, if you have any non-numerical / text values in your formula, then the font will be a lot smaller, because Garmin watches have large fonts for numbers and smaller fonts for text. Sorry about that, there's nothing I can do except to import custom fonts, and most devices simply do not have enough memory for that.

      If you need to display multiple numerical values on the same page, then I recommend AppBuilder 5+, if your device supports it.

      Thanks for sharing your formula! Glad you like the app :)

      Delete
    6. Hi Flowstate! Fisrt of all thank you for this app! it is great!

      Do you know if we can configure a field: "Target Cadence"

      ?

      This is a frustration for hundreds of garmin users that use structured workouts.
      Coaches send us workouts like this:
      200w at 85rpm
      250w at 95rpm
      200w at 100rpm

      But there is no way to see this target cadence value.

      Training peaks sends this information but garmin is not using it.
      Zwift and Wahoo are capable of using it.

      Thanks!!!!

      Delete
    7. Workout info such as target cadence isn't currently available in AppBuilder. What kind of watch do you have? This info is only available to newer watches (such as Forerunner 245), and even then, there isn't much room for AppBuilder to implement new features except possibly on the watches with music (such as Forerunner 245 Music).

      Delete
  8. I think Garmin's latest update has broken something. I went to update my FTP in the App and then I got a Syntax error on my 1030, 530 and Fenix6. A closer look revealed that when you save the string in the app Garmin removes all the parenthesis. I am not sure if this is the error but something has gone wrong for sure!

    ReplyDelete
    Replies
    1. Thanks for the feedback!

      A bug report has been opened with Garmin. Please upvote the bug report (and add a comment if you like) - this will increase the likelihood that Garmin will direct their attention to fixing this issue.

      https://forums.garmin.com/developer/connect-iq/i/bug-reports/regression-bug-connect-iq-store-version-2-12-android-characters-don-t-working-anymore

      Delete
  9. I'm trying to set up multiple data fields on an Edge 1030 screen using AppBuilder5 clones. The field I set for the first clone works fine but any I define after that using B,C or D don't display correctly.

    I've named them and added formulas in Garmin Express but they just show up as a blank field on the screen labelled AppBuilderB, C or D. I've check the formulas in the formula checker and it shows no errors. Anyone know what might be the issue?

    The fields I'm trying to set are :


    "Stopped Time" : ElapsedTime - sum(speed_raw lt 0.89408) displayed in Time (HH:MM:SS) - This works.
    "Moving Average Speed": distance/sum(speed_raw gt 0.89408) displayed in Decimal - Shows as AppbuilderB with two dashes in the field.
    "Moving Time" sum(speed_raw gt 0.89408) displayed in Time (HH:MM:SS) - ASHows as AppbuilderC with two dashes in the field.

    ReplyDelete
    Replies
    1. Managed to sort it in the end anyway. Removed all the clones and added them one at a time and set the field up then disconnected the Garmin, reconnected and did the next clone. A faff but it did work.

      Delete
  10. Noob question, If I add Bearing or Heading fields to my hiking profile on my 5X, it shows me my heading in degrees (per compass setings). I have a 4 field page and I want my heading to display N, NE, ENE, etc. I couldn't find that data field available in compass or other fields online at https://www8.garmin.com/manuals/webhelp/fenix5x/EN-US/GUID-5176B6E4-F272-4437-BDA7-85B31231CB3E.html. I thought I'd create a long IFS statement to do that like ifs(Heading >= 0 , 'N', Heading >= 45 , 'NE' , Heading >= 90 , 'E' , ... but a) I ran out of room on Appbuilder, b) it fails with !NAME and c) there is probably a better way. Does anyone have an alternative, suggestions to make that shorter, maybe an index and divide heading by 12.5?

    ReplyDelete
  11. Hello Friends! Great app! I used several years with a Fenix 5 with incredible results ! But now I upgrade to a Fenix 7x and connect says it is non compatible with this watch, does anyone can confirm it is correct ? Does anyone knows a solution or perhaps I am trying to install an old version? Thanks for your help

    ReplyDelete
    Replies
    1. Appbuilder 5 has been updated with support for Fenix 7X and other new devices

      Delete
  12. Sorry , I tried to place my question as a new query but it all was place it under comment as an answer , sorry!

    ReplyDelete
  13. any plan to for 1040 solar compatibility

    ReplyDelete
    Replies
    1. Appbuilder 5 is now available for Edge 1040 / 1040 Solar

      Delete
  14. I am 100 % new to this and have a couple of questions that maybe you can help me with.
    1.- When we set a formula, how often does it run? every second?
    2.- How could I use a variable that continuously accumulates more value. For instance let's say the variable starts at zero. I want the formula to: capture the 3sec avg power (every second) divide it by 10 and add the result to the variable. so... Setv(1,0); Setv(1, getv (1) + Timeavg(power,3)/10)
    would v(1) be reset to ) every time?

    ReplyDelete
  15. When will it be supported on edge 840?

    ReplyDelete
  16. Can Appbuilder create customised page layouts? I would like a page layout with 8 datafields but in an even 4x2 grid. Also can you format the display of each datafield , such as font size and option to remove the unit (eg. km/h)?

    ReplyDelete
  17. Hi, is there any way to display the time of sunset/raise ?

    ReplyDelete
  18. Great app.. 👍 helped me shoehorn some ant+ data onto screen... quick question . Is the day and date accessible as a variable?.. I would like to tally my rides on a weekly basis.

    ReplyDelete
  19. I cannot get this to work. I tried to use this on an Epix Pro (Gen2) to get a cadence data field to the kayak profile (the Garmin kayak profile does not support cadence for some unknown reason).
    My paddle cadence sensor connects just fine and seems to work, however the data field with the AppBuilder data source does not show any values.
    If the exact same configuration is used with a bike profile for instance (which supports cadence natively), it works. Is there a trick somewhere to get this to work or isn't it supposed to work at all if the profile used has no native support for cadence?

    ReplyDelete

Post a Comment