Gaggimate v1.9.0 came out on September 29, 2026. It is the first stable release since v1.8.1 in May, and the changelog is long, with work from the core team and eleven first-time contributors.
The official release notes are only a list of pull requests, so I went through them and sorted out what actually changes at the machine. This is the first post in my new Gaggimate Updates series, where I do that for every bigger release.
Since then I installed 1.9 on my Gaggia Classic and made a video about it. I updated this post with what I saw on the machine, including one thing that didn’t work for me. What I missed the first time, and how that problem ended, is in part 2.
Quick answer: should you update?
Yes, if you use the web interface or shot history. The warnings, the shot comparison, and the more precise water measurement make it a big usability jump.
Update the display and the controller together. The two boards now talk over a new protocol, and mixed versions will not work properly. More on that at the end.
A rebuilt display
The first thing I noticed after the update was the display. The interface was rebuilt with EEZ Studio, looks cleaner, and has small animations. The weight readout is bigger, so I can read the grams during a shot without bending down to the display.
The machine now warns you before things go wrong
The most useful new feature for daily brewing is the warnings system. Gaggimate can now check:
- water level
- temperature stability
- the steam switch
- flushing
- scale connection
- scale battery
For each one you choose in the web interface whether it is ignored, shown as a warning, or treated as an error. Warnings appear as icons on the display and in the web UI, and the icons now stay visible on the standby screen. If an error is active and you start a shot, the machine asks you to confirm first.
That sounds small, but it catches the classic morning mistakes: brewing with the steam switch still on, pulling a shot before the temperature has settled, or a scale that didn’t connect, so stop-by-weight never triggers.
Some details worth knowing:
- Defaults. Everything is set to warn, except the scale battery, which is an error below 20 percent. If the scale dies mid-shot, the machine can’t stop by weight. I compared scales in Bookoo vs MyScale for Gaggimate.
- Temperature counts as stable when it stays within 2 °C of the target for 20 seconds. Changing the target starts the clock over.
- Flush shows up after the machine wakes up and after every shot, and goes away once you flush.
- Water level only works if your tank has a distance sensor.
I set the scale connection warning to ignore, because I can see whether my scale is on anyway, and left the rest alone. In my morning routine with 1.9, the machine has just woken up and already shows two icons: flush recommended, and temperature not stable yet. Before that, there’s no point starting.
The switches can do more
The physical switches, one of my favorite things about Gaggimate, got reworked:
- Assign each switch in the web interface: brew, steam, hot water, a specific profile, or flush.
- A third button. Flipping the brew and steam switch at the same time counts as its own button. By default it starts hot water mode.
- Flush duration of 5, 10, 15, or 20 seconds, or hold, where the water runs as long as the button is on.
- Long press to flush on the brew button, but only if you fitted push buttons. The toggle switches on a stock Gaggia Classic have no long press.
On a Gaggia Classic, a quick flush before every shot is part of the routine. I set the third button to flush, so I do it with both switches instead of the display.
Better shot data
This is where 1.9 changes the most if you like to look at graphs.
- Precise water volume. Shot history now records the water the pump actually delivered, at 0.1 ml resolution, instead of estimating it. Profile phases that stop at a water volume use this value too.
- Puck resistance and liquid resistance. Two new metrics in the shot analyzer, statistics, and comparison. They show how hard the puck holds back the water over the course of the shot. My reading: if resistance suddenly collapses halfway through, the water found a channel. Whether the curve shows that reliably, I need more shots to tell.
- Shot compare. You can put two shots side by side or overlay them. That is exactly what you want when you change one variable, like grind size or dose, and want to see what happened.
- Pinning. Pin favorite profiles and shots so they stay at the top.
- Shot history timestamps were fixed, the sharing options were improved, and the analyzer chart works better on a phone.
A dashboard you can arrange
The web UI got a big overhaul. On a new Dashboard Settings page you can reorder or hide panels and metrics. There are new cards for water tank level, recent shots, and favorite profiles, so you can start your go-to profile with one tap. Live status now also shows pump power and heater power. I haven’t tried nearly all of it and use the advanced view for now.
Smaller changes: a navigation you can collapse, a system theme option, a cleaner settings page, drag-and-drop ordering for profiles, and a description field on each profile.
Import profiles from Decent and Meticulous
If you find a great profile online, chances are it was written for a Decent or a Meticulous. 1.9 adds a Meticulous JSON importer and repairs the Decent profile converter. I haven’t tested either, and I wouldn’t use such a profile blindly: a Gaggia with a vibration pump is not a Decent. You can also choose a startup profile that is loaded when the machine turns on.
What didn’t work for me
1.9 fixes the pump flow calibration, so I tried it right away. The test needs 9 bar. Before Gaggimate, I had swapped the spring in my overpressure valve (OPV) to bring the stock ~15 bar down to 9, but in practice the valve opens at 8.8 bar, and the calibration gives up. On Discord, the advice was to put the original spring back, because the weaker spring sends a lot of the flow back to the tank through the OPV even without the calibration. I did that, and on the second try the calibration ran through. The spring also changed my shots more than I expected. I wrote that up with the curves in part 2.
I also noticed that the pump sounds different while steaming, with what feels like shorter but more frequent pulses. Since then I looked at the code. The amount of water the machine refills doesn’t change, and whether the pulses change depends on what your board measures. The correction in part 2 has the details.
A morning with 1.9
The update shows best in the routine, so I filmed two cappuccinos on the Gaggia. I flushed with both switches and split one shot between two cups. The coffee was Kapazunder from Nomi, a blend of half Brazil, a quarter Colombia, and a quarter Indian robusta. That’s unusually dark for me, but Nomi says it holds up with more milk, and that’s why I picked it.
The profile was Cremina Lever, which comes with Gaggimate and imitates a lever machine: pre-infusion at just over 1 bar, up to 9 bar, then a slow decline, with the brew temperature at 86.5 °C. The shot took 27 seconds, well short of the time the profile’s description calls for. In a cappuccino that didn’t bother me. I could read the weight without bending down, and after the shot the flush icon was back, so one more press of both switches left the machine clean for the next morning.
Safer WiFi and more reliable updates
- Secure access point. The WiFi hotspot Gaggimate opens for setup now gets an automatically generated password, and the QR code on the display includes it. You scan the code and you are connected. Setup over a USB cable using Improv Serial is also supported now.
- Sturdier OTA updates. Interrupted downloads can resume, incomplete firmware is detected, and a failed update shows a clear screen instead of leaving you guessing.
- Web UI inside the firmware. The web interface is now part of the firmware image, which makes updating simpler.
- The Bluetooth link between display and controller recovers more cleanly after a dropout, the
.localaddress for the web interface no longer disappears after a WiFi dropout, and a memory issue that could hang the update check is gone.
Under the hood
These mostly matter to tinkerers and developers:
- A new communication protocol between the display and the controller, with a clear notice on the standby screen when the versions do not match.
- Support for gear pumps controlled over I2C, plus tuning settings for positive displacement pumps and fixes to pump flow calibration.
- A new PID autotune rule, a pressure offset setting, and the scale battery level in the API.
- A desktop emulator that runs the display firmware and web UI on macOS or Linux with simulated sensors. The two round display screenshots at the top are from it.
How to update
- Save your profiles first. I backed up my profiles and settings and didn’t need it: profiles, settings, and shot history were all still there. The OTA update from the web interface took a few minutes and ran without a dropout.
- Update both boards. Display and controller have to run 1.9 together because of the new protocol. If they do not match, the display tells you on the standby screen, and the controller can be brought up to date over the air.
- Use OTA or the web flasher. If OTA fails or you are coming from a much older version, the web flasher has separate buttons for display and controller. It only works in Chrome, Edge, or Opera, and you may have to hold the BOOT button while plugging in the USB cable.
The web flasher only supports the standard hardware. If you built your own board, you flash with PlatformIO over USB.
My take
Gaggimate 1.9 does not add a single headline feature. It adds dozens of things that make the machine easier to live with: it warns you before a bad shot, the switches do what I want, and the data is finally precise enough to compare shots properly. For a Gaggia Classic, that is exactly the kind of update you want.
If you are still deciding whether the mod is worth it at all, read my Gaggimate review after six months.
