Download

User Manual
mg/dL version
mmol/L version
Contact

Juggluco

Juggluco (juggle glucose) is an alternative Android app for Abbott's FreeStyle Libre 1, 2 and 3 sensors, meant for glucose control by people with diabetes. Libre 1 and Libre 2 sensors can be scanned via NFC to display the current value and the 15 minutes values out of the memory of the sensor. For Libre 2 and 3 sensors it displays the glucose values received every minute via Bluetooth.

Juggluco
Juggluco showing current glucose value received by Bluetooth

The value received via Bluetooth from Libre 2 sensors, is exactly the same as the one received by scanning. And these same values will also be used in the sensor to generate the history values of the past 8 hours you also receive by scanning. From its introduction in 2018 until 2023, did Abbott Libre app use these glucose values, received via Bluetooth, only for glucose alarms. Only in 2023, in Librelink 2.10.0, does Abbott's Libre app also display the glucose values received via Bluetooth. Until then, they stuck with the idea that NFC scanning was a good idea. And indeed they were remarkably successful in terms of sales.

Apps like the official Librelink app from Abbott display the glucose graph in a very reduced form in portrait mode, which maybe allows a doctor to see in a glimpse how well one is doing, but is insufficient for a diabetes patient to see exactly how the glucose curve (its peaks and troughs) relates to other events like carbohydrate, insulin doses or physical activity.

Daily graph Librelink app
Abbott's Librelink app. 1 hour in 0.23 cm.
Daily graph Freestyle reader
Freestyle reader. 1 hour in 0.12 cm.
Juggluco 1 hour in 0.12 cm
Juggluco 1 hour in 0.12 cm. Showing only 15 minutes measurements received by scanning. 0-21 mmol/L (0-378 mg/dL)
Juggluco 1 hour in 3.3 cm
Juggluco 1 hour in 3.3 cm. Showing curve of glucose values arriving every minute by Bluetooth and entered amounts of insulin, food and activity. 3-8 mmol/L (54-270 mg/dL)

Juggluco uses the whole screen in landscape mode for the glucose curve. With two fingers you can zoom the time axis in or out without any restriction (you can disable this in settings). Abbott has an obligatory display of glucose values from 0 to 21 mmol/L (0-378 mg/dL), in Juggluco you can configure this in settings with any range you like (or change it manually by moving up and down if allowed in settings). The amount of insulin or food you consume can be added to the graph, so you can see its relation with the glucose values.

Search
Search for glucose values below 4 mmol/L (70 mg/dL) between 22:00 and 0730
Search
A search result

By simply moving over the screen left or right you can move the curve backwards and forwards in time.

The app contains four menus, opened by touching different fourths of the screen. The right most menu is the movement menu, by which you can move one day or one week back in time with one extra touch after opening the menu with a first touch. Beside this you can jump to a specific date or search for a specific glucose value or amount of food or insulin or whatever number you entered.

Left menu
Menu opened by touching an empty spot in the left most fourth of the screen
Left middle menu
Menu opened by touching left of the middle of the screen
Right middle menu
Menu opened by touching right of the middle of the screen.
Right menu
Menu opened by touching the rightmost fourth of the screen.

Naturally you can also set low and high glucose value alarms. For each of which you can specify separate ringtones in the settings. Beside this you can add medication reminders, setting an alarm to go off if you didn't enter a certain amount in a certain time interval. For example if you didn't enter long acting insulin between 9 and 10 in the evening.

Specify ringtone for low glucose alarm
Specify separate ringtone for low glucose alarm
Reminders
Reminders to go off if certain amounts were not entered in given period
A Freestyle Libre 3 sensor and a Freestyle Libre 2 sensor at the same time

Some of the restrictions applicable to Librelink app don't apply to Juggluco:

Mirror

Send data to other device
Configure to send data as they arrive to other device running Juggluco

With the mirror function you can send data via IP/TCP from one Juggluco to another Juggluco running on another Android device. This has all kind of uses: transfer your data to a new phone or display it on an Android tablet or Android emulator to have a larger display. You can also set alarms in the mirror device. With the scan data the mirror app also receives the Bluetooth connection data, making it possible for devices without NFC to connect via Bluetooth with the sensor.  You can also display exactly the same data on a second phone that is connected over the internet to a phone running Juggluco connected to the sensor (see details). There is also a desktop command line program that can receive data from and resend data to Juggluco (with the program found here). 

Values

The glucose values received by Bluetooth differ little from the scanned values of Abbott's Libre/Librelink app. The values displayed in Juggluco and Abbott's Libre app are determined the same way, but previous readings influence displayed values. Consequently if you use one of them longer, they will give somewhat different values. When used beside each other, differences will diminish with time.

