CYGM Build one

↑↓ to move Enter to open Esc to close ? for shortcuts

00 Release notes v1.1.10 Release

2026-10-15

Every release, and what changed in it

These are the notes the device itself shows you after an update, kept here in full so you can read what you are about to install, or work out which release fixed the thing that was bothering you.

Release history

v1.1.10 Current

2026-10-15 Release

Fixed

  • The background is black again. 1.1.9 put a dark navy field behind every screen; the cards and outlines keep their new look on the familiar black
  • In the full-screen glucose view the small clock in the top bar could break onto two lines. It stays on one line now

Sorry for the double update - these were missed before 1.1.9 shipped

v1.1.9

2026-10-15 Release

A Fresh Look

  • Every screen now sits on a deep navy field with matching cards, so text and readings stand out more than before
  • Alarm tiers, settings rows and status cards carry their colour as a thin outline with a cut corner, instead of a bar down the side
  • A new on-screen keyboard laid out like a phone's, with two symbol pages so any WiFi or sign-in password can be typed
  • Sliders and switches have a brushed-metal knob; tapping rows and icons no longer flashes them
  • The weather icons are redrawn and gently move: the sun's rays turn, clouds drift, rain and snow fall
  • The trend graph shows your low and high thresholds as dashed lines with labels on the axis
  • Screens switch instantly; there are no fades

Time Zones

  • About sixty more places now get their correct clock and daylight-saving rule, including the Balkans, the Baltics, Iceland, Cyprus, the Gulf states, most of Africa, Central America and the Caribbean, Cuba, Mongolia and the Pacific islands. Before this, a location in one of them could show a clock an hour off through the summer

Fixed

  • If something kept the screen busy while a WiFi scan finished, the "Scanning" card could stay up for good. It now waits its turn
  • The trend graph's small captions no longer run into each other

A Small Surprise

  • On a clear night, when the weather icon shows the moon, tap it

v1.0.4

2026-10-09 Release

Fixed: LibreLinkUp Sign-In Outside the US

  • Signing in to LibreLinkUp failed for a user in the UK with "The server refused the sign-in", while the same account worked everywhere else. The cause was on the device: the reply to a sign-in carries the whole account record, and a fuller account - one linked to a clinic, with a registered phone, or with a longer consent history - is larger than the space the device had set aside for it. The reply was cut short, could not be read, and the sign-in failed. Accounts in the UK and Europe tend to carry more of that record than the US accounts the device was tested with, which is why it showed up there first
  • The device now reads the reply as it arrives and keeps only the handful of fields it needs, so the size of the account record no longer matters. Confirmed working by the user who reported it, on their own account, before this release
  • A second fault found on the way is fixed too. When LibreLinkUp wants something from you first - new terms, a privacy policy, or an unverified email address - it answers a sign-in with a short-lived ticket meant only for its own app. The device used to take that as a successful sign-in and then show no data. It now says what is needed and points you to the LibreLinkUp app

Clearer Sign-In Messages

  • A wrong email or password is now reported as a wrong email or password
  • A pending step in the LibreLinkUp app is reported as that, with the step named
  • If the service ever stops accepting this firmware's version, the device says so and asks you to update, instead of failing with a generic message

Thank You

  • This release exists because someone took the time to open an issue, and then took the time again to test the fix on their own device. That is the whole loop, and it worked

v1.0.3

2026-09-20 Release

1.0 - Thank You For Getting It Here

  • This is the first CYGM release that is not labelled Beta. Every build before this one carried that word, and it has earned its way off the label: the last six months went into the things that decide whether you can trust what the screen says - alarms that behave predictably, readings that are never older than they look, connections that are checked, and memory that does not quietly run out after a few days
  • It is not one person's milestone. Nearly every fix below began with somebody saying "this happened to me" - a parent left with an alarm that would not stop, families running battery-free builds, people who fitted an SD card that a computer read perfectly and a CYGM would not, testers who put an unreleased build on their own hardware and then sat down and wrote up what went wrong. That is a real favour to ask of anyone, and more of one to ask of people already managing diabetes at home. Thank you
  • If you are updating from v0.16.3, the last public release, this is six months of work arriving at once. Everything in between went only to a small group of invited testers, so almost all of it is new to you
  • What has not changed is the safety position, and 1.0 does not change it. CYGM is an experimental secondary display. It is not FDA-cleared and it has not been clinically validated. Keep your official CGM receiver or app switched on and make every treatment decision from that. CYGM is the number you can read from the other side of the room, not the one you dose from. A version number reading 1.0 instead of 0.23 does not move that line by a millimetre
  • One thing to know before you press update: there is no way back over the air. Once a device is on 1.0 it will refuse an older version as an update. Going back to a 0.x build means flashing it with a USB cable from cygm.me

Important: Alarms Sound Differently Now - please read this one

  • This release changes when an alarm stops making noise. If anyone in your household relies on a CYGM alarm sounding until somebody comes to it, read all six points below before you update
  • The tone now stops after three minutes on the High Alarm, High Warning and Low Warning tiers. An alarm on one of those that nobody silences falls quiet after three minutes instead of sounding indefinitely. The screen keeps flashing throughout on any tier you have left Screen Flash switched on, so the alert is quietened, never withdrawn
  • It comes back on its own. If your glucose is still out of range two readings later - roughly ten minutes - the tone sounds again, and it keeps coming back for as long as you are out of range. This behaviour exists because a user was left with an alarm that would not stop and took the trouble to tell me. Thank you!
  • The low end never goes quiet, and that is deliberate. The urgent-low safety alarm and the Low Alarm both sound until somebody answers them. There is no three-minute pause down there and there is not going to be one: a low that nobody hears is the thing this device exists to prevent
  • If you want a tier to sound until someone answers it, switch that on yourself. Each alarm's page now has a Keep Sounding switch, in the place where the Repeat switch used to be. A tier with it turned on ignores both the three-minute pause and the thirty-minute unattended stand-down. The three tiers that can pause start with it off, because an alarm that never stops should be something you chose
  • The Repeat switch is gone, and every alarm now repeats. Repeat used to decide whether an alarm sounded once or over and over; every alarm now repeats until it is answered, so the choice no longer exists. If you had Repeat switched off on a tier, that tier used to beep once and stop. After this update it will sound repeatedly instead, capped at three minutes as above. You do not have to do anything, but it is a real change to how that tier behaves, and it is the one setting of yours that this update overrides without asking. Check your alarm pages after updating
  • Silencing or snoozing an alarm by hand works exactly as it did, and a reading that crosses into a more serious level sounds straight away rather than waiting out a pause

