github Hypfer/Valetudo 2026.02.0
Valetudo 2026.02.0

6 hours ago
valetudo

2026.02.0

Features, Robots, Maintenance and everything in-between

Valetudo 2026.02.0

A surprising amount of relevant things has happened since the last release.
I'm not sure how, given the comparatively short time frame. But it did, so here's me talking about it.

Features

As said, a ton of stuff happened, but first, let's focus on what you as a user will see.

Dock Components

On robots that support it, the controls for the Dock have been updated with a status view for all the individual components:

This starts off collapsed and only renders expanded if there is something going on.

The icons are custom and were made in-house by our janitor that likes to go on long philosophical tangents.

In the next release, I'd like to expose these to MQTT for even better automations.

Robot Options

On the most recent supported robots, the list of options has grown to a size that was becoming actively harmful to the UX.
Having dabbled in the vendor apps and done some market research however, it was clear that hiding everything in submenus would be worse, as those suffer from bad organic discoverability.

Thus, it's now both.

By grouping and introducing these sub-headers, the wall of text has been broken up into something a lot more mentally digestible.

New capabilities

Now that we have all this new free conceptual space + the idea of "discoverability" fresh in my mind, I've turned to the quirks and found some worthy of hoisting up into their own capability.

MopDockMopDryingTimeControlCapability

This one controls the mop drying time of the mop in the mop dock.

AutoEmptyDockAutoEmptyDurationControlCapability

This one controls the auto empty duration of the auto empty dock.

CleanRouteControlCapability

This one... was surprisingly hard, because of vendor behavior varying a lot more than you'd want it to for a unified capability.
What might apply to "just mopping" on one vendor might be for all cleanup tasks on the other. Also, some options might be one-time toggles.

Fortunately though, the very extensible concept of capabilities having properties that are context metadata did provide the solution here.

New Bots

In the 2025.08 release notes, I wrote

Extrapolating from the current state, it is unlikely that we will see many more new Dreames being supported by Valetudo.

So what is this then?
Well... did you spot the two modifiers in there? "many more" and "new".

While I am an ideological hardliner on principles, I'm not one on purity for the sake of purity.
I do not need to shoot myself into the foot to "make a point" (usually unsuccessfully).

Truth be told, the method is the same for these bots. The research does carry over.
These are just low-hanging fruit we shall pick, because why wouldn't you.

Dreame L20 (MR813)

I do not like this robot. It offends me.

This definitely is in part due to residual anger and memories of people pestering me, telling me how great it is and how it is of utmost importance to be supported.
But it also is due to the robot itself.

"Sports Utility Vacuum" is the term @aep coined for it, and it fits perfectly.

While it can do regular vacuum robot things, just like an SUV, it does so worse than a normal one.

Here's my list of gripes:

  1. The dock is positively ginormous for no benefit + at least my unit regularly struggles to dock properly.
  2. The robot itself is higher than it needs to be due to the mics in the tower bumper for the useless voice assistant feature (I think this bot started that?), meaning that it fits under less furniture
  3. The design was an overly complicated dead end due to various reasons beyond the choice of a different SoC

and
4. Due to that failed overengineered design + what I assume are contractual obligations, there are now two completely different bots both named L20, with only the second more-like-the-rest-of-the-lineup one being the one that is rootable.

The L20 Ultra is a monument to bad business decisions. I don't know which exactly and neither do I have solid proof, but the stench is hard to oversniff.

But anyway, the "L20" with extra quotes (the MR813 one) now is also supported by Valetudo.

If you buy the right one (and be very careful that you do based on its SN), it will work like the other bots.
The win here is not this robot but an improved ability to source a supported robot.

Also it does run the same SW so on that side it's not all that different.
Interestingly though, they've stripped miio from that firmware, but that was easy to fix through frankensteining something.

Why from that older bot only and not from e.g. the X40 is beyond me though.