Multiple apps with the same sensor

European Libre 2 sensors can handle multiple apps on the same phone connected to the same sensor quite well. The alarms will become less reliable, but you can view two apps at the same time. Sometimes somehow Bluetooth stops totally after the sensor was out of reach for some time, something that never happens otherwise. You have to turn Bluetooth off and on to get it running again.

Only one app will be able to establish a connection with the sensor on its own, except when you run a mirror Juggluco on the same phone. When there are connection issues while running two apps in parallel, you should kill the app which can't establish a connection. Mostly it is the app that last came to know the sensor that can make the connection. Librelink will not use Bluetooth when it didn't start the sensor. Juggluco will always try to establish a Bluetooth connection (when "Sensor via Bluetooth" is turned on). When the sensor was scanned with another exemplar of Juggluco or the patched Librelink app, you need to scan the sensor again with Juggluco after it failed to connect to the sensor.

Apps running on different devices can't connect in parallel with the same sensor. Freestyle Reader will interfere more with Juggluco than the Librelink app. When the sensor is connected to Juggluco running on a WearOS watch, Abbott's Libre app will disrupt the connection (if it was used to start the sensor). Juggluco will normally not try to connect with the sensor anymore when it transfers the sensor to the watch. To be certain that nothing is still running somehow, you can kill Juggluco and let it restart itself. US/CA/AU Libre 2 sensors can't connect to multiple apps on the same phone in parallel. The same is true for all Libre 3 sensors.

Settings
Settings
Scan
Scan showing the current glucose value and the past 16 minutes trend

Scan

After scanning something like the right picture above is shown. The number is the 'current' glucose value, the curve displays the glucose pattern of the past 16 minutes and is taken out of the sensor by NFC scanning. Abbott's Librelink app uses these values only to determine the angle of the arrow that displays the direction of change. The curve, Juggluco displayed after scanning, is drawn directly from the raw values and differs a bit from the values received via Bluetooth for which Abbott's calibration algorithm is used. With Freestyle libre 2, NFC scanning has become of minor interest. You only need it to startup the sensor, enable Bluetooth streaming and now and then to find out what is wrong and to get the sensor working again.

Age

Scan
Coloring of a two minute old value

To display the age of the displayed glucose value, the Sensor Identifier under the glucose value, is colored in proportion to how long ago the glucose value was received from the sensor. The total length of the Sensor identifier is 3 minutes, thus if the Sensor Identifier is totally colored it was 3 minutes ago the glucose value was received from the sensor. If more then three minutes have passed since the last glucose value was received, it isn't displayed anymore. Immediately after a new glucose value has arrived the sensor id isn't colored at all, after one minute it is colored for a third. The screen is only refreshed on every minute tick or when the user touches the screen, thus not all degrees of age are immediately shown on the screen. If you want a number of the time of the measurement, you can save the glucose values with Left middle screen->Export->Stream. Touching the last point of the glucose curve will also display the measurement time of that value.

Unmeasurable extremes

Values below 2.2 mmol/L (40 mg/dL) are displayed as 2.2> (40>), meaning that 2.2 mmol/L (40 mg/dL) is larger than the real value. In Librelink this is show as LO. I myself didn't consider that very handy, especially in the beginning: at the moment you have to eat glucose as quickly as possible you first have to find out what that LO means.

Values above 27.8 mmol/L (500 mg/dL) are display 27.8< (500<), meaning that 27.8 mmol/L (500 mg/dL) is smaller than the real value. In Librelink this is displayed as HI.

FreeStyle Libre 2 sensor differences

The Libre 2 sensors in the USA are different from those in Germany or the Netherlands. Libre 2 sensors in Australia and Canada are also reported to be different from European sensors.

Previously US Libre 2 sensors could be used with Juggluco, but recently a lot of users report that newer US FreeStyle Libre 2 sensors work only with Abbotts US Libre 2.7.2 app.

Now Juggluco is updated so that Juggluco 5.1.3 can also be used with the new US Libre 2 sensors. This works with the phone and the WearOS version of Juggluco.

The minimum Android version is higher than before. I only know that they don't work with Android 6.0 and do work with Android 8.0.

US Libre 2 sensors can't be started with Juggluco. If you can't get the official Abbott US Libre 2 app from Google Play, you can use the patched US Libre 2.7.2 app.

Sensor error differences

Sensor errors (373, wait 10 minutes) are usually generated in Juggluco at exactly the same moment they are generated in the Libre app. An exception is that older version of the librelink app sometimes don't generate sensor errors when never versions do. So if someone compares the patched Librelink 2.3.0 app with Juggluco, he will sometimes see that Juggluco generates a sensor error, but the patched Librelink 2.3.0 will not.