Fixed: Alarms That Could Miss You

  • The urgent-low floor now fires even when the Low Alarm is switched off, as the guide always promised
  • Snoozing a warning no longer silences a later, more serious alarm in the same window
  • An alarm raised while you are in the settings can no longer be hidden by the return-to-home timer while the tone is still playing
  • A projected-low or data-gap card now closes itself after a minute. These cards show the reading from the moment they appeared, which is right when they are fresh and misleading when they are not: one sat on a test device overnight showing 118 while the real reading had moved to 103 and was still falling. They stand down after sixty seconds now, whatever the alarm settings say

Fixed: Old Readings Never Look Current

  • If the clock is not set yet, or a provider sends a reading with a broken timestamp, the display says so instead of showing "Just now" forever
  • LibreLinkUp timestamps are read in UTC, so a device in a different time zone from the phone no longer shows stale data as fresh, or fresh data as stale
  • Readings outside 20-600 mg/dL are rejected as server artefacts rather than displayed, charted and alarmed on. An older reading that arrives after a newer one is ignored
  • The reading history survives a reboot intact past 255 entries

New: A Trend Arrow You Can Read Across the Room

  • The countdown ring around the trend arrow is gone and the arrow has taken the space back. It is drawn as a solid head with a trail fading out behind it, so which way your glucose is moving reads from further away and at a glance. Knowing which way it is going from the bedroom doorway at three in the morning is most of what this device is for, so the arrow got the room it needed
  • A city name too wide for its slot now drifts slowly across and rests for twenty seconds at each end, instead of being cut off. Short names sit still, exactly as before

New: The Device Sets Itself Up

  • A new device now walks you through setup instead of leaving you to go looking for it. Accept the notice on first boot and a card appears for each of the three things the device needs: WiFi first, then your location, then your CGM. Tapping a card opens the right screen for it
  • Every card has a Skip setup button that ends the walkthrough for good, and anything you have already set up is passed over, so it gets out of the way the moment the device is ready. It only ever appears after a fresh install or a device reset, and each card says so
  • Alarm thresholds can be typed. Tap the number at the top of an alarm's page and a keypad opens, so the threshold lands on the exact value you wanted instead of wherever the slider stopped

Fixed: microSD Cards

  • Cheap cards work now. Most inexpensive 8 to 32GB cards decline an optional error-checking step during start-up. The SD specification allows that; the device was treating the refusal as a broken card, so a healthy card that mounted in any computer came up as nothing at all. If you bought a card, tried it, and gave up, try that same card again - it was never the card, and it was never you
  • A card put in later is found on its own. Fitting a card used to mean restarting the device. One pushed in while it is running is now picked up on the next reading cycle, usually inside two minutes, and a small card symbol appears on the home screen
  • The device says why a card was refused. "No card" used to be the answer to every card problem, including a card sitting right there. It now tells the three cases apart: nothing fitted, a card it can talk to but not read, and a card it cannot use at all. For the middle case it offers to format the card, warning first that this erases everything on it and cannot be undone. Formatting as FAT32 on a computer works just as well, and the device says so on the same card
  • Cards larger than 32GB are refused on purpose, with the reason given. They are sold in a format this device does not read, and a card that half-works is worse than one that says no
  • A card that stops answering is retried rather than written off, so logging comes back instead of staying dead until a restart, and a card taken out and put back into a running device resumes logging
  • A card that stops accepting writes pauses logging and says so once, instead of failing silently every cycle

New: Your Readings, Off the Card

  • Each row the device writes to the card now carries the provider's own timestamp, which provider it came from, the reading's status and age, the battery, the signal, free memory, uptime and any alarm in force - behind the same three columns as before, so files already written stay readable. Every new day file gets a header explaining itself
  • The device can also hand a day's readings straight down the USB cable, so the card can be read without taking it out. cygm.me/tools does both, and will export a day as a report, a spreadsheet, a document, CSV or JSON
  • Reading a day down the cable is reliable now, and was not before. The USB link drops the odd byte during a long transfer - the computer reports it as a hardware receive overrun, and it is not something either end can prevent in software. Asking for a whole day in one go meant one dropped byte cost the entire transfer, so most attempts failed and trying again simply gambled the whole file a second time. The device now hands a file over in small pieces with a checksum on each, so a damaged piece is asked for again on its own. On the bench this took a day file that failed four times out of five to six days copied in a single go
  • Nothing identifying goes into that file. It is your readings and the health of the device, and the diagnostic diary is off unless you deliberately turn it on for a session

Security: Verified Connections to Your CGM Cloud

  • The device now checks the identity of every server it talks to over HTTPS: Dexcom Share, LibreLinkUp, your Nightscout site, and the firmware update download. Before this release those connections were encrypted but the server was never verified, so someone on the same network could have read your login or fed the device false readings. If you read only one reason to update, this is it
  • A self-signed certificate on a private Nightscout site is not supported. Enter the address with http:// for a server on your own network, or use a real certificate
  • Firmware updates are only ever fetched from cygm.me, and a downgrade offered by a tampered manifest is refused

Security: Nothing Secret in the Logs

  • The WiFi password and the Nightscout token no longer appear in the serial log or in the log file on the SD card. If you ran an earlier version with serial logging on, wipe that card
  • Your Dexcom or LibreLinkUp password was never logged

Privacy: The Device Sends Less, and Sends It Encrypted

  • The online counter no longer receives your device's hardware address. The device makes up a random identifier for itself the first time it needs one and keeps it in its own storage; Erase Device wipes it, so a wiped device is a new device to the counter
  • The check-in, the weather forecast, the location lookup and the update check now all travel over encrypted, certificate-checked connections. Before this release they were sent in the clear
  • The serial and SD diagnostic log no longer contains your network name, your CGM account name or email, your location, or any identifier. Status codes, error codes and memory numbers stay, so a log you share for support is still useful