Bonus (and also segue):

In some regions (not mine tho), there is also an L30, which is the L20 but with a water heater in the dock.
Apparently, a knee-jerk reaction to Ecovacs releasing that feature first; taking away the crown of features from Dreame.

Same bot with minimal changes to its dock. New SKU. Purely reactive.

Dreame X30

I said segue. Why did I say segue

The Dreame X30 is a bot that did not really happen.

It was announced by Dreame, just so that they could then announce the X40 before the X30 was even available for purchase yet.
This again was a knee-jerk reaction to Roborock releasing a new Flagship with an extending side brush; taking away the crown of features from Dreame.

So no one really bought this thing, because it was obsolete before it even launched.

Being close to an X40 (minus some suction, extending side brush, newer SW and a different front camera/LED assembly design), it is a good bot.
You can still get it new for decent-ish prices.

Valetudo Home Assistant custom_component

A while back, I've announced that there were Valetudo Icons for Home Assistant.
The solution there wasn't great and didn't fully work.

The only way to get it working properly is to have a full custom_component, which eventually was created.
That thing sat dormant for a while but now comes with a feature a lot of you have been waiting for:

Once configured, it will enrich all discovered Valetudo Robots with an "Estimated Segment" sensor.

This is experimental, but I've heard from people that they're happy with it, so I suppose it works mostly reliably.

You can get it here: https://github.com/Hypfer/hass-valetudo

Goodbye Create React App

Valetudo's frontend used CRA, which was unmaintained since ~2022 and sunset in early 2025.
While it has served Valetudo well, it was also responsible for a ton of completely unused dependencies + npm audit constantly complaining about many vulnerabilities (none of them actually affecting Valetudo).

Getting rid of it was long overdue, but, the sheer amount of understanding of the tooling required to do so kept me from doing it.
.. but then I remembered that LLMs are a thing now. They're like.. exactly the right tool for this job. They're boilerplate comprehension machines.

So with that tool assistance, I got to work and cleaned up the massive wall of incomprehensible gibberish post-eject down to a much more comprehensible 300 line webpack config that does only what Valetudo needs.

While I am fairly confident, it would not surprise me if this broke something more subtle, so if you spot something, please let me know.

Maintenance

Speaking of changes that might break things, with CRA gone, dependencies were bumped.
React is now v19 and ExpressJS is v5.

React just worked, but ExpressJS caused some breakage that should be fixed now.

Same applies here. If you spot something, please let me know.

Misc

  1. Segment Names are now rendered larger than in the last release. Thx for the feedback on that
  2. After having an epiphany, I found a way of implementing Segment renaming on Midea, so that's available now
  3. Dreame bots that support it now have access to the "Carpets First" quirk, which will make them clean carpets first
  4. New firmware updates for Dreame X/L40 Master/Ultra + Mova P10 Pro Ultra are now available on the dustbuilder
  5. The UI was polished some more, with the Valetudo colors now being used everywhere

Docs

There's even more.
No matter if you're a newcomer or a recurring user, both of these things will affect you.

We (this time not the royal but the me, Dennis et al.) have managed to get rid of the clunky and proprietary LiveSuit for rooting Dreames.
The docs have been updated with the new instructions utilizing the FOSS sunxi-tools.
A lot less headache will now hopefully be had.

Additionally, I have updated the buying supported robots docs page with actual guidance again.
The LLM told me that it reads the vibe as "you've met an engineer at a bar and he rambles on about robots", which is what I was going for.

What else is going on?

With the Valetudog going superfast in the 2025.11.0 release notes, Valetudo itself is now going the speed limit:

@NKnusperer, the absolute madman, took his passion for Valetudo to the streets.
Did you know that there is an aftermarket for custom in-door light projectors?
Did you know that these services accept arbitrary images?

There was no other way this discovery could've went.
60€ well spent.