FreeStyle Libre 3

With Juggluco 3.0.0, it is also possible to connect Freestyle Libre 3 sensors directly with Juggluco: More info.

Bug Report

Glucose value on lock screen
Glucose value in status bar

Notifications

The stream of glucose values received via Bluetooth is also displayed in the Android status bar and a notification. The glucose value in the Android status bar is made as large as possible; this means that values consisting of more digits or containing a point are displayed in a smaller font than values consisting of a single digit. Some may have preferred consistency over readability, but I prefer the latter.

On some smartphones you have to change the notifications settings to see the current glucose value in the Android status bar and/or on the lock screen. How you can do this is device dependent. In Android settings you can find somewhere notifications. From a list of apps you can select Juggluco and under Juggluco glucoseNotification and then you have all kind of options, like "Set as silent" (unset), "display on status bar" (set) and "hide details on lock screen" (unset).

On Android 13 you should give Juggluco Notifications permission

It is possible that with a certain combination of lock screen color settings, only the icon is visible. Switching to dark mode helps.

Don't set "Icon only" in your lock screen settings.

On some smartphones, only notifications generated after the screen was locked are displayed, so you will not seen immediately whether the the change of settings was effective.

Floating glucose

Juggluco has the possibility to show the current glucose value received via Bluetooth above other apps. In Left menu->Settings->Floating Glucose, you can change the colors, transparency and whether touch end up in the view beneath or touch is used to move the Floating glucose. You can turn it on and off in Left middle menu->Float.

Glucose over cycling watch app
Glucose floating over Komoot

To use Floating Glucose under Android Automotive and WearOS you need to give Juggluco permission to display over other apps with the following command:

adb shell pm grant tk.glucodata android.permission.SYSTEM_ALERT_WINDOW

It is also possible to give Juggluco all permissions it uses during install with:

adb install -g -r Juggluco4.7.0-wear-arm32.apk

Where Juggluco4.7.0-wear-arm32.apk is the WearOS APK downloaded from:

https://www.juggluco.nl/Juggluco/download.html

-g means that you grant all permissions.

Watch

If you have a smartwatch that can receive Android notifications, you can select Notify in the left middle menu of Juggluco to let Juggluco generate an alerting Android notification every time a new glucose value arrived by Bluetooth. If you configure your smartwatch app to send notifications from Juggluco to the watch, you will receive this notification on your watch, so you can look every minute at your watch for you current glucose level. This can by useful during physical activity. Somehow it didn't work on the WearOS watch Samsung Galaxy Watch4, maybe because it is an ongoing notification.

There is also a special watch app for some Garmin watches with touchscreen (see Kerfstok), wherein you can see your current glucose value, enter numbers and display speed and distance during activity and record it.

Juggluco (version 2.1.0 and up) has a built-in xDrip web server. This means that xDrip watch apps can receive glucose values directly from Juggluco. You can turn this on in the left menu->watch of Juggluco. Use the Help button there for more information.

There is now a Juggluco version that runs on WearOS. See >https://www.juggluco.nl/JugglucoWearOS for more information.

Aggregate data

Juggluco can display some summary statistics of the stream data received via Bluetooth.

Settings
Statistics
Scan
Summary graph

You can see the percentage of measurements falling in certain glucose ranges. Both for the conventional ranges (>13.9 mmol/L, 10.1-13.9 mmol/L, 3.9-10 mmol/L, 3.0-3.8 mmol/L, <3.0 mmol/L or >250 mg/dL, 181-250 mg/dL, 70-180 mg/dL, 54-69 mg/dL, <54 mg/dL) as the target range specified in settings. In the above image it is 4.0-8.0 mmol/L (or 72-144 mg/dL).

Glucose Management Indicator is an empirically determined predictor of HbA1c taken from Bergenstal et al (2018) https://care.diabetesjournals.org/content/41/11/2275.

The summary graph is made as follows: Of every minute of the day it is determined how the glucose values were distributed over a given number of days. For example for the first minute of the day, all measurements of this minute for every day in this period are taken and it is determine under which value 50% of the values lie to get the median. For the 100% range, the lowest and highest values on that minute of the day in this period are taken. For the 90% range the values below which 5% of the values lie and the values below which 95% of the values lie is taken. For the 50% range the value below which 25% of the values lie and the value below which 75% of the values lie. This for every minute of the day. Thereafter these borders/lines are smoothed.