Fixed: The Slow Decline After a Few Days

  • A slow memory leak, present in every version until now. Every weather update lost about 96 bytes that were never given back. Over two to three days of uptime that was enough to start failing secure connections, which is exactly the sort of thing that looks like "it just stopped working after a few days." If that is what your device has been doing, that is why. Found and fixed
  • 24KB of memory that was being thrown away. The drawing buffers behind the trend arrow and the small status icons had been asked for in the wrong unit, so each reserved twice the space it needed. On a running device free memory went from about 28KB to about 53KB, and the largest single block it can hand out went from 16KB to 40KB - and that block is what a secure connection needs in one piece
  • Two ways the device could freeze or lose all network access without rebooting are closed. Tasks now stop themselves at a safe point instead of being killed
  • A deeply nested reply from a server can no longer put the device into a reboot loop
  • The home screen could keep an old glucose number, temperature or sunrise time when a repaint lost a race with the screen refresh. It now retries a second later instead of waiting for the next reading or the next forecast
  • The check-in, the weather fetch and the update check each make sure there is enough memory before opening a secure connection, and skip that cycle rather than take memory from the thing that actually matters, which is fetching your glucose
  • Time sync now uses all three configured servers instead of only the first

Fixed: Devices Running Without a Battery

  • A device with no cell fitted reads the charger's own voltage, and it was being judged before the device knew whether a battery was there at all. So a USB-powered device announced a flat battery every time it started - and on some builds shut itself back down a few seconds into every boot, which took a physical power cycle to escape. It now waits until it knows what it is looking at. If you built yours without a cell and it has been behaving like that, it was the firmware, not your soldering

Fixed: Updates, and the Things That Stopped Them

  • A device with an SD card fitted could never check for updates. Holding a card mounted costs memory, and the check needs a block of it in one piece; on a device with a card there was never enough, so the check quietly failed every time, for months, on every version. The device now hands that memory back for the length of the check and takes it again afterwards
  • Searching for your town could fail for want of memory too. The threshold it has to clear is now set from what the search actually needs, rather than from a figure borrowed from the update check
  • Erase Device could confirm itself. The press that summoned the "are you sure" could land on the confirm button appearing underneath it, wiping the device from a single tap. The confirmation now ignores everything for a moment after it appears

New: An Update Channel for Testers

  • There is a Receive beta firmware tick box on the update screen. It is off unless you turn it on. Turning it off puts the device back on the public channel, but the device will not step down to an older build, so one already on a tester build stays there until a public release passes it. Flashing by cable from cygm.me is the way back
  • With it on, the device offers tester builds the same way it offers a release, except that it asks first and says in plain words that a beta build is what it is about to install. Beta builds arrive far more often than releases and any one of them may be rough
  • If you have ever wanted to be one of the people whose report turns into a line in a release note like this one, that tick box is where it starts

Fixed: Smaller Things

  • A town picked from the location search saved the timezone but not the town, so the next restart quietly went back to the previous one and took the weather and sunrise with it. Both are saved now
  • Your weather location survives a power cut in the middle of saving it
  • A failed sign-in says why it failed instead of nothing at all, and a rejected login now reads as rejected rather than as "no data"
  • A failed provider switch no longer costs you the login you already had
  • The About screen's disclaimer is no longer painted underneath the QR code
  • The device reports which version it is running with its regular check-in, so the map on cygm.me can tell builds apart

One Last Thing

  • CYGM is free, it is open source, and it stays that way. Nobody sells it, nothing phones home with your readings, and the parts come to about forty dollars. Build one, build a second for the other end of the house, change it, or take the whole thing apart and make something better out of it
  • It was built out of one family's night-times. It is steady enough to call 1.0 because of a lot of other families' patience. If something here is wrong, say so - that is how every line above happened

v1.0.1

2026-09-18 Release

1.0 - Thank You For Getting It Here

  • This is the first CYGM release that is not labelled Beta. Every build before this one carried that word, and it has earned its way off the label: the last six months went into the things that decide whether you can trust what the screen says - alarms that behave predictably, readings that are never older than they look, connections that are checked, and memory that does not quietly run out after a few days
  • It is not one person's milestone. Nearly every fix below began with somebody saying "this happened to me" - a parent left with an alarm that would not stop, families running battery-free builds, people who fitted an SD card that a computer read perfectly and a CYGM would not, testers who put an unreleased build on their own hardware and then sat down and wrote up what went wrong. That is a real favour to ask of anyone, and more of one to ask of people already managing diabetes at home. Thank you
  • If you are updating from v0.16.3, the last public release, this is six months of work arriving at once. Everything in between went only to a small group of invited testers, so almost all of it is new to you
  • What has not changed is the safety position, and 1.0 does not change it. CYGM is an experimental secondary display. It is not FDA-cleared and it has not been clinically validated. Keep your official CGM receiver or app switched on and make every treatment decision from that. CYGM is the number you can read from the other side of the room, not the one you dose from. A version number reading 1.0 instead of 0.23 does not move that line by a millimetre
  • One thing to know before you press update: there is no way back over the air. Once a device is on 1.0.0 it will refuse an older version as an update. Going back to a 0.x build means flashing it with a USB cable from cygm.me

