[
  {
    "id": "fwupdate",
    "name": "Firmware Update",
    "version": "0.01",
    "description": "Uploads new Espruino firmwares to Bangle.js 2",
    "icon": "app.png",
    "type": "RAM",
    "tags": "tools,system",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "custom": "custom.html",
    "customConnect": true,
    "storage": [

    ],
    "sortorder": -20
  },
  {
    "id": "boot",
    "name": "Bootloader",
    "version": "0.32",
    "description": "This is needed by Bangle.js to automatically load the clock, menu, widgets and settings",
    "icon": "bootloader.png",
    "type": "bootloader",
    "tags": "tool,system",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "storage": [
      {"name":".boot0","url":"boot0.js"},
      {"name":".bootcde","url":"bootloader.js"},
      {"name":"bootupdate.js","url":"bootupdate.js"}
    ],
    "sortorder": -10
  },
  {
    "id": "health",
    "name": "Health Tracking",
    "version": "0.01",
    "description": "Logs health data and provides an app to view it (BETA - requires firmware 2v11)",
    "icon": "app.png",
    "tags": "tool,system",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "readme": "README.md",
    "storage": [
      {"name":"health.app.js","url":"app.js"},
      {"name":"health.img","url":"app-icon.js","evaluate":true},
      {"name":"health.boot.js","url":"boot.js"},
      {"name":"health","url":"lib.js"}
    ],
    "sortorder": -10
  },
  {
    "id": "moonphase",
    "name": "Moonphase",
    "version": "0.02",
    "description": "Shows current moon phase. Now with GPS function.",
    "icon": "app.png",
    "tags": "",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"moonphase.app.js","url":"app.js"},
      {"name":"moonphase.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "daysl",
    "name": "Days left",
    "version": "0.03",
    "description": "Shows you the days left until a certain date. Date can be set with a settings app and is written to a file.",
    "icon": "app.png",
    "tags": "",
    "supports": ["BANGLEJS"],
    "allow_emulator": false,
    "storage": [
      {"name":"daysl.app.js","url":"app.js"},
      {"name":"daysl.img","url":"app-icon.js","evaluate":true},
      {"name":"daysl.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "launch",
    "name": "Launcher (Bangle.js 1 default)",
    "shortName": "Launcher",
    "version": "0.07",
    "description": "This is needed by Bangle.js 1.0 to display a menu allowing you to choose your own applications. You can replace this with a customised launcher.",
    "icon": "app.png",
    "type": "launch",
    "tags": "tool,system,launcher",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "storage": [
      {"name":"launch.app.js","url":"app.js"}
    ],
    "sortorder": -10
  },
  {
    "id": "launchb2",
    "name": "Launcher (Bangle.js 2 default)",
    "shortName": "Launcher",
    "version": "0.03",
    "description": "This is needed by Bangle.js 2.0 to display a menu allowing you to choose your own applications.",
    "icon": "app.png",
    "type": "launch",
    "tags": "tool,system,launcher",
    "supports": ["BANGLEJS2"],
    "storage": [
      {"name":"launchb2.app.js","url":"app.js"}
    ],
    "sortorder": -10
  },
  {
    "id": "about",
    "name": "About",
    "version": "0.09",
    "description": "Bangle.js About page - showing software version, stats, and a collaborative mural from the Bangle.js KickStarter backers",
    "icon": "app.png",
    "tags": "tool,system",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"about.app.js","url":"app.js"},
      {"name":"about.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "locale",
    "name": "Languages",
    "version": "0.09",
    "description": "Translations for different countries",
    "icon": "locale.png",
    "type": "locale",
    "tags": "tool,system,locale,translate",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "readme": "README.md",
    "custom": "locale.html",
    "storage": [
      {"name":"locale"}
    ],
    "sortorder": -10
  },
  {
    "id": "notify",
    "name": "Notifications (default)",
    "shortName": "Notifications",
    "version": "0.11",
    "description": "Provides the default `notify` module used by applications to display notifications in a bar at the top of the screen. This module is installed by default by client applications such as the Gadgetbridge app.  Installing `Fullscreen Notifications` replaces this module with a version that displays the notifications using the full screen",
    "icon": "notify.png",
    "type": "notify",
    "tags": "widget",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"notify","url":"notify.js"}
    ]
  },
  {
    "id": "notifyfs",
    "name": "Fullscreen Notifications",
    "shortName": "Notifications",
    "version": "0.12",
    "description": "Provides a replacement for the `Notifications (default)` `notify` module.   This version is used by applications to display notifications fullscreen. This may not fully restore the screen after on some apps. See `Notifications (default)` for more information about the notify module.",
    "icon": "notify.png",
    "type": "notify",
    "tags": "widget",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "storage": [
      {"name":"notify","url":"notify.js"}
    ]
  },
  {
    "id": "welcome",
    "name": "Welcome",
    "version": "0.12",
    "description": "Appears at first boot and explains how to use Bangle.js",
    "icon": "app.png",
    "tags": "start,welcome",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"welcome.boot.js","url":"boot.js"},
      {"name":"welcome.app.js","url":"app.js"},
      {"name":"welcome.settings.js","url":"settings.js"},
      {"name":"welcome.img","url":"app-icon.js","evaluate":true}
    ],
    "data": [{"name":"welcome.json"}]
  },
  {
    "id": "mywelcome",
    "name": "Customised Welcome",
    "shortName": "My Welcome",
    "version": "0.12",
    "description": "Appears at first boot and explains how to use Bangle.js. Like 'Welcome', but can be customised with a greeting",
    "icon": "app.png",
    "tags": "start,welcome",
    "supports": ["BANGLEJS"],
    "custom": "custom.html",
    "storage": [
      {"name":"mywelcome.boot.js","url":"boot.js"},
      {"name":"mywelcome.app.js","url":"app.js"},
      {"name":"mywelcome.settings.js","url":"settings.js"},
      {"name":"mywelcome.img","url":"app-icon.js","evaluate":true}
    ],
    "data": [{"name":"mywelcome.json"}]
  },
  {
    "id": "gbridge",
    "name": "Gadgetbridge",
    "version": "0.24",
    "description": "The default notification handler for Gadgetbridge notifications from Android",
    "icon": "app.png",
    "type": "widget",
    "tags": "tool,system,android,widget",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "dependencies": {"notify":"type"},
    "readme": "README.md",
    "storage": [
      {"name":"gbridge.settings.js","url":"settings.js"},
      {"name":"gbridge.img","url":"app-icon.js","evaluate":true},
      {"name":"gbridge.wid.js","url":"widget.js"}
    ],
    "data": [{"name":"gbridge.json"}]
  },
  {
    "id": "mclock",
    "name": "Morphing Clock",
    "version": "0.07",
    "description": "7 segment clock that morphs between minutes and hours",
    "icon": "clock-morphing.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"mclock.app.js","url":"clock-morphing.js"},
      {"name":"mclock.img","url":"clock-morphing-icon.js","evaluate":true}
    ],
    "sortorder": -9
  },
  {
    "id": "setting",
    "name": "Settings",
    "version": "0.30",
    "description": "A menu for setting up Bangle.js",
    "icon": "settings.png",
    "tags": "tool,system",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "readme": "README.md",
    "storage": [
      {"name":"setting.app.js","url":"settings.js"},
      {"name":"setting.img","url":"settings-icon.js","evaluate":true}
    ],
    "data": [{"name":"setting.json","url":"settings.min.json","evaluate":true}],
    "sortorder": -2
  },
  {
    "id": "alarm",
    "name": "Default Alarm & Timer",
    "shortName": "Alarms",
    "version": "0.13",
    "description": "Set and respond to alarms and timers",
    "icon": "app.png",
    "tags": "tool,alarm,widget",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "storage": [
      {"name":"alarm.app.js","url":"app.js"},
      {"name":"alarm.boot.js","url":"boot.js"},
      {"name":"alarm.js","url":"alarm.js"},
      {"name":"alarm.img","url":"app-icon.js","evaluate":true},
      {"name":"alarm.wid.js","url":"widget.js"}
    ],
    "data": [{"name":"alarm.json"}]
  },
  {
    "id": "wclock",
    "name": "Word Clock",
    "version": "0.03",
    "description": "Display Time as Text",
    "icon": "clock-word.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"wclock.app.js","url":"clock-word.js"},
      {"name":"wclock.img","url":"clock-word-icon.js","evaluate":true}
    ]
  },
  {
    "id": "fontclock",
    "name": "Font Clock",
    "version": "0.01",
    "description": "Choose the font and design of clock face from a library of available designs",
    "icon": "fontclock.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "custom": "custom.html",
    "allow_emulator": false,
    "storage": [
      {"name":"fontclock.app.js","url":"fontclock.js"},
      {"name":"fontclock.img","url":"fontclock-icon.js","evaluate":true},
      {"name":"fontclock.hand.js","url":"fontclock.hand.js"},
      {"name":"fontclock.thinhand.js","url":"fontclock.thinhand.js"},
      {"name":"fontclock.thickhand.js","url":"fontclock.thickhand.js"},
      {"name":"fontclock.hourscriber.js","url":"fontclock.hourscriber.js"},
      {"name":"fontclock.font.js","url":"fontclock.font.js"},
      {"name":"fontclock.font.abril_ff50.js","url":"fontclock.font.abril_ff50.js"},
      {"name":"fontclock.font.cpstc58.js","url":"fontclock.font.cpstc58.js"},
      {"name":"fontclock.font.mntn25.js","url":"fontclock.font.mntn25.js"},
      {"name":"fontclock.font.mntn50.js","url":"fontclock.font.mntn50.js"},
      {"name":"fontclock.font.vector25.js","url":"fontclock.font.vector25.js"},
      {"name":"fontclock.font.vector50.js","url":"fontclock.font.vector50.js"}
    ]
  },
  {
    "id": "slidingtext",
    "name": "Sliding Clock",
    "version": "0.07",
    "description": "Inspired by the Pebble sliding clock, old times are scrolled off the screen and new times on. You are also able to change language on the fly so you can see the time written in other languages using button 1. Currently English, French, Japanese, Spanish and German are supported",
    "icon": "slidingtext.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "custom": "custom.html",
    "allow_emulator": false,
    "storage": [
      {"name":"slidingtext.app.js","url":"slidingtext.js"},
      {"name":"slidingtext.img","url":"slidingtext-icon.js","evaluate":true},
      {"name":"slidingtext.locale.en.js","url":"slidingtext.locale.en.js"},
      {"name":"slidingtext.locale.en2.js","url":"slidingtext.locale.en2.js"},
      {"name":"slidingtext.utils.en.js","url":"slidingtext.utils.en.js"},
      {"name":"slidingtext.locale.es.js","url":"slidingtext.locale.es.js"},
      {"name":"slidingtext.locale.fr.js","url":"slidingtext.locale.fr.js"},
      {"name":"slidingtext.locale.jp.js","url":"slidingtext.locale.jp.js"},
      {"name":"slidingtext.locale.de.js","url":"slidingtext.locale.de.js"},
      {"name":"slidingtext.dtfmt.js","url":"slidingtext.dtfmt.js"}
    ]
  },
  {
    "id": "solarclock",
    "name": "Solar Clock",
    "version": "0.02",
    "description": "Using your current or chosen location the solar watch face shows the Sun's sky position, time and date. Also allows you to wind backwards and forwards in time to see the sun's position",
    "icon": "solar_clock.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "custom": "custom.html",
    "allow_emulator": false,
    "storage": [
      {"name":"solarclock.app.js","url":"solar_clock.js"},
      {"name":"solarclock.img","url":"solar_clock-icon.js","evaluate":true},
      {"name":"solar_colors.js","url":"solar_colors.js"},
      {"name":"solar_controller.js","url":"solar_controller.js"},
      {"name":"solar_date_utils.js","url":"solar_date_utils.js"},
      {"name":"solar_graphic_utils.js","url":"solar_graphic_utils.js"},
      {"name":"solar_location.js","url":"solar_location.js"},
      {"name":"solar_math_utils.js","url":"solar_math_utils.js"},
      {"name":"solar_loc.Reykjavik.json","url":"solar_loc.Reykjavik.json"},
      {"name":"solar_loc.Hong_Kong.json","url":"solar_loc.Hong_Kong.json"},
      {"name":"solar_loc.Honolulu.json","url":"solar_loc.Honolulu.json"},
      {"name":"solar_loc.Rio.json","url":"solar_loc.Rio.json"},
      {"name":"solar_loc.Tokyo.json","url":"solar_loc.Tokyo.json"},
      {"name":"solar_loc.Seoul.json","url":"solar_loc.Seoul.json"}
    ]
  },
  {
    "id": "sweepclock",
    "name": "Sweep Clock",
    "version": "0.04",
    "description": "Smooth sweep secondhand with single hour numeral. Use button 1 to toggle the numeral font, button 3 to change the colour theme and button 4 to change the date placement",
    "icon": "sweepclock.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"sweepclock.app.js","url":"sweepclock.js"},
      {"name":"sweepclock.img","url":"sweepclock-icon.js","evaluate":true}
    ]
  },
  {
    "id": "matrixclock",
    "name": "Matrix Clock",
    "version": "0.02",
    "description": "inspired by The Matrix, a clock of the same style",
    "icon": "matrixclock.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"matrixclock.app.js","url":"matrixclock.js"},
      {"name":"matrixclock.img","url":"matrixclock-icon.js","evaluate":true}
    ]
  },
  {
    "id": "imgclock",
    "name": "Image background clock",
    "shortName": "Image Clock",
    "version": "0.08",
    "description": "A clock with an image as a background",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "custom": "custom.html",
    "storage": [
      {"name":"imgclock.app.js","url":"app.js"},
      {"name":"imgclock.img","url":"app-icon.js","evaluate":true},
      {"name":"imgclock.face.img"},
      {"name":"imgclock.face.json"},
      {"name":"imgclock.face.bg","content":""}
    ]
  },
  {
    "id": "impwclock",
    "name": "Imprecise Word Clock",
    "version": "0.03",
    "description": "Imprecise word clock for vacations, weekends, and those who never need accurate time.",
    "icon": "clock-impword.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"impwclock.app.js","url":"clock-impword.js"},
      {"name":"impwclock.img","url":"clock-impword-icon.js","evaluate":true}
    ]
  },
  {
    "id": "aclock",
    "name": "Analog Clock",
    "version": "0.15",
    "description": "An Analog Clock",
    "icon": "clock-analog.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"aclock.app.js","url":"clock-analog.js"},
      {"name":"aclock.img","url":"clock-analog-icon.js","evaluate":true}
    ]
  },
  {
    "id": "clock2x3",
    "name": "2x3 Pixel Clock",
    "version": "0.05",
    "description": "This is a simple clock using minimalist 2x3 pixel numerical digits",
    "icon": "clock2x3.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"clock2x3.app.js","url":"clock2x3-app.js"},
      {"name":"clock2x3.img","url":"clock2x3-icon.js","evaluate":true}
    ]
  },
  {
    "id": "geissclk",
    "name": "Geiss Clock",
    "version": "0.03",
    "description": "7 segment clock with animated background in the style of Ryan Geiss' music visualisation. NOTE: The first run will take ~1 minute to do some precalculation",
    "icon": "clock.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"geissclk.app.js","url":"clock.js"},
      {"name":"geissclk.precompute.js","url":"precompute.js"},
      {"name":"geissclk.img","url":"clock-icon.js","evaluate":true}
    ],
    "data": [{"name":"geissclk.0.map"},{"name":"geissclk.1.map"},{"name":"geissclk.2.map"},{"name":"geissclk.3.map"},{"name":"geissclk.4.map"},{"name":"geissclk.5.map"},{"name":"geissclk.0.pal"},{"name":"geissclk.1.pal"},{"name":"geissclk.2.pal"}]
  },
  {
    "id": "trex",
    "name": "T-Rex",
    "version": "0.04",
    "description": "T-Rex game in the style of Chrome's offline game",
    "icon": "trex.png",
    "tags": "game",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"trex.app.js","url":"trex.js"},
      {"name":"trex.img","url":"trex-icon.js","evaluate":true},
      {"name":"trex.settings.js","url":"settings.js"}
    ],
    "data": [{"name":"trex.score","storageFile":true}]
  },
  {
    "id": "astroid",
    "name": "Asteroids!",
    "version": "0.03",
    "description": "Retro asteroids game",
    "icon": "asteroids.png",
    "tags": "game",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"astroid.app.js","url":"asteroids.js"},
      {"name":"astroid.img","url":"asteroids-icon.js","evaluate":true}
    ]
  },
  {
    "id": "clickms",
    "name": "Click Master",
    "version": "0.01",
    "description": "Get several friends to start the game, then compete to see who can press BTN1 the most!",
    "icon": "click-master.png",
    "tags": "game",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"clickms.app.js","url":"click-master.js"},
      {"name":"clickms.img","url":"click-master-icon.js","evaluate":true}
    ]
  },
  {
    "id": "horsey",
    "name": "Horse Race!",
    "version": "0.01",
    "description": "Get several friends to start the game, then compete to see who can press BTN1 the most!",
    "icon": "horse-race.png",
    "tags": "game",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"horsey.app.js","url":"horse-race.js"},
      {"name":"horsey.img","url":"horse-race-icon.js","evaluate":true}
    ]
  },
  {
    "id": "compass",
    "name": "Compass",
    "version": "0.03",
    "description": "Simple compass that points North",
    "icon": "compass.png",
    "tags": "tool,outdoors",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"compass.app.js","url":"compass.js"},
      {"name":"compass.img","url":"compass-icon.js","evaluate":true}
    ]
  },
  {
    "id": "gpstime",
    "name": "GPS Time",
    "version": "0.05",
    "description": "Update the Bangle.js's clock based on the time from the GPS receiver",
    "icon": "gpstime.png",
    "tags": "tool,gps",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "storage": [
      {"name":"gpstime.app.js","url":"gpstime.js"},
      {"name":"gpstime.img","url":"gpstime-icon.js","evaluate":true}
    ]
  },
  {
    "id": "openloc",
    "name": "Open Location / Plus Codes",
    "shortName": "Open Location",
    "version": "0.01",
    "description": "Convert your current GPS location to a series of characters",
    "icon": "app.png",
    "tags": "tool,outdoors,gps",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"openloc.app.js","url":"app.js"},
      {"name":"openloc.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "speedo",
    "name": "Speedo",
    "version": "0.05",
    "description": "Show the current speed according to the GPS",
    "icon": "speedo.png",
    "tags": "tool,outdoors,gps",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "storage": [
      {"name":"speedo.app.js","url":"speedo.js"},
      {"name":"speedo.img","url":"speedo-icon.js","evaluate":true}
    ]
  },
  {
    "id": "gpsrec",
    "name": "GPS Recorder",
    "version": "0.24",
    "description": "Application that allows you to record a GPS track. Can run in background",
    "icon": "app.png",
    "tags": "tool,outdoors,gps,widget",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "interface": "interface.html",
    "storage": [
      {"name":"gpsrec.app.js","url":"app.js"},
      {"name":"gpsrec.img","url":"app-icon.js","evaluate":true},
      {"name":"gpsrec.wid.js","url":"widget.js"},
      {"name":"gpsrec.settings.js","url":"settings.js"}
    ],
    "data": [{"name":"gpsrec.json"},{"wildcard":".gpsrc?","storageFile":true}]
  },
  {
    "id": "gpsnav",
    "name": "GPS Navigation",
    "version": "0.05",
    "description": "Displays GPS Course and Speed, + Directions to waypoint and waypoint recording, now with waypoint editor",
    "icon": "icon.png",
    "tags": "tool,outdoors,gps",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "interface": "waypoints.html",
    "storage": [
      {"name":"gpsnav.app.js","url":"app.min.js"},
      {"name":"gpsnav.img","url":"app-icon.js","evaluate":true}
    ],
    "data": [{"name":"waypoints.json","url":"waypoints.json"}]
  },
  {
    "id": "heart",
    "name": "Heart Rate Recorder",
    "version": "0.06",
    "description": "Application that allows you to record your heart rate. Can run in background",
    "icon": "app.png",
    "tags": "tool,health,widget",
    "supports": ["BANGLEJS"],
    "interface": "interface.html",
    "storage": [
      {"name":"heart.app.js","url":"app.js"},
      {"name":"heart.img","url":"app-icon.js","evaluate":true},
      {"name":"heart.wid.js","url":"widget.js"}
    ],
    "data": [{"name":"heart.json"},{"wildcard":".heart?","storageFile":true}]
  },
  {
    "id": "slevel",
    "name": "Spirit Level",
    "version": "0.01",
    "description": "Show the current angle of the watch, so you can use it to make sure something is absolutely flat",
    "icon": "spiritlevel.png",
    "tags": "tool",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"slevel.app.js","url":"spiritlevel.js"},
      {"name":"slevel.img","url":"spiritlevel-icon.js","evaluate":true}
    ]
  },
  {
    "id": "files",
    "name": "App Manager",
    "version": "0.07",
    "description": "Show currently installed apps, free space, and allow their deletion from the watch",
    "icon": "files.png",
    "tags": "tool,system,files",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"files.app.js","url":"files.js"},
      {"name":"files.img","url":"files-icon.js","evaluate":true}
    ]
  },
  {
    "id": "weather",
    "name": "Weather",
    "version": "0.10",
    "description": "Show Gadgetbridge weather report",
    "icon": "icon.png",
    "tags": "widget,outdoors",
    "supports": ["BANGLEJS"],
    "readme": "readme.md",
    "storage": [
      {"name":"weather.app.js","url":"app.js"},
      {"name":"weather.wid.js","url":"widget.js"},
      {"name":"weather","url":"lib.js"},
      {"name":"weather.img","url":"icon.js","evaluate":true},
      {"name":"weather.settings.js","url":"settings.js"}
    ],
    "data": [{"name":"weather.json"}]
  },
  {
    "id": "chargeanim",
    "name": "Charge Animation",
    "version": "0.01",
    "description": "When charging, show a sideways charging animation and keep the screen on. When removed from the charger load the clock again.",
    "icon": "icon.png",
    "tags": "battery",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"chargeanim.app.js","url":"app.js"},
      {"name":"chargeanim.boot.js","url":"boot.js"},
      {"name":"chargeanim.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "bluetoothdock",
    "name": "Bluetooth Dock",
    "shortName": "Dock",
    "version": "0.01",
    "description": "When charging shows the time, scans Bluetooth for known devices (eg temperature) and shows them on the screen",
    "icon": "app.png",
    "tags": "bluetooth",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"bluetoothdock.app.js","url":"app.js"},
      {"name":"bluetoothdock.boot.js","url":"boot.js"},
      {"name":"bluetoothdock.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "widbat",
    "name": "Battery Level Widget",
    "version": "0.08",
    "description": "Show the current battery level and charging status in the top right of the clock",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget,battery",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "storage": [
      {"name":"widbat.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "widlock",
    "name": "Lock Widget",
    "version": "0.03",
    "description": "On devices with always-on display (Bangle.js 2) this displays lock icon whenever the display is locked",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget,lock",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "storage": [
      {"name":"widlock.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "widbatpc",
    "name": "Battery Level Widget (with percentage)",
    "shortName": "Battery Widget",
    "version": "0.13",
    "description": "Show the current battery level and charging status in the top right of the clock, with charge percentage",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget,battery",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "readme": "README.md",
    "storage": [
      {"name":"widbatpc.wid.js","url":"widget.js"},
      {"name":"widbatpc.settings.js","url":"settings.js"}
    ],
    "data": [{"name":"widbatpc.json"}]
  },
  {
    "id": "widbatwarn",
    "name": "Battery Warning",
    "shortName": "Battery Warning",
    "version": "0.02",
    "description": "Show a warning when the battery runs low.",
    "icon": "widget.png",
    "type": "widget",
    "tags": "tool,battery",
    "supports": ["BANGLEJS"],
    "dependencies": {"notify":"type"},
    "readme": "README.md",
    "storage": [
      {"name":"widbatwarn.wid.js","url":"widget.js"},
      {"name":"widbatwarn.settings.js","url":"settings.js"}
    ],
    "data": [{"name":"widbatwarn.json"}]
  },
  {
    "id": "widbt",
    "name": "Bluetooth Widget",
    "version": "0.06",
    "description": "Show the current Bluetooth connection status in the top right of the clock",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget,bluetooth",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "storage": [
      {"name":"widbt.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "widchime",
    "name": "Hour Chime",
    "version": "0.02",
    "description": "Buzz or beep on every whole hour.",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"widchime.wid.js","url":"widget.js"},
      {"name":"widchime.settings.js","url":"settings.js"}
    ],
    "data": [{"name":"widchime.json"}]
  },
  {
    "id": "widram",
    "name": "RAM Widget",
    "shortName": "RAM Widget",
    "version": "0.01",
    "description": "Display your Bangle's available RAM percentage in a widget",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"widram.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "hrm",
    "name": "Heart Rate Monitor",
    "version": "0.05",
    "description": "Measure your heart rate and see live sensor data",
    "icon": "heartrate.png",
    "tags": "health",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"hrm.app.js","url":"heartrate.js"},
      {"name":"hrm.img","url":"heartrate-icon.js","evaluate":true}
    ]
  },
  {
    "id": "widhrm",
    "name": "Simple Heart Rate widget",
    "version": "0.04",
    "description": "When the screen is on, the widget turns on the heart rate monitor and displays the current heart rate (or last known in grey). For this to work well you'll need at least a 15 second LCD Timeout.",
    "icon": "widget.png",
    "type": "widget",
    "tags": "health,widget",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"widhrm.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "stetho",
    "name": "Stethoscope",
    "version": "0.01",
    "description": "Hear your heart rate",
    "icon": "stetho.png",
    "tags": "health",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"stetho.app.js","url":"stetho.js"},
      {"name":"stetho.img","url":"stetho-icon.js","evaluate":true}
    ]
  },
  {
    "id": "swatch",
    "name": "Stopwatch",
    "version": "0.07",
    "description": "Simple stopwatch with Lap Time logging to a JSON file",
    "icon": "stopwatch.png",
    "tags": "health",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "interface": "interface.html",
    "allow_emulator": true,
    "storage": [
      {"name":"swatch.app.js","url":"stopwatch.js"},
      {"name":"swatch.img","url":"stopwatch-icon.js","evaluate":true}
    ]
  },
  {
    "id": "hidmsic",
    "name": "Bluetooth Music Controls",
    "shortName": "Music Control",
    "version": "0.02",
    "description": "Enable HID in settings, pair with your phone, then use this app to control music from your watch!",
    "icon": "hid-music.png",
    "tags": "bluetooth",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"hidmsic.app.js","url":"hid-music.js"},
      {"name":"hidmsic.img","url":"hid-music-icon.js","evaluate":true}
    ]
  },
  {
    "id": "hidkbd",
    "name": "Bluetooth Keyboard",
    "shortName": "Bluetooth Kbd",
    "version": "0.02",
    "description": "Enable HID in settings, pair with your phone/PC, then use this app to control other apps",
    "icon": "hid-keyboard.png",
    "tags": "bluetooth",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"hidkbd.app.js","url":"hid-keyboard.js"},
      {"name":"hidkbd.img","url":"hid-keyboard-icon.js","evaluate":true}
    ]
  },
  {
    "id": "hidbkbd",
    "name": "Binary Bluetooth Keyboard",
    "shortName": "Binary BT Kbd",
    "version": "0.02",
    "description": "Enable HID in settings, pair with your phone/PC, then type messages using the onscreen keyboard by tapping repeatedly on the key you want",
    "icon": "hid-binary-keyboard.png",
    "tags": "bluetooth",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"hidbkbd.app.js","url":"hid-binary-keyboard.js"},
      {"name":"hidbkbd.img","url":"hid-binary-keyboard-icon.js","evaluate":true}
    ]
  },
  {
    "id": "animals",
    "name": "Animals Game",
    "version": "0.01",
    "description": "Simple toddler's game - displays a different number of animals each time the screen is pressed",
    "icon": "animals.png",
    "tags": "game",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"animals.app.js","url":"animals.js"},
      {"name":"animals.img","url":"animals-icon.js","evaluate":true},
      {"name":"animals-snake.img","url":"animals-snake.js","evaluate":true},
      {"name":"animals-duck.img","url":"animals-duck.js","evaluate":true},
      {"name":"animals-swan.img","url":"animals-swan.js","evaluate":true},
      {"name":"animals-fox.img","url":"animals-fox.js","evaluate":true},
      {"name":"animals-camel.img","url":"animals-camel.js","evaluate":true},
      {"name":"animals-pig.img","url":"animals-pig.js","evaluate":true},
      {"name":"animals-sheep.img","url":"animals-sheep.js","evaluate":true},
      {"name":"animals-mouse.img","url":"animals-mouse.js","evaluate":true}
    ]
  },
  {
    "id": "qrcode",
    "name": "Custom QR Code",
    "version": "0.02",
    "description": "Use this to upload a customised QR code to Bangle.js",
    "icon": "app.png",
    "tags": "qrcode",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "custom": "custom.html",
    "customConnect": true,
    "storage": [
      {"name":"qrcode.app.js"},
      {"name":"qrcode.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "beer",
    "name": "Beer Compass",
    "version": "0.01",
    "description": "Uploads all the pubs in an area onto your watch, so it can always point you at the nearest one",
    "icon": "app.png",
    "tags": "",
    "supports": ["BANGLEJS"],
    "custom": "custom.html",
    "storage": [
      {"name":"beer.app.js"},
      {"name":"beer.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "route",
    "name": "Route Viewer",
    "version": "0.02",
    "description": "Upload a KML file of a route, and have your watch display a map with how far around it you are",
    "icon": "app.png",
    "tags": "",
    "supports": ["BANGLEJS"],
    "custom": "custom.html",
    "storage": [
      {"name":"route.app.js"},
      {"name":"route.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "ncstart",
    "name": "NCEU Startup",
    "version": "0.06",
    "description": "NodeConfEU 2019 'First Start' Sequence",
    "icon": "start.png",
    "tags": "start,welcome",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"ncstart.app.js","url":"start.js"},
      {"name":"ncstart.boot.js","url":"boot.js"},
      {"name":"ncstart.settings.js","url":"settings.js"},
      {"name":"ncstart.img","url":"start-icon.js","evaluate":true},
      {"name":"nc-bangle.img","url":"start-bangle.js","evaluate":true},
      {"name":"nc-nceu.img","url":"start-nceu.js","evaluate":true},
      {"name":"nc-nfr.img","url":"start-nfr.js","evaluate":true},
      {"name":"nc-nodew.img","url":"start-nodew.js","evaluate":true},
      {"name":"nc-tf.img","url":"start-tf.js","evaluate":true}
    ],
    "data": [{"name":"ncstart.json"}]
  },
  {
    "id": "ncfrun",
    "name": "NCEU 5K Fun Run",
    "version": "0.01",
    "description": "Display a map of the NodeConf EU 2019 5K Fun Run route and your location on it",
    "icon": "nceu-funrun.png",
    "tags": "health",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"ncfrun.app.js","url":"nceu-funrun.js"},
      {"name":"ncfrun.img","url":"nceu-funrun-icon.js","evaluate":true}
    ]
  },
  {
    "id": "widnceu",
    "name": "NCEU Logo Widget",
    "version": "0.02",
    "description": "Show the NodeConf EU logo in the top left",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"widnceu.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "sclock",
    "name": "Simple Clock",
    "version": "0.07",
    "description": "A Simple Digital Clock",
    "icon": "clock-simple.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"sclock.app.js","url":"clock-simple.js"},
      {"name":"sclock.img","url":"clock-simple-icon.js","evaluate":true}
    ]
  },
  {
    "id": "s7clk",
    "name": "Simple 7 segment Clock",
    "version": "0.03",
    "description": "A simple 7 segment Clock with date",
    "icon": "icon.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"s7clk.app.js","url":"app.js"},
      {"name":"s7clk.img","url":"icon.js","evaluate":true}
    ]
  },
  {
    "id": "vibrclock",
    "name": "Vibrate Clock",
    "version": "0.03",
    "description": "When BTN1 is pressed, vibrate out the time as a series of buzzes, one digit at a time. Hours, then Minutes. Zero is signified by one long buzz. Otherwise a simple digital clock.",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"vibrclock.app.js","url":"app.js"},
      {"name":"vibrclock.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "svclock",
    "name": "Simple V-Clock",
    "version": "0.04",
    "description": "Modification of Simple Clock 0.04 to use Vectorfont",
    "icon": "vclock-simple.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"svclock.app.js","url":"vclock-simple.js"},
      {"name":"svclock.img","url":"vclock-simple-icon.js","evaluate":true}
    ]
  },
  {
    "id": "dclock",
    "name": "Dev Clock",
    "version": "0.10",
    "description": "A Digital Clock including timestamp (tst), beats(@), days in current month (dm) and days since new moon (l)",
    "icon": "clock-dev.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"dclock.app.js","url":"clock-dev.js"},
      {"name":"dclock.img","url":"clock-dev-icon.js","evaluate":true}
    ]
  },
  {
    "id": "gesture",
    "name": "Gesture Test",
    "version": "0.01",
    "description": "BETA! Uploads a basic Tensorflow Gesture model, and then outputs each gesture as a message",
    "icon": "gesture.png",
    "type": "app",
    "tags": "gesture,ai",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"gesture.app.js","url":"gesture.js"},
      {"name":".tfnames","url":"gesture-tfnames.js","evaluate":true},
      {"name":".tfmodel","url":"gesture-tfmodel.js","evaluate":true},
      {"name":"gesture.img","url":"gesture-icon.js","evaluate":true}
    ]
  },
  {
    "id": "pparrot",
    "name": "Party Parrot",
    "version": "0.01",
    "description": "Party with a parrot on your wrist",
    "icon": "party-parrot.png",
    "type": "app",
    "tags": "party,parrot,lol",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"pparrot.app.js","url":"party-parrot.js"},
      {"name":"pparrot.img","url":"party-parrot-icon.js","evaluate":true}
    ]
  },
  {
    "id": "hrings",
    "name": "Hypno Rings",
    "version": "0.01",
    "description": "Experiment with trippy rings, press buttons for change",
    "icon": "hypno-rings.png",
    "type": "app",
    "tags": "rings,hypnosis,psychadelic",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"hrings.app.js","url":"hypno-rings.js"},
      {"name":"hrings.img","url":"hypno-rings-icon.js","evaluate":true}
    ]
  },
  {
    "id": "morse",
    "name": "Morse Code",
    "version": "0.01",
    "description": "Learn morse code by hearing/seeing/feeling the code. Tap to toggle buzz!",
    "icon": "morse-code.png",
    "type": "app",
    "tags": "morse,sound,visual,input",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"morse.app.js","url":"morse-code.js"},
      {"name":"morse.img","url":"morse-code-icon.js","evaluate":true}
    ]
  },
  {
    "id": "blescan",
    "name": "BLE Scanner",
    "version": "0.01",
    "description": "Scan for advertising BLE devices",
    "icon": "blescan.png",
    "tags": "bluetooth",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"blescan.app.js","url":"blescan.js"},
      {"name":"blescan.img","url":"blescan-icon.js","evaluate":true}
    ]
  },
  {
    "id": "mmonday",
    "name": "Manic Monday Tone",
    "version": "0.02",
    "description": "The Bangles make a comeback",
    "icon": "manic-monday-icon.png",
    "tags": "sound",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"mmonday.app.js","url":"manic-monday.js"},
      {"name":"mmonday.img","url":"manic-monday-icon.js","evaluate":true}
    ]
  },
  {
    "id": "jbells",
    "name": "Jingle Bells",
    "version": "0.01",
    "description": "Play Jingle Bells",
    "icon": "jbells.png",
    "type": "app",
    "tags": "sound",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"jbells.app.js","url":"jbells.js"},
      {"name":"jbells.img","url":"jbells-icon.js","evaluate":true}
    ]
  },
  {
    "id": "scolor",
    "name": "Show Color",
    "version": "0.01",
    "description": "Display all available Colors and Names",
    "icon": "show-color.png",
    "type": "app",
    "tags": "tool",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"scolor.app.js","url":"show-color.js"},
      {"name":"scolor.img","url":"show-color-icon.js","evaluate":true}
    ]
  },
  {
    "id": "miclock",
    "name": "Mixed Clock",
    "version": "0.05",
    "description": "A mix of analog and digital Clock",
    "icon": "clock-mixed.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"miclock.app.js","url":"clock-mixed.js"},
      {"name":"miclock.img","url":"clock-mixed-icon.js","evaluate":true}
    ]
  },
  {
    "id": "bclock",
    "name": "Binary Clock",
    "version": "0.03",
    "description": "A simple binary clock watch face",
    "icon": "clock-binary.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"bclock.app.js","url":"clock-binary.js"},
      {"name":"bclock.img","url":"clock-binary-icon.js","evaluate":true}
    ]
  },
  {
    "id": "clotris",
    "name": "Clock-Tris",
    "version": "0.01",
    "description": "A fully functional clone of a classic game of falling blocks",
    "icon": "clock-tris.png",
    "tags": "game",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"clotris.app.js","url":"clock-tris.js"},
      {"name":"clotris.img","url":"clock-tris-icon.js","evaluate":true},
      {"name":".trishig","url":"clock-tris-high"}
    ]
  },
  {
    "id": "flappy",
    "name": "Flappy Bird",
    "version": "0.05",
    "description": "A Flappy Bird game clone",
    "icon": "app.png",
    "tags": "game",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"flappy.app.js","url":"app.js"},
      {"name":"flappy.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "gpsinfo",
    "name": "GPS Info",
    "version": "0.05",
    "description": "An application that displays information about altitude, lat/lon, satellites and time",
    "icon": "gps-info.png",
    "type": "app",
    "tags": "gps",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "storage": [
      {"name":"gpsinfo.app.js","url":"gps-info.js"},
      {"name":"gpsinfo.img","url":"gps-info-icon.js","evaluate":true}
    ]
  },
  {
    "id": "assistedgps",
    "name": "Assisted GPS Update (AGPS)",
    "version": "0.01",
    "description": "Downloads assisted GPS (AGPS) data to Bangle.js for faster GPS startup and more accurate fixes. **No app will be installed**, this just uploads new data to the GPS chip.",
    "icon": "app.png",
    "type": "RAM",
    "tags": "tool,outdoors,agps",
    "supports": ["BANGLEJS"],
    "custom": "custom.html",
    "storage": [

    ]
  },
  {
    "id": "pomodo",
    "name": "Pomodoro",
    "version": "0.01",
    "description": "A simple pomodoro timer.",
    "icon": "pomodoro.png",
    "type": "app",
    "tags": "pomodoro,cooking,tools",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"pomodo.app.js","url":"pomodoro.js"},
      {"name":"pomodo.img","url":"pomodoro-icon.js","evaluate":true}
    ]
  },
  {
    "id": "blobclk",
    "name": "Large Digit Blob Clock",
    "shortName": "Blob Clock",
    "version": "0.06",
    "description": "A clock with big digits",
    "icon": "clock-blob.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"blobclk.app.js","url":"clock-blob.js"},
      {"name":"blobclk.img","url":"clock-blob-icon.js","evaluate":true}
    ]
  },
  {
    "id": "boldclk",
    "name": "Bold Clock",
    "version": "0.05",
    "description": "Simple, readable and practical clock",
    "icon": "bold_clock.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"boldclk.app.js","url":"bold_clock.js"},
      {"name":"boldclk.img","url":"bold_clock-icon.js","evaluate":true}
    ]
  },
  {
    "id": "widclk",
    "name": "Digital clock widget",
    "version": "0.06",
    "description": "A simple digital clock widget",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget,clock",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"widclk.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "widpedom",
    "name": "Pedometer widget",
    "version": "0.19",
    "description": "Daily pedometer widget",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "storage": [
      {"name":"widpedom.wid.js","url":"widget.js"},
      {"name":"widpedom.settings.js","url":"settings.js"}
    ]
  },
  {
    "id": "berlinc",
    "name": "Berlin Clock",
    "version": "0.05",
    "description": "Berlin Clock (see https://en.wikipedia.org/wiki/Mengenlehreuhr)",
    "icon": "berlin-clock.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"berlinc.app.js","url":"berlin-clock.js"},
      {"name":"berlinc.img","url":"berlin-clock-icon.js","evaluate":true}
    ]
  },
  {
    "id": "ctrclk",
    "name": "Centerclock",
    "version": "0.03",
    "description": "Watch-centered digital 24h clock with date in dd.mm.yyyy format.",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"ctrclk.app.js","url":"app.js"},
      {"name":"ctrclk.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "demoapp",
    "name": "Demo Loop",
    "version": "0.02",
    "description": "Simple demo app - displays Bangle.js, JS logo, graphics, and Bangle.js information",
    "icon": "app.png",
    "type": "app",
    "tags": "",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"demoapp.app.js","url":"app.js"},
      {"name":"demoapp.img","url":"app-icon.js","evaluate":true}
    ],
    "sortorder": -9
  },
  {
    "id": "flagrse",
    "name": "Espruino Flag Raiser",
    "version": "0.01",
    "description": "App to send a command to another Espruino to cause it to raise a flag",
    "icon": "app.png",
    "tags": "",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"flagrse.app.js","url":"app.js"},
      {"name":"flagrse.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "pipboy",
    "name": "Pipboy",
    "version": "0.04",
    "description": "Pipboy themed clock",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"pipboy.app.js","url":"app.js"},
      {"name":"pipboy.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "torch",
    "name": "Torch",
    "shortName": "Torch",
    "version": "0.02",
    "description": "Turns screen white to help you see in the dark. Select from the launcher or press BTN1,BTN3,BTN1,BTN3 quickly to start when in any app that shows widgets",
    "icon": "app.png",
    "tags": "tool,torch",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"torch.app.js","url":"app.js"},
      {"name":"torch.wid.js","url":"widget.js"},
      {"name":"torch.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "rtorch",
    "name": "Red Torch",
    "shortName": "RedTorch",
    "version": "0.01",
    "description": "Turns screen RED to help you see in the dark without breaking your night vision. Select from the launcher or press BTN3,BTN1,BTN3,BTN1 quickly to start when in any app that shows widgets",
    "icon": "app.png",
    "tags": "tool,torch",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"rtorch.app.js","url":"app.js"},
      {"name":"rtorch.wid.js","url":"widget.js"},
      {"name":"rtorch.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "wohrm",
    "name": "Workout HRM",
    "version": "0.08",
    "description": "Workout heart rate monitor notifies you with a buzz if your heart rate goes above or below the set limits.",
    "icon": "app.png",
    "type": "app",
    "tags": "hrm,workout",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"wohrm.app.js","url":"app.js"},
      {"name":"wohrm.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "widid",
    "name": "Bluetooth ID Widget",
    "version": "0.03",
    "description": "Display the last two tuple of your Bangle.js MAC address in the widget section. This is useful for figuring out which Bangle.js to connect to if you have more than one Bangle.js!",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget,address,mac",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "storage": [
      {"name":"widid.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "grocery",
    "name": "Grocery",
    "version": "0.02",
    "description": "Simple grocery (shopping) list - Display a list of product and track if you already put them in your cart.",
    "icon": "grocery.png",
    "type": "app",
    "tags": "tool,outdoors,shopping,list",
    "supports": ["BANGLEJS"],
    "custom": "grocery.html",
    "storage": [
      {"name":"grocery.app.js","url":"app.js"},
      {"name":"grocery.img","url":"grocery-icon.js","evaluate":true}
    ]
  },
  {
    "id": "marioclock",
    "name": "Mario Clock",
    "version": "0.15",
    "description": "Animated retro Mario clock, with Gameboy style 8-bit grey-scale graphics.",
    "icon": "marioclock.png",
    "type": "clock",
    "tags": "clock,mario,retro",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": false,
    "storage": [
      {"name":"marioclock.app.js","url":"marioclock-app.js"},
      {"name":"marioclock.img","url":"marioclock-icon.js","evaluate":true}
    ]
  },
  {
    "id": "cliock",
    "name": "Commandline-Clock",
    "shortName": "CLI-Clock",
    "version": "0.14",
    "description": "Simple CLI-Styled Clock",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock,cli,command,bash,shell",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"cliock.app.js","url":"app.js"},
      {"name":"cliock.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "widver",
    "name": "Firmware Version Widget",
    "version": "0.01",
    "description": "Display the version of the installed firmware in the top widget section.",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget,tool,system",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"widver.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "barclock",
    "name": "Bar Clock",
    "version": "0.08",
    "description": "A simple digital clock showing seconds as a bar",
    "icon": "clock-bar.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"barclock.app.js","url":"clock-bar.js"},
      {"name":"barclock.img","url":"clock-bar-icon.js","evaluate":true}
    ]
  },
  {
    "id": "dotclock",
    "name": "Dot Clock",
    "version": "0.03",
    "description": "A Minimal Dot Analog Clock",
    "icon": "clock-dot.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"dotclock.app.js","url":"clock-dot.js"},
      {"name":"dotclock.img","url":"clock-dot-icon.js","evaluate":true}
    ]
  },
  {
    "id": "widtbat",
    "name": "Tiny Battery Widget",
    "version": "0.01",
    "description": "Tiny blueish battery widget, vibs and changes level color when charging",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget,tool,system",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"widtbat.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "chrono",
    "name": "Chrono",
    "shortName": "Chrono",
    "version": "0.01",
    "description": "Single click BTN1 to add 5 minutes. Single click BTN2 to add 30 seconds. Single click BTN3 to add 5 seconds. Tap to pause or play to timer. Double click BTN1 to reset. When timer finishes the watch vibrates.",
    "icon": "chrono.png",
    "tags": "tool",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"chrono.app.js","url":"chrono.js"},
      {"name":"chrono.img","url":"chrono-icon.js","evaluate":true}
    ]
  },
  {
    "id": "astrocalc",
    "name": "Astrocalc",
    "version": "0.02",
    "description": "Calculates interesting information on the sun and moon cycles for the current day based on your location.",
    "icon": "astrocalc.png",
    "tags": "app,sun,moon,cycles,tool,outdoors",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"astrocalc.app.js","url":"astrocalc-app.js"},
      {"name":"suncalc.js","url":"suncalc.js"},
      {"name":"astrocalc.img","url":"astrocalc-icon.js","evaluate":true},
      {"name":"first-quarter.img","url":"first-quarter-icon.js","evaluate":true},
      {"name":"last-quarter.img","url":"last-quarter-icon.js","evaluate":true},
      {"name":"waning-crescent.img","url":"waning-crescent-icon.js","evaluate":true},
      {"name":"waning-gibbous.img","url":"waning-gibbous-icon.js","evaluate":true},
      {"name":"full.img","url":"full-icon.js","evaluate":true},
      {"name":"new.img","url":"new-icon.js","evaluate":true},
      {"name":"waxing-gibbous.img","url":"waxing-gibbous-icon.js","evaluate":true},
      {"name":"waxing-crescent.img","url":"waxing-crescent-icon.js","evaluate":true}
    ]
  },
  {
    "id": "widhwt",
    "name": "Hand Wash Timer",
    "version": "0.01",
    "description": "Swipe your wrist over the watch face to start your personal Bangle.js hand wash timer for 35 sec. Start washing after the short buzz and stop after the long buzz.",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget,tool",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"widhwt.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "toucher",
    "name": "Touch Launcher",
    "shortName": "Toucher",
    "version": "0.07",
    "description": "Touch enable left to right launcher.",
    "icon": "app.png",
    "type": "launch",
    "tags": "tool,system,launcher",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "readme": "README.md",
    "storage": [
      {"name":"toucher.app.js","url":"app.js"},
      {"name":"toucher.settings.js","url":"settings.js"}
    ],
    "data": [{"name":"toucher.json"}],
    "sortorder": -10
  },
  {
    "id": "balltastic",
    "name": "Balltastic",
    "version": "0.02",
    "description": "Simple but fun ball eats dots game.",
    "icon": "app.png",
    "type": "app",
    "tags": "game,fun",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"balltastic.app.js","url":"app.js"},
      {"name":"balltastic.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "rpgdice",
    "name": "RPG dice",
    "version": "0.02",
    "description": "Simple RPG dice rolling app.",
    "icon": "rpgdice.png",
    "type": "app",
    "tags": "game,fun",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"rpgdice.app.js","url":"app.js"},
      {"name":"rpgdice.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "widmp",
    "name": "Moon Phase Widget",
    "version": "0.01",
    "description": "Display the current moon phase in blueish for the northern hemisphere in eight phases",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget,tools",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"widmp.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "minionclk",
    "name": "Minion clock",
    "version": "0.05",
    "description": "Minion themed clock.",
    "icon": "minionclk.png",
    "type": "clock",
    "tags": "clock,minion",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"minionclk.app.js","url":"app.js"},
      {"name":"minionclk.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "openstmap",
    "name": "OpenStreetMap",
    "shortName": "OpenStMap",
    "version": "0.09",
    "description": "[BETA] Loads map tiles from OpenStreetMap onto your Bangle.js and displays a map of where you are",
    "icon": "app.png",
    "tags": "outdoors,gps",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "custom": "custom.html",
    "customConnect": true,
    "storage": [
      {"name":"openstmap","url":"openstmap.js"},
      {"name":"openstmap.app.js","url":"app.js"},
      {"name":"openstmap.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "activepedom",
    "name": "Active Pedometer",
    "shortName": "Active Pedometer",
    "version": "0.09",
    "description": "Pedometer that filters out arm movement and displays a step goal progress. Steps are saved to a daily file and can be viewed as graph.",
    "icon": "app.png",
    "tags": "outdoors,widget",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"activepedom.wid.js","url":"widget.js"},
      {"name":"activepedom.settings.js","url":"settings.js"},
      {"name":"activepedom.img","url":"app-icon.js","evaluate":true},
      {"name":"activepedom.app.js","url":"app.js"}
    ]
  },
  {
    "id": "chronowid",
    "name": "Chrono Widget",
    "shortName": "Chrono Widget",
    "version": "0.03",
    "description": "Chronometer (timer) which runs as widget.",
    "icon": "app.png",
    "tags": "tool,widget",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "readme": "README.md",
    "storage": [
      {"name":"chronowid.wid.js","url":"widget.js"},
      {"name":"chronowid.app.js","url":"app.js"},
      {"name":"chronowid.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "tabata",
    "name": "Tabata",
    "shortName": "Tabata - Control High-Intensity Interval Training",
    "version": "0.01",
    "description": "Control high-intensity interval training (according to tabata: https://en.wikipedia.org/wiki/Tabata_method).",
    "icon": "tabata.png",
    "tags": "workout,health",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"tabata.app.js","url":"tabata.js"},
      {"name":"tabata.img","url":"tabata-icon.js","evaluate":true}
    ]
  },
  {
    "id": "custom",
    "name": "Custom Boot Code ",
    "version": "0.01",
    "description": "Add code you want to run at boot time",
    "icon": "custom.png",
    "type": "bootloader",
    "tags": "tool,system",
    "supports": ["BANGLEJS"],
    "custom": "custom.html",
    "storage": [
      {"name":"custom"}
    ]
  },
  {
    "id": "devstopwatch",
    "name": "Dev Stopwatch",
    "shortName": "Dev Stopwatch",
    "version": "0.03",
    "description": "Stopwatch with 5 laps supported (cyclically replaced)",
    "icon": "app.png",
    "tags": "stopwatch,chrono,timer,chronometer",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"devstopwatch.app.js","url":"app.js"},
      {"name":"devstopwatch.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "batchart",
    "name": "Battery Chart",
    "shortName": "Battery Chart",
    "version": "0.10",
    "description": "A widget and an app for recording and visualizing battery percentage over time.",
    "icon": "app.png",
    "tags": "app,widget,battery,time,record,chart,tool",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"batchart.wid.js","url":"widget.js"},
      {"name":"batchart.app.js","url":"app.js"},
      {"name":"batchart.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "nato",
    "name": "NATO Alphabet",
    "shortName": "NATOAlphabet",
    "version": "0.01",
    "description": "Learn the NATO Phonetic alphabet plus some numbers.",
    "icon": "nato.png",
    "type": "app",
    "tags": "app,learn,visual",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"nato.app.js","url":"nato.js"},
      {"name":"nato.img","url":"nato-icon.js","evaluate":true}
    ]
  },
  {
    "id": "numerals",
    "name": "Numerals Clock",
    "shortName": "Numerals Clock",
    "version": "0.09",
    "description": "A simple big numerals clock",
    "icon": "numerals.png",
    "type": "clock",
    "tags": "numerals,clock",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"numerals.app.js","url":"numerals.app.js"},
      {"name":"numerals.img","url":"numerals-icon.js","evaluate":true},
      {"name":"numerals.settings.js","url":"numerals.settings.js"}
    ],
    "data": [{"name":"numerals.json"}]
  },
  {
    "id": "bledetect",
    "name": "BLE Detector",
    "shortName": "BLE Detector",
    "version": "0.03",
    "description": "Detect BLE devices and show some informations.",
    "icon": "bledetect.png",
    "tags": "app,bluetooth,tool",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"bledetect.app.js","url":"bledetect.js"},
      {"name":"bledetect.img","url":"bledetect-icon.js","evaluate":true}
    ]
  },
  {
    "id": "snake",
    "name": "Snake",
    "shortName": "Snake",
    "version": "0.02",
    "description": "The classic snake game. Eat apples and don't bite your tail.",
    "icon": "snake.png",
    "tags": "game,fun",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"snake.app.js","url":"snake.js"},
      {"name":"snake.img","url":"snake-icon.js","evaluate":true}
    ]
  },
  {
    "id": "calculator",
    "name": "Calculator",
    "shortName": "Calculator",
    "version": "0.04",
    "description": "Basic calculator reminiscent of MacOs's one. Handy for small calculus.",
    "icon": "calculator.png",
    "tags": "app,tool",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "storage": [
      {"name":"calculator.app.js","url":"app.js"},
      {"name":"calculator.img","url":"calculator-icon.js","evaluate":true}
    ]
  },
  {
    "id": "dane",
    "name": "Digital Assistant, not EDITH",
    "shortName": "DANE",
    "version": "0.16",
    "description": "A Watchface inspired by Tony Stark's EDITH and based on https://arwes.dev/",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"dane.app.js","url":"app.js"},
      {"name":"dane.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "dane_tcr",
    "name": "DANE Touch Launcher",
    "shortName": "DANE Toucher",
    "version": "0.07",
    "description": "Touch enable left to right launcher in the style of the DANE Watchface",
    "icon": "app.png",
    "type": "launch",
    "tags": "tool,system,launcher",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"dane_tcr.app.js","url":"app.js"},
      {"name":"dane_tcr.settings.js","url":"settings.js"}
    ],
    "data": [{"name":"dane_tcr.json"}],
    "sortorder": -10
  },
  {
    "id": "buffgym",
    "name": "BuffGym",
    "version": "0.02",
    "description": "BuffGym is the famous 5x5 workout program for the BangleJS",
    "icon": "buffgym.png",
    "type": "app",
    "tags": "tool,outdoors,gym,exercise",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "interface": "buffgym.html",
    "allow_emulator": false,
    "storage": [
      {"name":"buffgym.app.js","url":"buffgym.app.js"},
      {"name":"buffgym-set.js","url":"buffgym-set.js"},
      {"name":"buffgym-exercise.js","url":"buffgym-exercise.js"},
      {"name":"buffgym-workout.js","url":"buffgym-workout.js"},
      {"name":"buffgym-workout-a.json","url":"buffgym-workout-a.json"},
      {"name":"buffgym-workout-b.json","url":"buffgym-workout-b.json"},
      {"name":"buffgym-workout-index.json","url":"buffgym-workout-index.json"},
      {"name":"buffgym.img","url":"buffgym-icon.js","evaluate":true}
    ]
  },
  {
    "id": "banglerun",
    "name": "BangleRun",
    "shortName": "BangleRun",
    "version": "0.10",
    "description": "An app for running sessions. Displays info and logs your run for later viewing.",
    "icon": "banglerun.png",
    "tags": "run,running,fitness,outdoors",
    "supports": ["BANGLEJS"],
    "interface": "interface.html",
    "allow_emulator": false,
    "storage": [
      {"name":"banglerun.app.js","url":"app.js"},
      {"name":"banglerun.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "metronome",
    "name": "Metronome",
    "version": "0.06",
    "description": "Makes the watch blinking and vibrating with a given rate",
    "icon": "metronome_icon.png",
    "tags": "tool",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"metronome.app.js","url":"metronome.js"},
      {"name":"metronome.img","url":"metronome-icon.js","evaluate":true},
      {"name":"metronome.settings.js","url":"settings.js"}
    ]
  },
  {
    "id": "blackjack",
    "name": "Black Jack game",
    "shortName": "Black Jack game",
    "version": "0.02",
    "description": "Simple implementation of card game Black Jack",
    "icon": "blackjack.png",
    "tags": "game",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"blackjack.app.js","url":"blackjack.app.js"},
      {"name":"blackjack.img","url":"blackjack-icon.js","evaluate":true}
    ]
  },
  {
    "id": "hidcam",
    "name": "Camera shutter",
    "shortName": "Cam shutter",
    "version": "0.03",
    "description": "Enable HID, connect to your phone, start your camera and trigger the shot on your Bangle",
    "icon": "app.png",
    "tags": "bluetooth,tool",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"hidcam.app.js","url":"app.js"},
      {"name":"hidcam.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "swlclk",
    "name": "SWL Clock / Short Wave Listner Clock",
    "shortName": "SWL Clock",
    "version": "0.02",
    "description": "Display Local, UTC time and some programs on the shorts waves along the day, with the frequencies",
    "icon": "swlclk.png",
    "type": "clock",
    "tags": "tool,clock",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"swlclk.app.js","url":"app.js"},
      {"name":"swlclk.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "rclock",
    "name": "Round clock with seconds,  minutes and date",
    "shortName": "Round Clock",
    "version": "0.06",
    "description": "Designed round clock with ticks for minutes and seconds and heart rate indication",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"rclock.app.js","url":"rclock.app.js"},
      {"name":"rclock.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "fclock",
    "name": "fclock",
    "shortName": "F Clock",
    "version": "0.02",
    "description": "Simple design of a digital clock",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"fclock.app.js","url":"fclock.app.js"},
      {"name":"fclock.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "hamloc",
    "name": "QTH Locator / Maidenhead Locator System",
    "shortName": "QTH Locator",
    "version": "0.01",
    "description": "Convert your current GPS location to the Maidenhead locator system used by HAM amateur radio operators",
    "icon": "app.png",
    "tags": "tool,outdoors,gps",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"hamloc.app.js","url":"app.js"},
      {"name":"hamloc.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "osmpoi",
    "name": "POI Compass",
    "version": "0.03",
    "description": "Uploads all the points of interest in an area onto your watch, same as Beer Compass with more p.o.i.",
    "icon": "app.png",
    "tags": "tool,outdoors,gps",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "custom": "custom.html",
    "storage": [
      {"name":"osmpoi.app.js"},
      {"name":"osmpoi.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "pong",
    "name": "Pong",
    "shortName": "Pong",
    "version": "0.03",
    "description": "A clone of the Atari game Pong",
    "icon": "pong.png",
    "type": "app",
    "tags": "game",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"pong.app.js","url":"app.js"},
      {"name":"pong.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "ballmaze",
    "name": "Ball Maze",
    "version": "0.02",
    "description": "Navigate a ball through a maze by tilting your watch.",
    "icon": "icon.png",
    "type": "app",
    "tags": "game",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"ballmaze.app.js","url":"app.js"},
      {"name":"ballmaze.img","url":"icon.js","evaluate":true}
    ],
    "data": [{"name":"ballmaze.json"}]
  },
  {
    "id": "calendar",
    "name": "Calendar",
    "version": "0.02",
    "description": "Simple calendar",
    "icon": "calendar.png",
    "tags": "calendar",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"calendar.app.js","url":"calendar.js"},
      {"name":"calendar.img","url":"calendar-icon.js","evaluate":true}
    ]
  },
  {
    "id": "hidjoystick",
    "name": "Bluetooth Joystick",
    "shortName": "Joystick",
    "version": "0.01",
    "description": "Emulates a 2 axis/5 button Joystick using the accelerometer as stick input and buttons 1-3, touch left as button 4 and touch right as button 5.",
    "icon": "app.png",
    "tags": "bluetooth",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"hidjoystick.app.js","url":"app.js"},
      {"name":"hidjoystick.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "largeclock",
    "name": "Large Clock",
    "version": "0.10",
    "description": "A readable and informational digital watch, with date, seconds and moon phase",
    "icon": "largeclock.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"largeclock.app.js","url":"largeclock.js"},
      {"name":"largeclock.img","url":"largeclock-icon.js","evaluate":true},
      {"name":"largeclock.settings.js","url":"settings.js"}
    ],
    "data": [{"name":"largeclock.json"}]
  },
  {
    "id": "smtswch",
    "name": "Smart Switch",
    "shortName": "Smart Switch",
    "version": "0.01",
    "description": "Using EspruinoHub, control your smart devices on and off via Bluetooth Low Energy!",
    "icon": "app.png",
    "type": "app",
    "tags": "bluetooth,btle,smart,switch",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"smtswch.app.js","url":"app.js"},
      {"name":"smtswch.img","url":"app-icon.js","evaluate":true},
      {"name":"light-on.img","url":"light-on.js","evaluate":true},
      {"name":"light-off.img","url":"light-off.js","evaluate":true},
      {"name":"switch-on.img","url":"switch-on.js","evaluate":true},
      {"name":"switch-off.img","url":"switch-off.js","evaluate":true}
    ]
  },
  {
    "id": "miplant",
    "name": "Xiaomi Plant Sensor",
    "shortName": "Mi Plant",
    "version": "0.02",
    "description": "Reads and displays data from Xiaomi bluetooth plant moisture sensors",
    "icon": "app.png",
    "tags": "xiaomi,mi,plant,ble,bluetooth",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"miplant.app.js","url":"app.js"},
      {"name":"miplant.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "simpletimer",
    "name": "Timer",
    "version": "0.07",
    "description": "Simple timer, useful when playing board games or cooking",
    "icon": "app.png",
    "tags": "timer",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"simpletimer.app.js","url":"app.js"},
      {"name":".tfnames","url":"gesture-tfnames.js","evaluate":true},
      {"name":".tfmodel","url":"gesture-tfmodel.js","evaluate":true},
      {"name":"simpletimer.img","url":"app-icon.js","evaluate":true}
    ],
    "data": [{"name":"simpletimer.json"}]
  },
  {
    "id": "beebclock",
    "name": "Beeb Clock",
    "version": "0.05",
    "description": "Clock face that may be coincidentally familiar to BBC viewers",
    "icon": "beebclock.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"beebclock.app.js","url":"beebclock.js"},
      {"name":"beebclock.img","url":"beebclock-icon.js","evaluate":true}
    ]
  },
  {
    "id": "findphone",
    "name": "Find Phone",
    "shortName": "Find Phone",
    "version": "0.03",
    "description": "Find your phone via Gadgetbridge. Click any button to let your phone ring. 📳  Note: The functionality is available even without this app, just go to Settings, App Settings, Gadgetbridge, Find Phone.",
    "icon": "app.png",
    "tags": "tool,android",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"findphone.app.js","url":"app.js"},
      {"name":"findphone.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "getup",
    "name": "Get Up",
    "shortName": "Get Up",
    "version": "0.01",
    "description": "Reminds you to getup every x minutes. Sitting to long is dangerous!",
    "icon": "app.png",
    "tags": "tools,health",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"getup.app.js","url":"app.js"},
      {"name":"getup.settings.js","url":"settings.js"},
      {"name":"getup.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "gallifr",
    "name": "Time Traveller's Chronometer",
    "shortName": "Time Travel Clock",
    "version": "0.02",
    "description": "A clock for time travellers. The light pie segment shows the minutes, the black circle, the hour. The dial itself reads 'time' just in case you forget.",
    "icon": "gallifr.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"gallifr.app.js","url":"app.js"},
      {"name":"gallifr.img","url":"app-icon.js","evaluate":true},
      {"name":"gallifr.settings.js","url":"settings.js"}
    ],
    "data": [{"name":"gallifr.json"}]
  },
  {
    "id": "rndmclk",
    "name": "Random Clock Loader",
    "version": "0.03",
    "description": "Load a different clock whenever the LCD is switched on.",
    "icon": "rndmclk.png",
    "type": "widget",
    "tags": "widget,clock",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"rndmclk.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "dotmatrixclock",
    "name": "Dotmatrix Clock",
    "version": "0.01",
    "description": "A clear white-on-blue dotmatrix simulated clock",
    "icon": "dotmatrixclock.png",
    "type": "clock",
    "tags": "clock,dotmatrix,retro",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"dotmatrixclock.app.js","url":"app.js"},
      {"name":"dotmatrixclock.img","url":"dotmatrixclock-icon.js","evaluate":true}
    ]
  },
  {
    "id": "jbm8b",
    "name": "Magic 8 Ball",
    "shortName": "Magic 8 Ball",
    "version": "0.03",
    "description": "A simple fortune telling app",
    "icon": "app.png",
    "tags": "game",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"jbm8b.app.js","url":"app.js"},
      {"name":"jbm8b.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "jbm8b_IT",
    "name": "Magic 8 Ball Italiano",
    "shortName": "Magic 8 Ball IT",
    "version": "0.01",
    "description": "La palla predice il futuro",
    "icon": "app.png",
    "tags": "game",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"jbm8b_IT.app.js","url":"app.js"},
      {"name":"jbm8b_IT.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "BLEcontroller",
    "name": "BLE Customisable Controller with Joystick",
    "shortName": "BLE Controller",
    "version": "0.01",
    "description": "A configurable controller for BLE devices and robots, with a basic four direction joystick. Designed to be easy to customise so you can add your own menus.",
    "icon": "BLEcontroller.png",
    "tags": "tool,bluetooth",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": false,
    "storage": [
      {"name":"BLEcontroller.app.js","url":"app.js"},
      {"name":"BLEcontroller.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "widviz",
    "name": "Widget Visibility Widget",
    "shortName": "Viz Widget",
    "version": "0.02",
    "description": "Swipe left to hide top bar widgets, swipe right to redisplay.",
    "icon": "eye.png",
    "type": "widget",
    "tags": "widget",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"widviz.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "binclock",
    "name": "Binary Clock",
    "shortName": "Binary Clock",
    "version": "0.03",
    "description": "A binary clock with hours and minutes. BTN1 toggles a digital clock.",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock,binary",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"binclock.app.js","url":"app.js"},
      {"name":"binclock.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "pizzatimer",
    "name": "Pizza Timer",
    "shortName": "Pizza Timer",
    "version": "0.01",
    "description": "A timer app for when you cook Pizza. Some say it can also time other things",
    "icon": "pizza.png",
    "tags": "timer,tool,pizza",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"pizzatimer.app.js","url":"app.js"},
      {"name":"pizzatimer.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "animclk",
    "name": "Animated Clock",
    "shortName": "Anim Clock",
    "version": "0.03",
    "description": "An animated clock face using Mark Ferrari's amazing 8 bit game art and palette cycling: http://www.markferrari.com/art/8bit-game-art",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock,animated",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"animclk.app.js","url":"app.js"},
      {"name":"animclk.pixels1","url":"animclk.pixels1"},
      {"name":"animclk.pixels2","url":"animclk.pixels2"},
      {"name":"animclk.pal","url":"animclk.pal"},
      {"name":"animclk.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "analogimgclk",
    "name": "Analog Clock (Image background)",
    "shortName": "Analog Clock",
    "version": "0.03",
    "description": "An analog clock with an image background",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"analogimgclk.app.js","url":"app.js"},
      {"name":"analogimgclk.bg.img","url":"bg.img"},
      {"name":"analogimgclk.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "verticalface",
    "name": "Vertical watch face",
    "shortName": "Vertical Face",
    "version": "0.09",
    "description": "A simple vertical watch face with the date. Heart rate monitor is toggled with BTN1",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"verticalface.app.js","url":"app.js"},
      {"name":"verticalface.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "sleepphasealarm",
    "name": "SleepPhaseAlarm",
    "shortName": "SleepPhaseAlarm",
    "version": "0.02",
    "description": "Uses the accelerometer to estimate sleep and wake states with the principle of Estimation of Stationary Sleep-segments (ESS, see https://ubicomp.eti.uni-siegen.de/home/datasets/ichi14/index.html.en). This app will read the next alarm from the alarm application and will wake you up to 30 minutes early at the best guessed time when you are almost already awake.",
    "icon": "app.png",
    "tags": "alarm",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"sleepphasealarm.app.js","url":"app.js"},
      {"name":"sleepphasealarm.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "life",
    "name": "Game of Life",
    "version": "0.04",
    "description": "Conway's Game of Life - 16x16 board",
    "icon": "life.png",
    "tags": "game",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"life.app.js","url":"life.min.js"},
      {"name":"life.img","url":"life-icon.js","evaluate":true}
    ]
  },
  {
    "id": "magnav",
    "name": "Navigation Compass",
    "version": "0.04",
    "description": "Compass with linear display as for GPSNAV. Has Tilt compensation and remembers calibration.",
    "icon": "magnav.png",
    "tags": "tool,outdoors",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"magnav.app.js","url":"magnav.min.js"},
      {"name":"magnav.img","url":"magnav-icon.js","evaluate":true}
    ],
    "data": [{"name":"magnav.json"}]
  },
  {
    "id": "gpspoilog",
    "name": "GPS POI Logger",
    "shortName": "GPS POI Log",
    "version": "0.01",
    "description": "A simple app to log points of interest with their GPS coordinates and read them back onto your PC. Based on the https://www.espruino.com/Bangle.js+Storage tutorial",
    "icon": "app.png",
    "tags": "outdoors",
    "supports": ["BANGLEJS"],
    "interface": "interface.html",
    "storage": [
      {"name":"gpspoilog.app.js","url":"app.js"},
      {"name":"gpspoilog.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "miclock2",
    "name": "Mixed Clock 2",
    "version": "0.01",
    "description": "White color variant of the Mixed Clock with thicker clock hands for better readability in the bright sunlight, extra space under the clock for widgets and seconds in the digital clock.",
    "icon": "clock-mixed.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"miclock2.app.js","url":"clock-mixed.js"},
      {"name":"miclock2.img","url":"clock-mixed-icon.js","evaluate":true}
    ]
  },
  {
    "id": "1button",
    "name": "One-Button-Tracker",
    "version": "0.01",
    "description": "A widget that turns BTN1 into a tracker, records time of button press/release.",
    "icon": "widget.png",
    "type": "widget",
    "tags": "tool,quantifiedself,widget",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "interface": "interface.html",
    "storage": [
      {"name":"1button.wid.js","url":"widget.js"}
    ],
    "data": [{"name":"one_button_presses.csv","storageFile":true}]
  },
  {
    "id": "gpsautotime",
    "name": "GPS auto time",
    "shortName": "GPS auto time",
    "version": "0.01",
    "description": "A widget that automatically updates the Bangle.js time to the GPS time whenever there is a valid GPS fix.",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget,gps",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"gpsautotime.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "espruinoctrl",
    "name": "Espruino Control",
    "shortName": "Espruino Ctrl",
    "version": "0.01",
    "description": "Send commands to other Espruino devices via the Bluetooth UART interface. Customisable commands!",
    "icon": "app.png",
    "tags": "",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "custom": "custom.html",
    "storage": [
      {"name":"espruinoctrl.app.js"},
      {"name":"espruinoctrl.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "multiclock",
    "name": "Multi Clock",
    "version": "0.13",
    "description": "Clock with multiple faces - Big, Analogue, Digital, Text, Time-Date.\n Switch between faces with BTN1 & BTN3",
    "icon": "multiclock.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"multiclock.app.js","url":"clock.js"},
      {"name":"big.face.js","url":"big.js"},
      {"name":"ana.face.js","url":"ana.js"},
      {"name":"digi.face.js","url":"digi.js"},
      {"name":"txt.face.js","url":"txt.js"},
      {"name":"timdat.face.js","url":"timdat.js"},
      {"name":"ped.face.js","url":"ped.js"},
      {"name":"multiclock.img","url":"multiclock-icon.js","evaluate":true}
    ]
  },
  {
    "id": "widancs",
    "name": "Apple Notification Widget",
    "shortName": "ANCS Widget",
    "version": "0.07",
    "description": "Displays call, message etc notifications from a paired iPhone. Read README before installation as it only works with compatible apps",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"widancs.wid.js","url":"ancs.min.js"},
      {"name":"widancs.settings.js","url":"settings.js"}
    ]
  },
  {
    "id": "accelrec",
    "name": "Acceleration Recorder",
    "shortName": "Accel Rec",
    "version": "0.02",
    "description": "This app puts the Bangle's accelerometer into 100Hz mode and reads 2 seconds worth of data after movement starts. The data can then be exported back to the PC.",
    "icon": "app.png",
    "tags": "",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "interface": "interface.html",
    "storage": [
      {"name":"accelrec.app.js","url":"app.js"},
      {"name":"accelrec.img","url":"app-icon.js","evaluate":true}
    ],
    "data": [{"wildcard":"accelrec.?.csv"}]
  },
  {
    "id": "accellog",
    "name": "Acceleration Logger",
    "shortName": "Accel Log",
    "version": "0.03",
    "description": "Logs XYZ acceleration data to a CSV file that can be downloaded to your PC",
    "icon": "app.png",
    "tags": "outdoor",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "readme": "README.md",
    "interface": "interface.html",
    "storage": [
      {"name":"accellog.app.js","url":"app.js"},
      {"name":"accellog.img","url":"app-icon.js","evaluate":true}
    ],
    "data": [{"wildcard":"accellog.?.csv"}]
  },
  {
    "id": "cprassist",
    "name": "CPR Assist",
    "version": "0.01",
    "description": "Provides assistance while performing a CPR",
    "icon": "cprassist-icon.png",
    "tags": "tool,firstaid",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"cprassist.app.js","url":"cprassist.js"},
      {"name":"cprassist.img","url":"cprassist-icon.js","evaluate":true},
      {"name":"cprassist.settings.js","url":"settings.js"}
    ]
  },
  {
    "id": "osgridref",
    "name": "Ordnance Survey Grid Reference",
    "shortName": "OS Grid ref",
    "version": "0.01",
    "description": "Displays the UK Ordnance Survey grid reference of your current GPS location. Useful when in the United Kingdom with an Ordnance Survey map",
    "icon": "app.png",
    "tags": "outdoors,gps",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"osgridref.app.js","url":"app.js"},
      {"name":"osgridref.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "openseizure",
    "name": "OpenSeizureDetector Widget",
    "shortName": "Short Name",
    "version": "0.01",
    "description": "[BETA!] A widget to work alongside [OpenSeizureDetector](https://www.openseizuredetector.org.uk/)",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"openseizure.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "counter",
    "name": "Counter",
    "version": "0.03",
    "description": "Simple counter",
    "icon": "counter_icon.png",
    "tags": "tool",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"counter.app.js","url":"counter.js"},
      {"name":"counter.img","url":"counter-icon.js","evaluate":true}
    ]
  },
  {
    "id": "bootgattbat",
    "name": "BLE GATT Battery Service",
    "shortName": "BLE Battery Service",
    "version": "0.01",
    "description": "Adds the GATT Battery Service to advertise the percentage of battery currently remaining over Bluetooth.\n",
    "icon": "bluetooth.png",
    "type": "bootloader",
    "tags": "battery,ble,bluetooth,gatt",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"gattbat.boot.js","url":"boot.js"}
    ]
  },
  {
    "id": "viewstl",
    "name": "STL file viewer",
    "shortName": "ViewSTL",
    "version": "0.02",
    "description": "This app allows you to view STL 3D models on your watch",
    "icon": "icons8-octahedron-48.png",
    "tags": "tool",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"viewstl.app.js","url":"viewstl.min.js"},
      {"name":"viewstl.img","url":"viewstl-icon.js","evaluate":true},
      {"name":"tetra.stl","url":"tetra.stl"},
      {"name":"cube.stl","url":"cube.stl"},
      {"name":"icosa.stl","url":"icosa.stl"}
    ]
  },
  {
    "id": "cscsensor",
    "name": "Cycling speed sensor",
    "shortName": "CSCSensor",
    "version": "0.05",
    "description": "Read BLE enabled cycling speed and cadence sensor and display readings on watch",
    "icon": "icons8-cycling-48.png",
    "tags": "outdoors,exercise,ble,bluetooth",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"cscsensor.app.js","url":"cscsensor.app.js"},
      {"name":"cscsensor.settings.js","url":"settings.js"},
      {"name":"cscsensor.img","url":"cscsensor-icon.js","evaluate":true}
    ]
  },
  {
    "id": "fileman",
    "name": "File manager",
    "shortName": "FileManager",
    "version": "0.03",
    "description": "Simple file manager, allows user to examine watch storage and display, load or delete individual files",
    "icon": "icons8-filing-cabinet-48.png",
    "tags": "tools",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"fileman.app.js","url":"fileman.app.js"},
      {"name":"fileman.img","url":"fileman-icon.js","evaluate":true}
    ]
  },
  {
    "id": "worldclock",
    "name": "World Clock - 4 time zones",
    "shortName": "World Clock",
    "version": "0.05",
    "description": "Current time zone plus up to four others",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "readme": "README.md",
    "custom": "custom.html",
    "storage": [
      {"name":"worldclock.app.js","url":"app.js"},
      {"name":"worldclock.img","url":"worldclock-icon.js","evaluate":true}
    ],
    "data": [{"name":"worldclock.settings.json"}]
  },
  {
    "id": "digiclock",
    "name": "Digital Clock Face",
    "shortName": "Digi Clock",
    "version": "0.02",
    "description": "A simple digital clock with the time, day, month, and year",
    "icon": "digiclock.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"digiclock.app.js","url":"digiclock.js"},
      {"name":"digiclock.img","url":"digiclock-icon.js","evaluate":true}
    ]
  },
  {
    "id": "dsdrelay",
    "name": "DSD BLE Relay controller",
    "shortName": "DSDRelay",
    "version": "0.01",
    "description": "Control BLE relay board from the watch",
    "icon": "icons8-relay-48.png",
    "tags": "ble,bluetooth",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"dsdrelay.app.js","url":"dsdrelay.app.js"},
      {"name":"dsdrelay.img","url":"dsdrelay-icon.js","evaluate":true}
    ]
  },
  {
    "id": "mandel",
    "name": "Mandelbrot",
    "shortName": "Mandel",
    "version": "0.01",
    "description": "Draw a zoomable Mandelbrot set",
    "icon": "mandel.png",
    "tags": "game",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"mandel.app.js","url":"mandel.min.js"},
      {"name":"mandel.img","url":"mandel-icon.js","evaluate":true}
    ]
  },
  {
    "id": "petrock",
    "name": "Pet rock",
    "version": "0.02",
    "description": "A virtual pet rock with wobbly eyes",
    "icon": "petrock.png",
    "type": "app",
    "tags": "game",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"petrock.app.js","url":"app.js"},
      {"name":"petrock.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "smartibot",
    "name": "Smartibot controller",
    "shortName": "Smartibot",
    "version": "0.01",
    "description": "Control a [Smartibot Robot](https://thecraftyrobot.net/) straight from your Bangle.js",
    "icon": "app.png",
    "tags": "",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"smartibot.app.js","url":"app.js"},
      {"name":"smartibot.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "widncr",
    "name": "NCR Logo Widget",
    "version": "0.01",
    "description": "Show the NodeConf Remote logo in the top left",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"widncr.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "ncrclk",
    "name": "NCR Clock",
    "shortName": "NCR Clock",
    "version": "0.02",
    "description": "NodeConf Remote clock",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"ncrclk.app.js","url":"app.js"},
      {"name":"ncrclk.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "isoclock",
    "name": "ISO Compliant Clock Face",
    "shortName": "ISO Clock",
    "version": "0.02",
    "description": "Tweaked fork of digiclock for ISO date and time",
    "icon": "isoclock.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"isoclock.app.js","url":"isoclock.js"},
      {"name":"isoclock.img","url":"isoclock-icon.js","evaluate":true}
    ]
  },
  {
    "id": "gpstimeserver",
    "name": "GPS Time Server",
    "version": "0.01",
    "description": "A widget which automatically starts the GPS and turns Bangle.js into a Bluetooth time server.",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"gpstimeserver.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "tilthydro",
    "name": "Tilt Hydrometer Display",
    "shortName": "Tilt Hydro",
    "version": "0.01",
    "description": "A display for the [Tilt Hydrometer](https://tilthydrometer.com/) - [more info here](http://www.espruino.com/Tilt+Hydrometer+Display)",
    "icon": "app.png",
    "tags": "tools,bluetooth",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"tilthydro.app.js","url":"app.js"},
      {"name":"tilthydro.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "supmariodark",
    "name": "Super mario clock night mode",
    "shortName": "supmariodark",
    "version": "0.01",
    "description": "Super mario clock in night mode",
    "icon": "supmariodark.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"supmariodark.app.js","url":"supmariodark.js"},
      {"name":"supmariodark.img","url":"supmariodark-icon.js","evaluate":true},
      {"name":"supmario30x24.bin","url":"supmario30x24.bin.js"},
      {"name":"supmario30x24.wdt","url":"supmario30x24.wdt.js"},
      {"name":"banner-up.img","url":"banner-up.js","evaluate":true},
      {"name":"banner-down.img","url":"banner-down.js","evaluate":true},
      {"name":"brick2.img","url":"brick2.js","evaluate":true},
      {"name":"enemy.img","url":"enemy.js","evaluate":true},
      {"name":"flower.img","url":"flower.js","evaluate":true},
      {"name":"flower_b.img","url":"flower_b.js","evaluate":true},
      {"name":"mario_wh.img","url":"mario_wh.js","evaluate":true},
      {"name":"pipe.img","url":"pipe.js","evaluate":true}
    ]
  },
  {
    "id": "gmeter",
    "name": "G-Meter",
    "shortName": "G-Meter",
    "version": "0.01",
    "description": "Simple G-Meter",
    "icon": "app.png",
    "tags": "",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"gmeter.app.js","url":"app.js"},
      {"name":"gmeter.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "dtlaunch",
    "name": "Desktop Launcher",
    "version": "0.04",
    "description": "Desktop style App Launcher with six apps per page - fast access if you have lots of apps installed.",
    "icon": "icon.png",
    "type": "launch",
    "tags": "tool,system,launcher",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"dtlaunch.app.js","url":"app.js"},
      {"name":"dtlaunch.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "HRV",
    "name": "Heart Rate Variability monitor",
    "shortName": "HRV monitor",
    "version": "0.04",
    "description": "Heart Rate Variability monitor, see Readme for more info",
    "icon": "hrv.png",
    "tags": "",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"HRV.app.js","url":"app.js"},
      {"name":"HRV.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "hardalarm",
    "name": "Hard Alarm",
    "shortName": "HardAlarm",
    "version": "0.02",
    "description": "Make sure you wake up! Count to the right number to turn off the alarm",
    "icon": "app.png",
    "tags": "tool,alarm,widget",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"hardalarm.app.js","url":"app.js"},
      {"name":"hardalarm.boot.js","url":"boot.js"},
      {"name":"hardalarm.js","url":"hardalarm.js"},
      {"name":"hardalarm.img","url":"app-icon.js","evaluate":true},
      {"name":"hardalarm.wid.js","url":"widget.js"}
    ],
    "data": [{"name":"hardalarm.json"}]
  },
  {
    "id": "edisonsball",
    "name": "Edison's Ball",
    "shortName": "Edison's Ball",
    "version": "0.01",
    "description": "Hypnagogia/Micro-Sleep alarm for experimental use in exploring sleep transition and combating drowsiness",
    "icon": "app-icon.png",
    "tags": "",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"edisonsball.app.js","url":"app.js"},
      {"name":"edisonsball.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "hrrawexp",
    "name": "HRM Data Exporter",
    "shortName": "HRM Data Exporter",
    "version": "0.01",
    "description": "export raw hrm signal data to a csv file",
    "icon": "app-icon.png",
    "tags": "",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "interface": "interface.html",
    "storage": [
      {"name":"hrrawexp.app.js","url":"app.js"},
      {"name":"hrrawexp.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "breath",
    "name": "Breathing App",
    "shortName": "Breathing App",
    "version": "0.01",
    "description": "app to aid relaxation and train breath syncronicity using haptics and visualisation, also displays HR",
    "icon": "app-icon.png",
    "tags": "tools,health",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"breath.app.js","url":"app.js"},
      {"name":"breath.img","url":"app-icon.js","evaluate":true}
    ],
    "data": [{"name":"breath.settings.json","url":"settings.json"}]
  },
  {
    "id": "lazyclock",
    "name": "Lazy Clock",
    "version": "0.03",
    "description": "Tells the time, roughly",
    "icon": "lazyclock.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"lazyclock.app.js","url":"lazyclock-app.js"},
      {"name":"lazyclock.img","url":"lazyclock-icon.js","evaluate":true}
    ]
  },
  {
    "id": "astral",
    "name": "Astral Clock",
    "version": "0.03",
    "description": "Clock that calculates and displays Alt Az positions of all planets, Sun as well as several other astronomy targets (customizable) and current Moon phase. Coordinates are calculated by GPS & time and onscreen compass assists orienting. See Readme before using.",
    "icon": "app-icon.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"astral.app.js","url":"app.js"},
      {"name":"astral.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "alpinenav",
    "name": "Alpine Nav",
    "version": "0.01",
    "description": "App that performs GPS monitoring to track and display position relative to a given origin in realtime",
    "icon": "app-icon.png",
    "tags": "outdoors,gps",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"alpinenav.app.js","url":"app.js"},
      {"name":"alpinenav.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "lifeclk",
    "name": "Game of Life Clock",
    "shortName": "Conway's Clock",
    "version": "0.06",
    "description": "Modification and clockification of Conway's Game of Life",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"lifeclk.app.js","url":"app.min.js"},
      {"name":"lifeclk.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "speedalt",
    "name": "GPS Adventure Sports",
    "shortName": "GPS Adv Sport",
    "version": "1.02",
    "description": "GPS speed, altitude and distance to waypoint display. Designed for easy viewing and use during outdoor activities such as para-gliding, hang-gliding, sailing, cycling etc.",
    "icon": "app.png",
    "type": "app",
    "tags": "tool,outdoors",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"speedalt.app.js","url":"app.js"},
      {"name":"speedalt.img","url":"app-icon.js","evaluate":true},
      {"name":"speedalt.settings.js","url":"settings.js"}
    ],
    "data": [{"name":"speedalt.json"}]
  },
  {
    "id": "de-stress",
    "name": "De-Stress",
    "shortName": "De-Stress",
    "version": "0.02",
    "description": "Simple haptic heartbeat",
    "icon": "app.png",
    "tags": "",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"de-stress.app.js","url":"app.js"},
      {"name":"de-stress.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "mclockplus",
    "name": "Morph Clock+",
    "shortName": "Morph Clock+",
    "version": "0.02",
    "description": "Morphing Clock with more readable seconds and date and additional stopwatch",
    "icon": "mclockplus.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"mclockplus.app.js","url":"mclockplus.app.js"},
      {"name":"mclockplus.img","url":"mclockplus-icon.js","evaluate":true}
    ]
  },
  {
    "id": "intervals",
    "name": "Intervals App",
    "shortName": "Intervals",
    "version": "0.01",
    "description": "Intervals for training. It is possible to configure work time and rest time and number of sets.",
    "icon": "intervals.png",
    "tags": "",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"intervals.app.js","url":"intervals.app.js"},
      {"name":"intervals.img","url":"intervals-icon.js","evaluate":true}
    ]
  },
  {
    "id": "planetarium",
    "name": "Planetarium",
    "shortName": "Planetarium",
    "version": "0.03",
    "description": "Planetarium showing up to 500 stars using the watch location and time",
    "icon": "planetarium.png",
    "tags": "",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"planetarium.app.js","url":"planetarium.app.js"},
      {"name":"planetarium.data.csv","url":"planetarium.data.csv"},
      {"name":"planetarium.const.csv","url":"planetarium.const.csv"},
      {"name":"planetarium.extra.csv","url":"planetarium.extra.csv"},
      {"name":"planetarium.settings.js","url":"settings.js"},
      {"name":"planetarium.img","url":"planetarium-icon.js","evaluate":true}
    ],
    "data": [{"name":"planetarium.json"}]
  },
  {
    "id": "tapelauncher",
    "name": "Tape Launcher",
    "version": "0.02",
    "description": "An App launcher, icons displayed in a horizontal tape, swipe or use buttons",
    "icon": "icon.png",
    "type": "launch",
    "tags": "tool,system,launcher",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"tapelauncher.app.js","url":"app.js"},
      {"name":"tapelauncher.img","url":"icon.js","evaluate":true}
    ]
  },
  {
    "id": "oblique",
    "name": "Oblique Strategies",
    "version": "0.01",
    "description": "Oblique Strategies for creativity. Copied from Brian Eno.",
    "icon": "eno.png",
    "tags": "tool",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"oblique.app.js","url":"app.js"},
      {"name":"oblique.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "testuserinput",
    "name": "Test User Input",
    "shortName": "Test User Input",
    "version": "0.06",
    "description": "App to test the bangle.js input interface. It displays the user action in text, circle buttons or on/off switch UI elements.",
    "icon": "app.png",
    "tags": "input,interface,buttons,touch,UI",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"testuserinput.app.js","url":"app.js"},
      {"name":"testuserinput.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "gpssetup",
    "name": "GPS Setup",
    "shortName": "GPS Setup",
    "version": "0.02",
    "description": "Configure the GPS power options and store them in the GPS nvram",
    "icon": "gpssetup.png",
    "tags": "gps,tools,outdoors",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"gpssetup","url":"gpssetup.js"},
      {"name":"gpssetup.settings.js","url":"settings.js"},
      {"name":"gpssetup.app.js","url":"app.js"},
      {"name":"gpssetup.img","url":"icon.js","evaluate":true}
    ],
    "data": [{"name":"gpssetup.settings.json","url":"settings.json"}]
  },
  {
    "id": "walkersclock",
    "name": "Walkers Clock",
    "shortName": "Walkers Clock",
    "version": "0.04",
    "description": "A large font watch, displays steps, can switch GPS on/off, displays grid reference",
    "icon": "walkersclock48.png",
    "type": "clock",
    "tags": "clock,gps,tools,outdoors",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"walkersclock.app.js","url":"app.js"},
      {"name":"walkersclock.img","url":"icon.js","evaluate":true}
    ]
  },
  {
    "id": "widgps",
    "name": "GPS Widget",
    "version": "0.02",
    "description": "Tiny widget to show the power on/off status of the GPS. Require firmware v2.08.167 or later",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget,gps",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"widgps.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "widhrt",
    "name": "HRM Widget",
    "version": "0.02",
    "description": "Tiny widget to show the power on/off status of the Heart Rate Monitor. Requires firmware v2.08.167 or later",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget,hrm",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"widhrt.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "countdowntimer",
    "name": "Countdown Timer",
    "version": "0.01",
    "description": "A simple countdown timer with a focus on usability",
    "icon": "countdowntimer.png",
    "tags": "timer,tool",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"countdowntimer.app.js","url":"countdowntimer.js"},
      {"name":"countdowntimer.img","url":"countdowntimer-icon.js","evaluate":true}
    ]
  },
  {
    "id": "helloworld",
    "name": "hello, world!",
    "shortName": "hello world",
    "version": "0.02",
    "description": "A cross cultural hello world!/hola mundo! app with colors and languages",
    "icon": "app.png",
    "tags": "input,interface,buttons,touch",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"helloworld.app.js","url":"app.js"},
      {"name":"helloworld.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "widcom",
    "name": "Compass Widget",
    "version": "0.01",
    "description": "Tiny widget to show the power on/off status of the Compass. Requires firmware v2.08.167 or later",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget,compass",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"widcom.wid.js","url":"widget.js"}
    ]
  },
  {
    "id": "arrow",
    "name": "Arrow Compass",
    "version": "0.04",
    "description": "Moving arrow compass that points North, shows heading, with tilt correction. Based on jeffmer's Navigation Compass",
    "icon": "arrow.png",
    "type": "app",
    "tags": "tool,outdoors",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"arrow.app.js","url":"app.js"},
      {"name":"arrow.img","url":"icon.js","evaluate":true}
    ]
  },
  {
    "id": "waypointer",
    "name": "Way Pointer",
    "version": "0.01",
    "description": "Navigate to a waypoint using the GPS for bearing and compass to point way, uses the same waypoint interface as GPS Navigation",
    "icon": "waypointer.png",
    "tags": "tool,outdoors,gps",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "interface": "waypoints.html",
    "storage": [
      {"name":"waypointer.app.js","url":"app.js"},
      {"name":"waypointer.img","url":"icon.js","evaluate":true}
    ],
    "data": [{"name":"waypoints.json","url":"waypoints.json"}]
  },
  {
    "id": "color_catalog",
    "name": "Colors Catalog",
    "shortName": "Colors Catalog",
    "version": "0.01",
    "description": "Displays RGB565 and RGB888 colors, its name and code in screen.",
    "icon": "app.png",
    "tags": "Color,input,buttons,touch,UI",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"color_catalog.app.js","url":"app.js"},
      {"name":"color_catalog.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "UI4swatch",
    "name": "UI 4 swatch",
    "shortName": "UI 4 swatch",
    "version": "0.01",
    "description": "A UI/UX for espruino smartwatches, displays dinamically calc. x,y coordinates.",
    "icon": "app.png",
    "tags": "Color,input,buttons,touch,UI",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"UI4swatch.app.js","url":"app.js"},
      {"name":"UI4swatch.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "simplest",
    "name": "Simplest Clock",
    "version": "0.03",
    "description": "The simplest working clock, acts as a tutorial piece",
    "icon": "simplest.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"simplest.app.js","url":"app.js"},
      {"name":"simplest.img","url":"icon.js","evaluate":true}
    ]
  },
  {
    "id": "stepo",
    "name": "Stepometer Clock",
    "version": "0.03",
    "description": "A large font watch, displays step count in a doughnut guage and warns of low battery, requires one of the steps widgets to be installed",
    "icon": "stepo.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"stepo.app.js","url":"app.js"},
      {"name":"stepo.img","url":"icon.js","evaluate":true}
    ]
  },
  {
    "id": "gbmusic",
    "name": "Gadgetbridge Music Controls",
    "shortName": "Music Controls",
    "version": "0.05",
    "description": "Control the music on your Gadgetbridge-connected phone",
    "icon": "icon.png",
    "type": "app",
    "tags": "tools,bluetooth,gadgetbridge,music",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": false,
    "storage": [
      {"name":"gbmusic.app.js","url":"app.js"},
      {"name":"gbmusic.settings.js","url":"settings.js"},
      {"name":"gbmusic.wid.js","url":"widget.js"},
      {"name":"gbmusic.img","url":"icon.js","evaluate":true}
    ],
    "data": [{"name":"gbmusic.json"},{"name":"gbmusic.load.json"}]
  },
  {
    "id": "battleship",
    "name": "Battleship",
    "version": "0.01",
    "description": "The classic game of battleship",
    "icon": "battleship-icon.png",
    "tags": "game",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"battleship.app.js","url":"battleship.js"},
      {"name":"battleship.img","url":"battleship-icon.js","evaluate":true}
    ]
  },
  {
    "id": "kitchen",
    "name": "Kitchen Combo",
    "version": "0.13",
    "description": "Combination of the Stepo, Walkersclock, Arrow and Waypointer apps into a multiclock format. 'Everything but the kitchen sink'. Requires firmware v2.08.167 or later",
    "icon": "kitchen.png",
    "type": "clock",
    "tags": "tool,outdoors,gps",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "interface": "waypoints.html",
    "storage": [
      {"name":"kitchen.app.js","url":"kitchen.app.js"},
      {"name":"stepo2.kit.js","url":"stepo2.kit.js"},
      {"name":"swatch.kit.js","url":"swatch.kit.js"},
      {"name":"gps.kit.js","url":"gps.kit.js"},
      {"name":"compass.kit.js","url":"compass.kit.js"},
      {"name":"kitchen.img","url":"kitchen.icon.js","evaluate":true}
    ],
    "data": [{"name":"waypoints.json","url":"waypoints.json"}]
  },
  {
    "id": "banglebridge",
    "name": "BangleBridge",
    "shortName": "BangleBridge",
    "version": "0.01",
    "description": "Widget that allows Bangle Js to record pair and end data using Bluetooth Low Energy in combination with the BangleBridge Android App",
    "icon": "widget.png",
    "type": "widget",
    "tags": "widget",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"banglebridge.wid.js","url":"widget.js"},
      {"name":"banglebridge.watch.img","url":"watch.img"},
      {"name":"banglebridge.heart.img","url":"heart.img"}
    ]
  },
  {
    "id": "qmsched",
    "name": "Quiet Mode Schedule and Widget",
    "shortName": "Quiet Mode",
    "version": "0.02",
    "description": "Automatically turn Quiet Mode on or off at set times",
    "icon": "app.png",
    "tags": "tool,widget",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"qmsched","url":"lib.js"},
      {"name":"qmsched.app.js","url":"app.js"},
      {"name":"qmsched.boot.js","url":"boot.js"},
      {"name":"qmsched.img","url":"icon.js","evaluate":true},
      {"name":"qmsched.wid.js","url":"widget.js"}
    ],
    "data": [{"name":"qmsched.json"}]
  },
  {
    "id": "hourstrike",
    "name": "Hour Strike",
    "shortName": "Hour Strike",
    "version": "0.08",
    "description": "Strike the clock on the hour. A great tool to remind you an hour has passed!",
    "icon": "app-icon.png",
    "tags": "tool,alarm",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"hourstrike.app.js","url":"app.js"},
      {"name":"hourstrike.boot.js","url":"boot.js"},
      {"name":"hourstrike.img","url":"app-icon.js","evaluate":true},
      {"name":"hourstrike.json","url":"hourstrike.json"}
    ]
  },
  {
    "id": "whereworld",
    "name": "Where in the World?",
    "shortName": "Where World",
    "version": "0.01",
    "description": "Shows your current location on the world map",
    "icon": "app.png",
    "tags": "gps",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"whereworld.app.js","url":"app.js"},
      {"name":"whereworld.img","url":"app-icon.js","evaluate":true},
      {"name":"whereworld.worldmap","url":"worldmap"}
    ]
  },
  {
    "id": "omnitrix",
    "name": "Omnitrix",
    "version": "0.01",
    "description": "An Omnitrix Showpiece",
    "icon": "omnitrix.png",
    "tags": "game",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"omnitrix.app.js","url":"omnitrix.app.js"},
      {"name":"omnitrix.img","url":"omnitrix.icon.js","evaluate":true}
    ]
  },
  {
    "id": "batclock",
    "name": "Bat Clock",
    "shortName": "Bat Clock",
    "version": "0.02",
    "description": "Morphing Clock, with an awesome \"The Dark Knight\" themed logo.",
    "icon": "bat-clock.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"batclock.app.js","url":"bat-clock.app.js"},
      {"name":"batclock.img","url":"bat-clock.icon.js","evaluate":true}
    ]
  },
  {
    "id": "doztime",
    "name": "Dozenal Time",
    "shortName": "Dozenal Time",
    "version": "0.04",
    "description": "A dozenal Holocene calendar and dozenal diurnal clock",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"doztime.app.js","url":"app.js"},
      {"name":"doztime.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "gbtwist",
    "name": "Gadgetbridge Twist Control",
    "shortName": "Twist Control",
    "version": "0.01",
    "description": "Shake your wrist to control your music app via Gadgetbridge",
    "icon": "app.png",
    "type": "app",
    "tags": "tools,bluetooth,gadgetbridge,music",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": false,
    "storage": [
      {"name":"gbtwist.app.js","url":"app.js"},
      {"name":"gbtwist.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "thermom",
    "name": "Thermometer",
    "version": "0.02",
    "description": "Displays the current temperature, updated every 20 seconds",
    "icon": "app.png",
    "tags": "tool",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"thermom.app.js","url":"app.js"},
      {"name":"thermom.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "mysticdock",
    "name": "Mystic Dock",
    "version": "1.00",
    "description": "A retro-inspired dockface that displays the current time and battery charge while plugged in, and which features an interactive mode that shows the time, date, and a rotating data display line.",
    "icon": "mystic-dock.png",
    "type": "dock",
    "tags": "dock",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"mysticdock.app.js","url":"mystic-dock-app.js"},
      {"name":"mysticdock.boot.js","url":"mystic-dock-boot.js"},
      {"name":"mysticdock.settings.js","url":"mystic-dock-settings.js"},
      {"name":"mysticdock.img","url":"mystic-dock-icon.js","evaluate":true}
    ]
  },
  {
    "id": "mysticclock",
    "name": "Mystic Clock",
    "version": "1.01",
    "description": "A retro-inspired watchface featuring time, date, and an interactive data display line.",
    "icon": "mystic-clock.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"mysticclock.app.js","url":"mystic-clock-app.js"},
      {"name":"mysticclock.settings.js","url":"mystic-clock-settings.js"},
      {"name":"mysticclock.img","url":"mystic-clock-icon.js","evaluate":true}
    ]
  },
  {
    "id": "hcclock",
    "name": "Hi-Contrast Clock",
    "version": "0.01",
    "description": "Hi-Contrast Clock : A simple yet very bold clock that aims to be readable in high luninosity environments. Uses big 10x5 pixel digits. Use BTN 1 to switch background and foreground colors.",
    "icon": "hcclock-icon.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"hcclock.app.js","url":"hcclock.app.js"},
      {"name":"hcclock.img","url":"hcclock-icon.js","evaluate":true}
    ]
  },
  {
    "id": "thermomF",
    "name": "Fahrenheit Temp",
    "version": "0.01",
    "description": "A modification of the Thermometer App to display temprature in Fahrenheit",
    "icon": "thermf.png",
    "tags": "tool",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"thermomF.app.js","url":"app.js"},
      {"name":"thermomF.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "nixie",
    "name": "Nixie Clock",
    "shortName": "Nixie",
    "version": "0.01",
    "description": "A nixie tube clock for both Bangle 1 and 2.",
    "icon": "nixie.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"nixie.app.js","url":"app.js"},
      {"name":"nixie.img","url":"app-icon.js","evaluate":true},
      {"name":"m_vatch.js","url":"m_vatch.js"}
    ]
  },
  {
    "id": "carcrazy",
    "name": "Car Crazy",
    "shortName": "Car Crazy",
    "version": "0.03",
    "description": "A simple car game where you try to avoid the other cars by tilting your wrist left and right. Hold down button 2 to start.",
    "icon": "carcrash.png",
    "tags": "game",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"carcrazy.app.js","url":"app.js"},
      {"name":"carcrazy.img","url":"app-icon.js","evaluate":true},
      {"name":"carcrazy.settings.js","url":"settings.js"}
    ],
    "data": [{"name":"app.json"}]
  },
  {
    "id": "shortcuts",
    "name": "Shortcuts",
    "shortName": "Shortcuts",
    "version": "0.01",
    "description": "Quickly load your favourite apps from (almost) any watch face.",
    "icon": "app.png",
    "type": "bootloader",
    "tags": "tool",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"shortcuts.boot.js","url":"boot.js"},
      {"name":"shortcuts.settings.js","url":"settings.js"}
    ],
    "data": [{"name":"shortcuts.json"}]
  },
  {
    "id": "vectorclock",
    "name": "Vector Clock",
    "version": "0.02",
    "description": "A digital clock that uses the built-in vector font.",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS"],
    "allow_emulator": true,
    "storage": [
      {"name":"vectorclock.app.js","url":"app.js"},
      {"name":"vectorclock.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "fd6fdetect",
    "name": "fd6fdetect",
    "shortName": "fd6fdetect",
    "version": "0.1",
    "description": "Allows you to see 0xFD6F beacons near you.",
    "icon": "app.png",
    "tags": "tool",
    "supports": ["BANGLEJS"],
    "storage": [
      {"name":"fd6fdetect.app.js","url":"app.js"},
      {"name":"fd6fdetect.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "choozi",
    "name": "Choozi",
    "version": "0.01",
    "description": "Choose people or things at random using Bangle.js.",
    "icon": "app.png",
    "tags": "tool",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "allow_emulator": true,
    "storage": [
      {"name":"choozi.app.js","url":"app.js"},
      {"name":"choozi.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "widclkbttm",
    "name": "Digital clock (Bottom) widget",
    "shortName": "Digital clock Bottom Widget",
    "version": "0.03",
    "description": "Displays time in the bottom area.",
    "icon": "widclkbttm.png",
    "type": "widget",
    "tags": "widget",
    "supports": ["BANGLEJS"],
    "readme": "README.md",
    "storage": [
      {"name":"widclkbttm.wid.js","url":"widclkbttm.wid.js"}
    ]
  },
  {
    "id": "pastel",
    "name": "Pastel Clock",
    "shortName": "Pastel",
    "version": "0.05",
    "description": "A Configurable clock with custom fonts and background",
    "icon": "pastel.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "readme": "README.md",
    "storage": [
      {"name":"pastel.app.js","url":"pastel.app.js"},
      {"name":"pastel.img","url":"pastel.icon.js","evaluate":true},
      {"name":"pastel.settings.js","url":"pastel.settings.js"}
    ],
    "data": [{"name":"pastel.json"}]
  },
  {
    "id": "antonclk",
    "name": "Anton Clock",
    "version": "0.02",
    "description": "A simple clock using the bold Anton font.",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"antonclk.app.js","url":"app.js"},
      {"name":"antonclk.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "waveclk",
    "name": "Wave Clock",
    "version": "0.02",
    "description": "A clock using a wave image by [Lillith May](https://www.instagram.com/_lilustrations_/). **Note: This requires firmware 2v11 or later Bangle.js 1**",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"waveclk.app.js","url":"app.js"},
      {"name":"waveclk.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "floralclk",
    "name": "Floral Clock",
    "version": "0.01",
    "description": "A clock with a flower background by [Lillith May](https://www.instagram.com/_lilustrations_/). **Note: This requires firmware 2v11 or later Bangle.js 1**",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"floralclk.app.js","url":"app.js"},
      {"name":"floralclk.img","url":"app-icon.js","evaluate":true}
    ]
  },
  {
    "id": "score",
    "name": "Score Tracker",
    "version": "0.01",
    "description": "Score Tracker for sports that use plain numbers (e.g. Badminton, Volleyball, Soccer, Table Tennis, ...). Also supports tennis scoring.",
    "icon": "score.app.png",
    "type": "app",
    "tags": "",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "readme": "README.md",
    "storage": [
      {"name":"score.app.js","url":"score.app.js"},
      {"name":"score.settings.js","url":"score.settings.js"},
      {"name":"score.presets.json","url":"score.presets.json"},
      {"name":"score.img","url":"score.app-icon.js","evaluate":true}
    ],
    "data": [{"name":"score.json"}]
  },
  {
    "id": "menusmall",
    "name": "Small Menus",
    "version": "0.01",
    "description": "Replace Bangle.js 2's menus with a version that contains smaller text",
    "icon": "app.png",
    "type": "boot",
    "tags": "system",
    "supports": ["BANGLEJS2"],
    "storage": [
      {"name":"menusmall.boot.js","url":"boot.js"}
    ]
  },
  {
    "id": "ffcniftya",
    "name": "Nifty-A Clock",
    "version": "0.01",
    "description": "A nifty clock with time and date",
    "icon": "app.png",
    "type": "clock",
    "tags": "clock",
    "supports": ["BANGLEJS","BANGLEJS2"],
    "allow_emulator": true,
    "storage": [
      {"name":"ffcniftya.app.js","url":"app.js"},
      {"name":"ffcniftya.img","url":"app-icon.js","evaluate":true}
    ]
  }
]