The specific period for which these calculations are done, can be determined by setting the number of days by pressing Days and by the end position of the screen at the moment Stats in the left middle menu was touched. The time point of the end position of the screen is the end of the period over which these calculations are done, going back the number of days specified in Days, or 14 days by default.

With Export in the left middle menu data can be saved in tab separated format (.tsv), thereafter you can also analyze the data using whatever statistics software you like. In the following link is shown how you can do this using the R package Iglu. https://www.juggluco.nl/Juggluco/iglu.html

Receive glucose values

Starting with Juggluco 4.1.0, other apps can receive glucose values from a glucose broadcast

In Juggluco's settings you can configure Juggluco to send its glucose values to other apps. Juggluco can send three types of such broadcasts.

The Patched Libre broadcast was originally used by the patched Librelink app and can be used to send glucose values to xDrip.

EverSense Broadcast: a better alternative for the Patched Libre broadcast.

The xDrip broadcast was originally used by xDrip and can be used to send glucose values to AAPS.

The Glucodata broadcast came with Juggluco and can be sent to G-Watch and GlucoDataHandler

LibreView

In settings, you can also ask Juggluco to sent glucose values to Libreview. For this it creates data points for every 15 minutes, by averaging the stream values around that point, so you don't need to scan to make use of it. In Libreview you can select "Download Glucose Data" to download these data to a .csv file. This data can be imported in apps like Diabetes:M.

In Libreview under Account Settings->My Devices you can delete all data send to Libreview from a particular device. So if you don't like the data or want to send everything anew with a new version of Juggluco, you can do that. Maybe it is a good idea, to decline to share your glucose and product-related data for the purposes of research under Account Settings->Profile

To also send amounts of insulin, carbohydrate, etc. to Libreview you have to specify for each label what should be done with it (Settings->Libreview->Send amounts).

I have to mention that you can also save glucose values in Juggluco itself, by going to Left middle menu-> export and select Stream, in this case you get a value for every minute. To view some statistics of these data you can go to Left middle menu-> Statistics (see Aggregate data).

No manual calibration

Freestyle Libre 1 and 2 sensors as used by Abbott Librelink app are not manually calibrated; Finger prick glucose measurements are not used to adjust the sensor readouts.

Some people demand that Juggluco should add manual calibration. I don't know the exact reason why. Some may not known that Freestyle Libre sensors are factory calibrated. But I think that the reason is that they see a discrepancy between the sensor readout and the finger prick glucose value and hope by adjusting the sensor readout it will better approach the finger prick.

In Juggluco you can't manually calibrate, because I am afraid it will make it worse. When I look at my own glucose measurements, they don't diverge always in the same direction. The direction will also depend on what moments you do your finger pricks. If you check always a low sensor readout, you will find that the sensor readings are too low. If you do a finger prick when you sense a hypo, but the sensor doesn't show one, you will find that the sensor gives too high values.

For some time I have sent the sensor glucose values from Juggluco to xDrip and have entered all my finger pricks as calibration data in xDrip. As a results the readings of xDrip were much worse than the not manually calibrated values of Juggluco.

Why should other users do better?

There is also the difficulty of sensor range. The sensor doesn't give values lower than 2.2 mmol/L. If the sensor values are more than 1.7 mmol/L lower than blood glucose, it can't detect hypoglycemia anymore. If the sensor gives LO (lower than 2.2 mmol/L), it means in reality lower than 4.2 mmol/L when it's readings are 2 mmol/L too low. So it can be 4.2 mmol/L (nothing to worry about) are 1.4 mmol/L (at the border of getting unconscious.) If a sensor readings consistently diverges so much from the blood glucose, you shouldn't use the sensor anymore.

Getting a replacement from Abbott can give difficulties. Although they easily replace sensors that fall off, they can be very difficult when you want a replacement because of poor readings. Probably they think that the sensors are always so bad, so that replacement doesn't make a difference.

Here is a list of restrictions, based on a dutch e-mail I received from Abbott:

From the telephone conversation with Abbott customer service I understood that they consider less than 30% off as acceptable. This seemed to be calculated as the absolute difference divided by the sensor value. Sensor measurement 2.4 mmol/L and a blood glucose measurement of 4.9 mmol/L was interpreted as more than 100% difference.

How the different measurements are integrated I don't know, but it sounds like they only accept that the sensor is wrong if it diverges at all occasions.

I had a sensor that was off 4 mmol/L (72 mg/dL) (the different between the sensor and blood glucose measurement was 4 mmol/L (72 mg/dL)) and the customer service didn't accept that as a fault of the sensor, because I had only scanned at the moment of the blood glucose measurement.

Android 13