Important: Alarms Sound Differently Now - please read this one

  • This release changes when an alarm stops making noise. If anyone in your household relies on a CYGM alarm sounding until somebody comes to it, read all six points below before you update
  • The tone now stops after three minutes on the High Alarm, High Warning and Low Warning tiers. An alarm on one of those that nobody silences falls quiet after three minutes instead of sounding indefinitely. The screen keeps flashing throughout on any tier you have left Screen Flash switched on, so the alert is quietened, never withdrawn
  • It comes back on its own. If your glucose is still out of range two readings later - roughly ten minutes - the tone sounds again, and it keeps coming back for as long as you are out of range. This behaviour exists because a user was left with an alarm that would not stop and took the trouble to tell me. Thank you!
  • The low end never goes quiet, and that is deliberate. The urgent-low safety alarm and the Low Alarm both sound until somebody answers them. There is no three-minute pause down there and there is not going to be one: a low that nobody hears is the thing this device exists to prevent
  • If you want a tier to sound until someone answers it, switch that on yourself. Each alarm's page now has a Keep Sounding switch, in the place where the Repeat switch used to be. A tier with it turned on ignores both the three-minute pause and the thirty-minute unattended stand-down. The three tiers that can pause start with it off, because an alarm that never stops should be something you chose
  • The Repeat switch is gone, and every alarm now repeats. Repeat used to decide whether an alarm sounded once or over and over; every alarm now repeats until it is answered, so the choice no longer exists. If you had Repeat switched off on a tier, that tier used to beep once and stop. After this update it will sound repeatedly instead, capped at three minutes as above. You do not have to do anything, but it is a real change to how that tier behaves, and it is the one setting of yours that this update overrides without asking. Check your alarm pages after updating
  • Silencing or snoozing an alarm by hand works exactly as it did, and a reading that crosses into a more serious level sounds straight away rather than waiting out a pause

Fixed: Alarms That Could Miss You

  • The urgent-low floor now fires even when the Low Alarm is switched off, as the guide always promised
  • Snoozing a warning no longer silences a later, more serious alarm in the same window
  • An alarm raised while you are in the settings can no longer be hidden by the return-to-home timer while the tone is still playing
  • A projected-low or data-gap card now closes itself after a minute. These cards show the reading from the moment they appeared, which is right when they are fresh and misleading when they are not: one sat on a test device overnight showing 118 while the real reading had moved to 103 and was still falling. They stand down after sixty seconds now, whatever the alarm settings say

Fixed: Old Readings Never Look Current

  • If the clock is not set yet, or a provider sends a reading with a broken timestamp, the display says so instead of showing "Just now" forever
  • LibreLinkUp timestamps are read in UTC, so a device in a different time zone from the phone no longer shows stale data as fresh, or fresh data as stale
  • Readings outside 20-600 mg/dL are rejected as server artefacts rather than displayed, charted and alarmed on. An older reading that arrives after a newer one is ignored
  • The reading history survives a reboot intact past 255 entries

New: A Trend Arrow You Can Read Across the Room

  • The countdown ring around the trend arrow is gone and the arrow has taken the space back. It is drawn as a solid head with a trail fading out behind it, so which way your glucose is moving reads from further away and at a glance. Knowing which way it is going from the bedroom doorway at three in the morning is most of what this device is for, so the arrow got the room it needed
  • A city name too wide for its slot now drifts slowly across and rests for twenty seconds at each end, instead of being cut off. Short names sit still, exactly as before

New: The Device Sets Itself Up

  • A new device now walks you through setup instead of leaving you to go looking for it. Accept the notice on first boot and a card appears for each of the three things the device needs: WiFi first, then your location, then your CGM. Tapping a card opens the right screen for it
  • Every card has a Skip setup button that ends the walkthrough for good, and anything you have already set up is passed over, so it gets out of the way the moment the device is ready. It only ever appears after a fresh install or a device reset, and each card says so
  • Alarm thresholds can be typed. Tap the number at the top of an alarm's page and a keypad opens, so the threshold lands on the exact value you wanted instead of wherever the slider stopped

Fixed: microSD Cards

  • Cheap cards work now. Most inexpensive 8 to 32GB cards decline an optional error-checking step during start-up. The SD specification allows that; the device was treating the refusal as a broken card, so a healthy card that mounted in any computer came up as nothing at all. If you bought a card, tried it, and gave up, try that same card again - it was never the card, and it was never you
  • A card put in later is found on its own. Fitting a card used to mean restarting the device. One pushed in while it is running is now picked up on the next reading cycle, usually inside two minutes, and a small card symbol appears on the home screen
  • The device says why a card was refused. "No card" used to be the answer to every card problem, including a card sitting right there. It now tells the three cases apart: nothing fitted, a card it can talk to but not read, and a card it cannot use at all. For the middle case it offers to format the card, warning first that this erases everything on it and cannot be undone. Formatting as FAT32 on a computer works just as well, and the device says so on the same card
  • Cards larger than 32GB are refused on purpose, with the reason given. They are sold in a format this device does not read, and a card that half-works is worse than one that says no
  • A card that stops answering is retried rather than written off, so logging comes back instead of staying dead until a restart, and a card taken out and put back into a running device resumes logging
  • A card that stops accepting writes pauses logging and says so once, instead of failing silently every cycle

New: Your Readings, Off the Card

  • Each row the device writes to the card now carries the provider's own timestamp, which provider it came from, the reading's status and age, the battery, the signal, free memory, uptime and any alarm in force - behind the same three columns as before, so files already written stay readable. Every new day file gets a header explaining itself
  • The device can also hand a day's readings straight down the USB cable, so the card can be read without taking it out. cygm.me/tools does both, and will export a day as a report, a spreadsheet, a document, CSV or JSON
  • Nothing identifying goes into that file. It is your readings and the health of the device, and the diagnostic diary is off unless you deliberately turn it on for a session

Security: Verified Connections to Your CGM Cloud

  • The device now checks the identity of every server it talks to over HTTPS: Dexcom Share, LibreLinkUp, your Nightscout site, and the firmware update download. Before this release those connections were encrypted but the server was never verified, so someone on the same network could have read your login or fed the device false readings. If you read only one reason to update, this is it
  • A self-signed certificate on a private Nightscout site is not supported. Enter the address with http:// for a server on your own network, or use a real certificate
  • Firmware updates are only ever fetched from cygm.me, and a downgrade offered by a tampered manifest is refused

Security: Nothing Secret in the Logs

  • The WiFi password and the Nightscout token no longer appear in the serial log or in the log file on the SD card. If you ran an earlier version with serial logging on, wipe that card
  • Your Dexcom or LibreLinkUp password was never logged

