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

Post a Comment