Nightscout LibreLinkUp Uploader

by timoschlueter


Nightscout LibreLink Up Uploader/Sidecar


Script written in TypeScript that uploads CGM readings from LibreLink Up to Nightscout. The upload should work with at least Freestyle Libre 2 (FGM) and Libre 3 CGM sensors.



The script takes the following environment variables

Variable Description Example Required LINK_UP_USERNAME LibreLink Up Login Email X LINK_UP_PASSWORD LibreLink Up Login Password mypassword X LINK_UP_CONNECTION LibreLink Up Patient-ID. Can be received from the console output if multiple connections are available. 123456abc-abcd-efgh-7891def LINK_UP_TIME_INTERVAL The time interval of requesting values from libre link up 5 LINK_UP_REGION Your region. Used to determine the correct LibreLinkUp service (Possible values: AE, AP, AU, CA, DE, EU2, EU2, FR, JP, US) EU NIGHTSCOUT_URL Hostname of the Nightscout instance (without https://) X NIGHTSCOUT_API_TOKEN SHA1 Hash of Nightscout access token 162f14de46149447c3338a8286223de407e3b2fa X NIGHTSCOUT_DISABLE_HTTPS Disables the HTTPS requirement for Nightscout URLs true NIGHTSCOUT_DEVICE_NAME Sets the device name used in Nightscout nightscout-librelink-up LOG_LEVEL The setting of verbosity for logging, should be one of info or debug info SINGLE_SHOT Disables the scheduler and runs the script just once true ALL_DATA Upload all available data from LibreLink Up instead of just data newer than last upload. LibreLinkUp sometimes lags behind in reporting recent historical data, so it is advised to run the script with ALL_DATA set to true at least once a day. true


There are different options for using this script.

Variant 1: On Heroku

  • Click on Deploy
  • Login to Heroku if not already happened
  • Provide proper values for the environment variables
  • Important: make sure that yor Nightscout API token is hashed with SHA1
  • Click Deploy to deploy the app

Variant 2: Local

The installation process can be started by running npm install in the root directory.

To start the process simply create a bash script with the set environment variables (

export LINK_UP_PASSWORD="mypassword"
# use `shasum` instead of `sha1sum` on Mac
export NIGHTSCOUT_API_TOKEN=$(echo -n "librelinku-123456789abcde" | sha1sum | cut -d ' ' -f 1)
export LOG_LEVEL="info"

npm start

Execute the script and check the console output.

Variant 3: Docker

The easiest way to use this is to use the latest docker image:

docker run -e LINK_UP_USERNAME="" \
           -e LINK_UP_PASSWORD="mypassword" \
           -e LINK_UP_TIME_INTERVAL="5" \
           -e LINK_UP_REGION="EU" \
           -e NIGHTSCOUT_URL="" \
           -e NIGHTSCOUT_API_TOKEN=$(echo -n "librelinku-123456789abcde" | sha1sum | cut -d ' ' -f 1) \
           -e LOG_LEVEL="info" \

Variant 4: Docker Compose

If you are already using a dockerized Nightscout instance, this image can be easily added to your existing docker-compose file. In this example, the region is set for germany ("DE"):

version: '3.7'

    image: timoschlueter/nightscout-librelink-up
    container_name: nightscout-libre-link
      LINK_UP_PASSWORD: "mypassword"
      NIGHTSCOUT_API_TOKEN: "14c779d01a34ad1337ab59c2168e31b141eb2de6"
      LOG_LEVEL: "info"

Hashing API token

NIGHTSCOUT_API_TOKEN must be a SHA1 hash of an Access Token from Nightscout (Add new subject first in Nightscout's Admin Tools if required), e.g. your Access Token for a subject named LibreLinkUp might be librelinku-123456789abcde.

Obtain your hash with

echo -n "librelinku-123456789abcde" | sha1sum | cut -d ' ' -f 1

(use shasum instead of sha1sum on Mac)

which will print the hash (40 characters in length):


You might also use an online tool to generate your hash, e.g.


  • Integration into Nightscout: I have not yet looked into the plugin architecture of Nightscout. Maybe this should be converted into a plugin.