Privacy: The Device Sends Less, and Sends It Encrypted

  • The online counter no longer receives your device's hardware address. The device makes up a random identifier for itself the first time it needs one and keeps it in its own storage; Erase Device wipes it, so a wiped device is a new device to the counter
  • The check-in, the weather forecast, the location lookup and the update check now all travel over encrypted, certificate-checked connections. Before this release they were sent in the clear
  • The serial and SD diagnostic log no longer contains your network name, your CGM account name or email, your location, or any identifier. Status codes, error codes and memory numbers stay, so a log you share for support is still useful

Fixed: The Slow Decline After a Few Days

  • A slow memory leak, present in every version until now. Every weather update lost about 96 bytes that were never given back. Over two to three days of uptime that was enough to start failing secure connections, which is exactly the sort of thing that looks like "it just stopped working after a few days." If that is what your device has been doing, that is why. Found and fixed
  • 24KB of memory that was being thrown away. The drawing buffers behind the trend arrow and the small status icons had been asked for in the wrong unit, so each reserved twice the space it needed. On a running device free memory went from about 28KB to about 53KB, and the largest single block it can hand out went from 16KB to 40KB - and that block is what a secure connection needs in one piece
  • Two ways the device could freeze or lose all network access without rebooting are closed. Tasks now stop themselves at a safe point instead of being killed
  • A deeply nested reply from a server can no longer put the device into a reboot loop
  • The home screen could keep an old glucose number, temperature or sunrise time when a repaint lost a race with the screen refresh. It now retries a second later instead of waiting for the next reading or the next forecast
  • The check-in, the weather fetch and the update check each make sure there is enough memory before opening a secure connection, and skip that cycle rather than take memory from the thing that actually matters, which is fetching your glucose
  • Time sync now uses all three configured servers instead of only the first

Fixed: Devices Running Without a Battery

  • A device with no cell fitted reads the charger's own voltage, and it was being judged before the device knew whether a battery was there at all. So a USB-powered device announced a flat battery every time it started - and on some builds shut itself back down a few seconds into every boot, which took a physical power cycle to escape. It now waits until it knows what it is looking at. If you built yours without a cell and it has been behaving like that, it was the firmware, not your soldering

Fixed: Updates, and the Things That Stopped Them

  • A device with an SD card fitted could never check for updates. Holding a card mounted costs memory, and the check needs a block of it in one piece; on a device with a card there was never enough, so the check quietly failed every time, for months, on every version. The device now hands that memory back for the length of the check and takes it again afterwards
  • Searching for your town could fail for want of memory too. The threshold it has to clear is now set from what the search actually needs, rather than from a figure borrowed from the update check
  • Erase Device could confirm itself. The press that summoned the "are you sure" could land on the confirm button appearing underneath it, wiping the device from a single tap. The confirmation now ignores everything for a moment after it appears

New: An Update Channel for Testers

  • There is a Receive beta firmware tick box on the update screen. It is off unless you turn it on. Turning it off puts the device back on the public channel, but the device will not step down to an older build, so one already on a tester build stays there until a public release passes it. Flashing by cable from cygm.me is the way back
  • With it on, the device offers tester builds the same way it offers a release, except that it asks first and says in plain words that a beta build is what it is about to install. Beta builds arrive far more often than releases and any one of them may be rough
  • If you have ever wanted to be one of the people whose report turns into a line in a release note like this one, that tick box is where it starts

Fixed: Smaller Things

  • A town picked from the location search saved the timezone but not the town, so the next restart quietly went back to the previous one and took the weather and sunrise with it. Both are saved now
  • Your weather location survives a power cut in the middle of saving it
  • A failed sign-in says why it failed instead of nothing at all, and a rejected login now reads as rejected rather than as "no data"
  • A failed provider switch no longer costs you the login you already had
  • The About screen's disclaimer is no longer painted underneath the QR code
  • The device reports which version it is running with its regular check-in, so the map on cygm.me can tell builds apart

One Last Thing

  • CYGM is free, it is open source, and it stays that way. Nobody sells it, nothing phones home with your readings, and the parts come to about forty dollars. Build one, build a second for the other end of the house, change it, or take the whole thing apart and make something better out of it
  • It was built out of one family's night-times. It is steady enough to call 1.0 because of a lot of other families' patience. If something here is wrong, say so - that is how every line above happened

v0.16.3

2026-09-05 Beta

NEW: See Devices Around the World

  • cygm.me now shows a live map of the devices that are online. Click the "N online" counter at the top of the site to open it
  • Your device now sends the city from your weather settings with its regular check-in, so it shows up in the right place. Without it the site can only guess from your internet connection, which lands on your provider's nearest hub, often ten miles or more from where you actually are
  • Only the city and its rough coordinates are sent. Nothing about your glucose readings, your CGM account, or your network goes with it
  • If you have not set a weather location, nothing extra is sent and the map falls back to the rough guess

Fixed: Update Card Showed the Previous Release

  • The "What's New" card shown after an update was listing the notes from the version before it

v0.16.2

2026-09-04 Beta

Fixed: Celsius Weather Was Wildly Wrong

  • Anyone showing weather in Celsius saw temperatures far below reality (a 21° day displayed as -6°). The reading was being converted from Fahrenheit twice. Reported by users in Hunan and Shanghai. Thank you!
  • Switching between C and F on the home screen now updates instantly and correctly

Fixed: Rain Showers Showed as "Snow"

  • Showery rain was mapped to the snow icon and label. It is rain again.

NEW: Battery-Free Builds Get a Plug Icon

  • Devices running with no battery fitted used to show a made-up charge percentage (often 5%). The device now detects that no battery is present and shows a plug icon instead of the gauge
  • Low-battery warnings and the low-voltage shutdown are skipped when no battery is fitted

v0.16.0

2026-08-24 Beta

Fixed: Nightscout Settings Now Survive Reboots

  • Nightscout users WITHOUT an API token (public sites) were asked to re-enter their settings after every power loss — the device was saving them but a bug made it think they were missing on boot. Reported by a father running a battery-free build in China, where every outage forced a re-setup and silenced alarms until someone noticed. Thank you!
  • If that was you: update, enter your settings once more, and they will stick from then on