Previously there were reports of Bluetooth connection problems with devices running Android 13 with Libre 2 and 3 sensors. It seems that after a system update they don’t exist anymore. I myself updated recently to Android 13. Bluetooth functioned perfectly. There is only one difference of significance: apps I killed with “Force stop” restart more often than under Android 12. When a US Libre 2 sensor or Libre 3 sensor was started with Abbott’s Libre app, that app will restart more easily and disrupt the connection of Juggluco with the sensor.

Open Source

Juggluco's source code can be found at: https://github.com/j-kaltes/Juggluco

NFC NovoPens

Juggluco 4.13.0 and later contains support for NFC NovoPen® 6 & NovoPen Echo®Plus insulin pens. Just hold the back of the pen to the NFC sensor in your phone with Juggluco in the foreground. Thereafter, you can specify with what label the new values have to be saved. For the case you have previously entered the insulin dose data by hand, you can specify that only doses after a certain date and time should be added.

After you have scanned the NFC NovoPen you can select the label for the insulin
Chooser shown when you scan the pen without Juggluco in the foreground.

When you hold the back of the pen to the NFC sensor in the phone with Juggluco not in the foreground, a chooser will emerge with Juggluco and "New tag collected".

If you want only Juggluco to be activated you can disable com.android.apps.tag with the following command:

adb pm disable-user --user 0 com.android.apps.tag

Most people will not miss anything after disabling com.android.apps.tag, but you can enable it again with:

adb pm enable com.android.apps.tag

See https://www.androidphonesoft.com/blog/what-is-new-tag-scanned-android for more information about com.android.apps.tag

Followers

Juggluco has multiple possibilities to send glucose values to other devices in real-time so that someone else can follow the glucose readings from Freestyle Libre 2 or 3 sensors with little delay.

Mirror

With mirror you can display all data of Juggluco to another instance of Juggluco running on an Android device or Android emulator running under Windows, Macintosh or Linux.

To connect two phones it is mostly necessary to connect both to Juggluco server running on a computer or to the Android Juggluco app running on a phone or tablet left at home connected to the internet via a modem.

Nightscout

Juggluco and Juggluco server incorporate a Nightscout server to which Nightscout followers can connect. It can not be used with all Nightscout apps: the Android app NS Client and the IOS apps Nightscout and Nightscout X only work with a particular Nightscout implementation. The last two do nothing more than displaying the Nightscout web page.

For more information, see the help in Juggluco under Left menu->Settings->Webserver.

If you want to make a program making use of it, see https://www.juggluco.nl/Juggluco/webserver.html

You can also upload glucose values from Juggluco to https://github.com/nightscout/cgm-remote-monitor. See Left menu->Settings->Uploader->Help.

LibreLinkUp

Glucose values sent to Libreview can also be sent to Abbott's LibrelinkUp app. When Left menu->Settings->Libreview->Immediate is set, Juggluco (4.16.0 or above) will send every glucose value received from Libre 2 or 3 sensors to Libreview. In Abbott's Libre app under Connected apps->Librelinkup you can invite an e-mail address to receive these data.

Volunteer work

Do you want to help diabetics better control their blood sugar levels so they can live longer and have fewer complications from diabetes? Then you can support Juggluco in many ways. First of all, there is a need for translations into other languages ​​and updates to the current translations. It is also possible to create additional features based on Juggluco's blood sugar readings. For example, one user has requested an app that sends an SMS message when blood sugar levels are low. You could develop an app that receives a glucose broadcast from Juggluco and sends an SMS when blood sugar levels are below a certain level. In addition, there is a need to transmit the glucose value from Juggluco to other smartwatches and fitness watches.

Translations

Juggluco is currently available in Chinese, English, German, Russian, Italian, French, Polish, Ukrainian, Portuguese, Dutch and Belarusian. There is a need for translations into other languages and updates to current translations. See Help for more information.

Data Analysis

Juggluco's data can be exported to a file or sent to other apps via broadcasts or a web interface. There is demand for the analysis and display of these data, for example to send a quick overview to a medical practitioner.

Watches

Make a watch app to display glucose values received from Juggluco. Add Watch

Transfer data to a new phone

Transferring data to another phone can with Juggluco’s mirror function: left middle menu→Mirror.

Another possibility is to use tar via adb:

First install and run Juggluco on the new phone, then force stop Juggluco on the new phone.

On the computer while connected to the old phone:

adb exec-out run-as tk.glucodata tar -cf - ./files > all.tar

On the computer while connected to the new phone:

Under sh (Linux) and Command Prompt (Windows):

adb exec-in run-as tk.glucodata tar -xf - < all.tar

Or under Powershell or sh:

cat all.tar|adb exec-in run-as tk.glucodata tar -xf -