I also really like how it might as well pass as some kind of new EV startup, and with that a prototype car or whatever.
Which, fair, is easy, given that Valetudo is tech and EV startups are tech, but it's still cool!

If you also have a cool and non-commercial idea, art assets can be found here: https://github.com/Hypfer/Valetudo/tree/master/assets

I, too, have been creative with Valetudo lately. I hope that you will like it.

The usual

If you like this release or Valetudo in general, you might want to consider donating:

https://github.com/sponsors/Hypfer

https://builder.dontvacuum.me/donations.txt

Autogenerated changelog

Features

  • vendor.dreame: Carpet First quirk 4589bbc
  • vendor.dreame: Map additional error codes 158c678
  • ui: Add support for xm files 8363770
  • vendor.midea: Dustbag dock component 8e020ef
  • vendor.dreame: Add missing metadata 8c2fefe
  • vendor.midea: DockComponentStateAttribute 8d483b7
  • vendor.dreame: DockComponentStateAttribute d771b4c
  • ui: DockComponentStateAttribute cc3c6a2
  • core: DockComponentStateAttribute eaaa1bd
  • ui: Peent 4798616
  • vendor.midea: MapSegmentRenameCapability e2045ba
  • vendor.dreame: L20 Ultra (MR813) 12abbd3
  • vendor.midea: AutoEmptyDockAutoEmptyDurationControlCapability bc2445d
  • vendor.roborock: AutoEmptyDockAutoEmptyDurationControlCapability 4da60ae
  • ui: AutoEmptyDockAutoEmptyDurationControlCapability 597bf57
  • core: AutoEmptyDockAutoEmptyDurationControlCapability 448e3ad
  • vendor.midea: MopDockMopDryingTimeControlCapability 1366c97
  • vendor.roborock: MopDockMopDryingTimeControlCapability 0344ba4
  • vendor.dreame: MopDockMopDryingTimeControlCapability b3e1527
  • ui: MopDockMopDryingTimeControlCapability e550f9e
  • core: MopDockMopDryingTimeControlCapability fe4e164
  • Replace IntensiveMoppingPathControlCapability with more generic CleanRouteControlCapability b08a3d2
  • ui: Increase segment label name font size eb3bde0
  • vendor.viomi: IntensiveMoppingPathControlCapability 6a8c5ef
  • vendor.dreame: IntensiveMoppingPathControlCapability 63a761e
  • vendor.roborock: IntensiveMoppingPathControlCapability f2568bf
  • vendor.midea: IntensiveMoppingPathControlCapability 9e75fd4
  • ui: IntensiveMoppingPathControlCapability 5b08538
  • core: IntensiveMoppingPathControlCapability 3849905
  • ui: Valetudo Genuine Advantage™ cac7960
  • ui: Group robot options into categories with subheaders 2b03afc
  • vendor.dreame: X30 support 8928887
  • vendor.dreame: L10 Ultra also supports material 99a91f6

Fixes

  • ui: UX cleanup of sidebar nav 0c82159
  • vendor.roborock: Fix initialization of supportedAttachments after refactor 92dd06d
  • ui: Prod build 414d959
  • webserver: Use correct new expressjs 5 syntax for optional path parameters 5ec1f5a
  • ui: Don't break the layout 76650d9
  • vendor.dreame: L10spuh FW 1633 does not have a mop consumable anymore 4280e9a
  • vendor.viomi: Wait even longer for the firmware to think fd9ec50
  • ui: Fix goto marker scaling and draw order 2a1fb8e

Refactoring

  • ui: Inline useless env.js file 9c0d22a
  • ui: Eject from now-dead CRA 4713182
  • ui: Get rid of heavy libs that were basically unused 4558f04
  • Pull initialization of supportedAttachments into ValetudoRobot base class 3a8cb21
  • ui: Pull valetudo colors to a central location 2035cbd

Chores

Don't miss a new Valetudo release

NewReleases is sending notifications on new releases.