NEW: What Changed, Right on the Device

  • After each firmware update, the home screen shows a one-time card with the new version number and a short list of what changed — no more guessing what an update did
  • It waits its turn: never over an alarm, the night face, or the display settings, and it comes back after a reboot if you never tapped OK

v0.15.3

2026-08-12 Beta

Auto-Snooze, Now Yours to Control

  • NEW 'Unattended' page in Alert Options: turn the 30-minute auto-snooze on or off. The control deliberately takes a three-second hold — a safety setting should never flip from a stray tap
  • With auto-snooze OFF, an unattended alarm sounds until someone responds
  • Tone-only alarms (tiers with Screen Flash turned off) now auto-snooze after 30 untouched minutes too — previously only the full-screen takeover did

v0.15.2 (same night)

  • If an alarm sits unacknowledged for 30 minutes — no snooze, no dismiss, no touch on the screen at all — it stands down by itself and the display returns to the home screen
  • It stands down as a snooze, never a dismiss: if the reading is still out of range when the snooze window ends, the alarm fires again at full strength. A missed alarm can never go permanently silent

v0.15.2

2026-08-12 Beta

Unattended Alarm Timeout

  • If an alarm takeover sits unacknowledged for 30 minutes — no snooze, no dismiss, no touch on the screen at all — it now stands down by itself and the display returns to the home screen
  • It stands down as a snooze, never a dismiss: if the reading is still out of range when the snooze window ends, the alarm fires again at full strength. A missed alarm can never go permanently silent — and a flashing takeover no longer holds the screen all night over an empty room

v0.15.1

2026-08-08 Beta

The Big Responsiveness + Safety Upgrade

Faster, Smoother UI

  • Display clock raised 26→40MHz and UI refresh raised to 30 FPS — screen transitions and chart taps are visibly snappier
  • Every button now gives instant pressed-state feedback and has larger touch targets (50px minimum)
  • Removed hidden delays: back-button no longer stalls the screen for 100ms; 'Check for updates' no longer freezes the UI for up to 10 seconds (it now runs in the background with a progress overlay)
  • Home screen stopped redrawing widgets that hadn't changed — less churn, cooler chip, steadier feel

Smarter, Safer Alarms

  • NEW Data-gap alert: if readings stop arriving (default 20 min) the device tells you — and names the likely cause (WiFi down, service unreachable, sensor gap). Stale data no longer fails silently
  • NEW Urgent-low guard: the lowest-tier alarm always sounds at full volume — through snooze, quiet hours, and mute. Non-disableable by design
  • NEW Predictive low warning: warns up to ~20 minutes before a projected urgent low (on by default, conservative)
  • NEW Optional rate-of-change alert for fast rises/falls (off by default)
  • NEW Escalating volume: an unacknowledged alarm steps louder every few minutes
  • NEW Quiet hours: schedule a window where non-urgent alerts go visual-only — urgent low still breaks through
  • NEW Full-screen alarm takeover: huge value display, plain-language reason, and two giant SNOOZE / DISMISS buttons you can hit at 3am
  • Alarm settings now use versioned storage with migration — future updates will never silently reset your alarms again
  • New 'Alert Options' pages in Alarms for all of the above (quiet hours, escalation, data-gap, predictive, safety floor)

Night & Display

  • NEW Scheduled night mode: auto-dims to your chosen level on your schedule, with a minimal red-on-black night face (clock + glucose + arrow) for dark bedrooms
  • NEW Inactivity dim with tap-to-wake — first tap only wakes the screen, it never presses anything
  • NEW The boot button now does things: press to snooze an active alarm, or to wake a dimmed screen

Home Screen & Chart

  • Stale readings gray out with a strikethrough and an age stamp before the cutoff — an old number can never pass as current
  • Signed delta (+4 / -0.2) next to the glucose value
  • Chart stats now include GMI and CV (variability), with CV flagged when above 36%

WiFi & Setup

  • Network list now scrolls — no more hidden networks in dense areas
  • Failure messages in plain language: wrong password vs network not found vs connected-but-no-internet, each with a next step

Data

  • Automatic history backfill after outages (Dexcom): a power cut or WiFi drop no longer leaves permanent holes in the chart

Audio Note

  • The volume scale is now perceptually even across its whole range (this is what makes escalation audible). Mid-range volume numbers sound quieter than before — nudge your alarm volume up if needed. Maximum volume is unchanged

Fixed

  • Alarm overlay showed raw mg/dL while in mmol/L mode when a new reading arrived mid-alarm
  • Update-check failure paths no longer leave background tasks dead

Also Included (previously unreleased 0.9.x work)

  • Full mmol/L unit support throughout the UI
  • Locale and regional improvements (region-aware server selection and caching)

v0.10.1 hotfix (same day)

  • Fixed a crash when re-entering WiFi setup after the scan list failed to appear (freed overlay was deleted twice)
  • Fixed the WiFi scan list sometimes never appearing (scanning bar stuck at 100%)
  • Dev: new serial commands — 'sss' streams a screenshot over USB (no SD card needed), 'tap x y' injects a touch

v0.11.0 additions

12 New Alarm Sounds (24 total, six picker pages)

  • Gentle: Heartbeat (Soft), Marimba Run, Harp Arpeggio, Sonar Ping
  • Rhythms & Calls: Cuckoo Call, Trill (Fast), Morse SOS, Train Horn
  • Urgent: Pager Burst, Sweep Siren, Klaxon Honk, Rapid Pulse
  • Your saved tone selections are unaffected by the update

Stability: display can no longer freeze

  • Fixed a family of UI-memory leaks that could exhaust the display's drawing memory after many screen changes (stranded WiFi screens, a never-freed boot screen, and several orphaned overlays and timers)
  • The heaviest settings screen was rebuilt ~30% lighter and now degrades gracefully instead of hanging when memory runs low
  • As a last line of defense, a hung display now automatically reboots within seconds instead of freezing until power-cycled

Polish

  • Alarm threshold labels no longer crowd each other on the range bar
  • WiFi network names no longer run under the action buttons; list spacing improved
  • Settings menu no longer drag-scrolls elastically

v0.12.0 additions

Redesigned Trend Arrows

  • Completely rebuilt: clean single-weight strokes with open 45-degree heads, sized to read across a bedroom; double-trends show a second chevron instead of doubling the bulk
  • Arrows now smoothly rotate to their new direction when the trend changes

28 Alarm Tones (7 pages)

  • NEW Random (Loud): generates a completely fresh, loud, unpredictable sequence every time it plays - the tone your brain can't learn to ignore
  • NEW page 7: Church Bell, Xylophone, Alert (Triple), plus Chime (Gentle) moved there
  • Urgent tones and default beeps retuned into the speaker's loudest frequency band - several dB louder in practice

Consistency

  • Every back button on every screen is now the same size, position, and style
  • Settings menu entry renamed 'Time / Weather / Night Mode'
  • No screen scrolls anymore except the WiFi network list; Time & Weather settings became two clean pages

v0.13.0 additions

Screen Stays On While Charging

  • When the device is plugged in, the display no longer auto-dims — a bedside or desk unit on power is always readable at a glance
  • Prefer dimming anyway? A new 'Dim when plugged in' toggle lives in the brightness settings (tap the bulb icon on the home screen)
  • Plugging in a dimmed device wakes the screen automatically

Trend Arrows, Refined

  • Re-proportioned to the classic arrow silhouette: a longer shaft with a compact head. The previous head was wider than the arrow was long and read as a tent at arm's length

v0.14.0 additions

Trend Arrows: Glow + Double-Arrow Alert

  • Every arrow now carries a subtle edge glow that also smooths the diagonals
  • Rapid rise/fall now shows TWO arrows side by side - and the pair gently rocks while its glow pulses, so the most urgent trend visibly demands attention even across the room

One Home for Display Settings

  • The bulb icon now opens a full Display sheet: brightness, the dim-when-plugged-in option, and the entire Night Dim schedule all live together (Night Dim moved out of Time / Weather)
  • The sheet auto-closes after 30 seconds idle so it can never hide your glucose reading

Countdown Arc

  • The arc around the trend arrow is now a countdown to the next data pull: full right after a reading, empty when the next one is due (blue while fetching). No more guessing when the number will refresh

Cleaner Chart

  • The fill under the chart line is now a single clean wash - the old fill drew a striped haze

Fixed

  • Swiping to expand the glucose card no longer accidentally opens the trend chart when the swipe starts on the arrow

v0.14.1-0.14.2 polish

  • The double-arrow alert now slides side to side with a strong glow pulse - the first cut's gentle rock was too subtle to notice from across a room

v0.14.3 hotfix

  • Fixed: turning on Night Dim during its night window locked you out of the display settings - the night face hid the very button that opens them. The brightness bulb now stays visible (dimmed) on the night face, the Display settings always open at readable brightness, and closing them hands the backlight back to the schedule

v0.15.0 additions

Night Face, Redesigned for Safety

  • At night the glucose value IS the screen: huge, centered, and colored by zone (green in range, amber near a warning, red at an alarm)
  • The time moves to a small white readout in the top bar - a sleepy glance can never mistake 10:48 for a glucose reading again
  • The trend arrow no longer sits on a faintly visible box against the black night background
  • Your day layout comes back exactly as you left it when the night window ends

v0.8.0

2026-04-06 Beta

UI Overhaul

Theme System

  • 10 new centralized color constants replace ~90 hardcoded hex values across the entire UI
  • Every screen now shares the same modal, divider, and pressed-state colors — change once, updates everywhere

Alarm Screens — Deep Redesign

  • LED Flash toggle — each alarm now independently controls whether the RGB LED flashes (default: on)
  • Glucose range bar — visual threshold map at the top of alarm settings shows where all 4 thresholds sit on the 40-400 mg/dL scale with colored zones
  • Compact detail editor — tone selection and volume slider share a row; Screen Flash and LED Flash toggles in a dedicated Visual card
  • Smaller, consistent toggle switches throughout

Boot Screen — Complete Revamp

  • Glucose zone color bars (red/orange/green/yellow/red) frame the top and bottom
  • Ghost "CYGM" typography faintly visible behind the main title
  • Gradient wave bands fade from blue at screen edges
  • Slim 3px gradient progress bar replaces the old chunky 16px bar
  • Clean centered layout: author, website, version

Screen Polish Sweep

  • Menu: colored left accent bars on each settings card, standardized button heights
  • CGM Login: glass-themed connecting overlay, consistent 14pt body text, properly-sized eye toggle buttons
  • WiFi: larger 40px touch targets, 10px status dots, connection error feedback
  • Time/Weather: search loading overlay, improved result card typography, keyboard overlap fix
  • About: fixed overlapping elements when SD card is present, compact layout

Safety Fixes

  • Removed lv_label_set_recolor() usage (caused intermittent device freeze)
  • Removed decorative lv_anim_start() WiFi dot pulse (caused intermittent device freeze)
  • Removed 6 non-knob shadow violations across 4 files
  • All settings screens explicitly non-scrollable

Data Model

  • New led_enabled field in alarm_config_t — existing devices will reset alarm settings to defaults on first boot (NVS size-mismatch fallback)

v0.7.6

2026-04-05 Beta

Living Home Screen

Zone-Colored Card Borders

Both the time card and CGM card now have a subtle 2px border that reflects your current glucose zone. The color smoothly gradient-transitions between green (in-range), yellow (approaching warning), and red (at/past

alarm) — using your configured alarm thresholds. Updates every 10 seconds and immediately when new readings arrive. Works on both collapsed and expanded card views.

Freshness Arc

The old countdown progress bar at the bottom of the CGM card has been replaced with a semicircle arc that halos above the trend arrow. It starts full when a fresh reading arrives and gradually depletes over 5 minutes,

giving you an at-a-glance sense of data freshness. Turns blue briefly during active fetches. Scales up in expanded view.

Layout Improvements

  • Glucose number and mg/dL label tightened vertically
  • Trend arrow and arc shifted down for better visual balance
  • "Time ago" label moved closer to bottom edge
  • Canvas backgrounds set transparent to eliminate dark box artifacts behind icons

Removed

  • Experimental mini sparkline (recovered ~18KB of static RAM)
  • Ambient background glow overlay (replaced by cleaner border approach)

Memory

Free heap returns to baseline (~42KB). The previous sparkline buffer consumed 18KB of BSS, which caused min_ever to drop to 1.6KB during SSL operations. This release eliminates that risk entirely.

v0.7.4

2026-04-03 Beta

v0.7.4 — Anti-Freeze Update (2026-04-03)

Fixed a critical issue where the device could freeze for hours when WiFi signal degraded during an SSL handshake. Clock and

battery monitoring now stay alive during glucose fetches. Migrated LVGL lock calls to prevent deadlocks. Improved alarm system

with cross-core safe deferred cleanup. LED behavior overhauled for cleaner, professional feedback. Device reboots silently after

crashes (no buzzer while sleeping). Validated with 7.5-hour overnight run: 298 fetches, zero failures, zero crashes.

v0.7.2

2026-03-31 Beta

v0.7.2 Beta — 2026-03-31

Fix: Socket Leak Prevention

  • Added missing esp_http_client_close() calls before esp_http_client_cleanup() in all HTTP paths (Dexcom, Libre, weather, heartbeat, geocoding)
  • Without proper socket close, file descriptors leaked over time, causing "No more processes" errors and eventual device freeze after hours of operation
  • Removed unused dexcom_reopen_persistent_client() function
  • Moved heartbeat from weather task to glucose task

v0.7.1

2026-03-26 Beta

New: Nightscout CGM Support (v0.7.0)

  • Added Nightscout as a third CGM provider alongside Dexcom Share and LibreLinkUp
  • Enter your Nightscout server URL and optional API token to receive glucose readings
  • Supports both HTTP and HTTPS — HTTP connections use zero TLS memory
  • URLs without a protocol prefix automatically default to HTTPS
  • Full UI with login flow, keyboard entry, and password masking for API tokens

Fix: Device Stability

  • Eliminated overnight freeze caused by LVGL shadow rendering stack overflow
  • Always close SSL after each glucose fetch — ensures every cycle starts with clean contiguous heap
  • Increased glucose task stack from 4KB to 5KB to prevent NVS save stack overflow
  • Added breathing heartbeat dot between home screen cards — visual indicator the device is alive
  • Fixed provider switch login failures (Dexcom/Libre/Nightscout) on fragmented heap
  • Fixed power off button failing on fragmented heap
  • Fixed OTA auto-install button failing silently on fragmented heap

Fix: Nightscout HTTPS

  • Fixed TLS handshake failure with Cloudflare-hosted Nightscout instances (SNI was disabled)
  • Optimized status endpoint validation — no longer parses full JSON response
  • Reduced HTTP response buffer to 2KB (glucose responses are only ~230 bytes)

Other

  • SD serial logging now disabled by default — users get clean glucose CSV only
  • New ship serial command for factory reset + power off (for shipping fresh devices)
  • New log on / log off serial commands to toggle debug logging
  • CGM provider dispatch refactored from bool to enum for cleaner three-provider support
  • Serial command listener now starts even without SD card

v0.6.9

2026-03-22 Beta

-Fixed version number

v0.6.8

2026-03-22 Beta

Fix: SSL reconnect via task deletion, keep-alive between cycles (v0.6.8)

  • SSL connections now stay alive between glucose cycles, eliminating handshake overhead during normal operation
  • When the server drops the connection, background tasks are temporarily freed to make room for a fresh TLS handshake, then restored automatically
  • Improved boot memory headroom (min_ever: 408 → 9348 bytes)
  • Fixed edge case where WiFi reconnect after initial failure wouldn't start glucose/weather tasks

v0.6.7

2026-03-22 Beta

Fix: SSL reconnect via task deletion, keep-alive between cycles

v0.6.5

2026-03-22 Beta

-Added device online status

v0.6.4

2026-03-22 Beta

Fixed power off issue.

v0.6.3

2026-03-21 Beta

Fix: Eliminate heap fragmentation cascade, SSL immediate retry

v0.6.2

2026-03-19 Beta

Updated OTA heap

v0.6.1

2026-03-19 Beta

  • Fixed LibreLinkUp session restore (HTTP 400 / missing account-id header)
  • Added account_id_hash NVS persistence for Libre sessions
  • Added OTA migration guard (forces re-login if hash missing)
  • Fixed glucose timestamp parsing (sanity check 300s → 86400s)
  • Website: full LibreLinkUp setup guide

v0.6.0

2026-03-17 Beta

Libre Integration success

v0.5.14

2026-03-17 Beta

General UI/UX fixes

v0.5.13

2026-03-16 Beta

v0.5.13 Beta — 2026-03-16

  • Added "Erase Device" factory reset option in About overlay with confirmation dialog
  • Added first-time Welcome overlay with QR code to setup guide (cygm.me?guide)
  • Added "Device Guide" button in About overlay to re-open the setup guide
  • Removed back button from Time/Weather screen; weather interval selection now saves & exits
  • About overlay layout polish: enlarged card, reorganized bottom row buttons

v0.5.12

2026-03-15 Beta

Version check TLS handshake fails on fragmented heap for OTA

v0.5.11

2026-03-15 Beta

Alarm card now updates glucose value live and auto-clears when data goes stale (>15 min). No more waking up to a frozen alarm showing last night's number.

v0.5.1

2026-03-13 Beta

Memory task hadling updated and fixed

Small UI tweaks

Location Search fixed for more locations when typing city name, lists by population up to 5

v0.5.0

2026-03-11 Beta

First initial release.

A second screen, not your source of truth

CYGM is an open-source, experimental secondary CGM display. It is not FDA-cleared or FDA-approved, and it has not been clinically validated. It shows readings that have already travelled through your own CGM's app and cloud service, so it can lag, gap or fail independently of them.

Never use it as the sole basis for a treatment decision, and never rely on it as your only alarm. Always confirm on your prescribed CGM receiver or app before dosing or treating.

Devices online

Loading

Grouped by city, never by device. A city appears when at least one device there has checked in within the last half hour. Placement is approximate.