Hypfer/Valetudo
39.4
Weak · 2 October 2026
81.8k
lines of production code
JavaScript
with TypeScript
2
measurements over time
What this system is
Valetudo is a local-first, open-source control system for robot vacuums that replaces proprietary cloud dependencies with direct device management. It provides a comprehensive backend architecture supporting multiple vendors (Roborock, Dreame, Midea, Viomi) through a modular capability system for navigation, mapping, and hardware control. The system exposes these functions via a modern React web interface and robust MQTT/REST APIs, enabling features like live map editing, dustbin streaming, and automated firmware updates.
How it got here
2018–2021 — backend architecture overhaul and React frontend migration
60 changes.
This period focused on a comprehensive restructuring of the backend, introducing a modular capability-based architecture, a new entity model, and a robust event-driven system to improve stability and support diverse robot vendors. Simultaneously, the project migrated the frontend from legacy technologies to a modern React application with Material UI, featuring a redesigned map editor and granular control interfaces.
2022–2025 — Midea integration and UI overhaul
23 changes.
This period focused on expanding backend support for Midea robot vacuums, including the MSmart protocol, AI obstacle detection, and advanced cleaning capabilities. Simultaneously, the frontend underwent a significant overhaul with a new unified component system, restructured settings, and enhanced map rendering features like HiDPI support and touch gesture improvements.
2026 — Build system overhaul and spatial streaming features
6 changes.
The project replaced the Create React App dependency with a custom Webpack configuration to gain explicit control over the frontend build process. Concurrently, new backend capabilities were introduced, including entity models for map-based spatial data and a manager for external video streaming processes. Additional updates included patching path-to-regexp for stricter ASCII validation and adding support for XM module audio playback.
Features
Add About, Help, and Updater documentation resources
The frontend now includes dedicated static content files for the About page, general Help section, and Updater assistance. Users can now view attribution and licensing information, access context-specific help topics (such as map segment labels and retrieving segment parameters via long-press), and read detailed explanations of the updater's privacy-focused, manual-check behavior and limitations.
frontend/src/valetudo/res · high confidence
Add MockValetudoRobot for simulation and testing
A new mock robot implementation (MockValetudoRobot) has been added to the backend library, exposing a comprehensive set of simulated capabilities including basic control, mapping, dock management, and various sensor states. This component allows users to run the system in a simulated mode without physical hardware, providing a full-featured environment for testing and development with pre-configured map data and event states.
backend/lib/robots/mock · high confidence
Add XM module file playback support
Introduces a new utility module (XmPlayer.ts) that parses XM module files and manages audio playback state, enabling users to play back this specific music format within the application.
frontend/src/util · high confidence
Add static assets for new React frontend
The frontend/public directory now includes the core static files required for the new React-based user interface. This adds index.html with mobile-optimized viewport settings and dark-mode support, a web app manifest (manifest.json) defining icons and standalone display behavior, and a robots.txt file to prevent search engine indexing of the application.
frontend/public · high confidence
Add themed 404 error pages for multiple web server styles
The web server now serves styled 404 error pages that mimic the look and feel of popular web servers (Cloudflare, Google, IIS, Oracle, and Tomcat) instead of a generic response. This change adds five new HTML templates in the \backend/lib/webserver/res/404/\ directory and an \index.js\ module to load them, providing a more branded and informative user experience when a requested resource is not found.
backend/lib/webserver/res · high confidence
Added IterationsIcon component and updated brand assets
The frontend now includes a new \IterationsIcon\ React component in \icon\_components\, which renders a repeat-style icon with a configurable iteration count using the IBM Plex Sans font. Additionally, new SVG assets for the Valetudo logo (\valetudo\_logo\_with\_name.svg\) and splash screen (\valetudo\_splash.svg\) have been added, along with a \credits.md\ file documenting the licenses for third-party art assets like the robot model and song.
frontend/src/assets · high confidence
Added Kaitai Struct definitions for Roborock, Dreame, and Viomi map formats
New Kaitai Struct (.ksy) files have been added to define the binary map data formats for Roborock, Dreame, and Viomi vacuum robots. These declarative schemas describe the structure of map files, including headers, image data, robot positions, obstacles, and room segmentation, serving as a reference for understanding these proprietary binary formats.
_assets/kaitai\structs · high confidence
Added Midea robot vacuum obstacle detection schema
A new protobuf definition file (midea.proto) has been added to the assets directory, introducing message types for semantic mapping and obstacle detection. This includes definitions for GridIndex, Point, PointCloud, AIRect, AIImageInfo, BoundingBox, and SemanticObject, which collectively describe detected objects (such as shoes) with their positions, confidence levels, and associated image data. The schema also defines SemanticMapInfo to aggregate these objects and TrackPoint for logging navigation or sensor data, enabling the system to process and interpret visual obstacle data from Midea devices.
assets/protobuf · high confidence
Added consumables maintenance guide and statistics achievement definitions
The frontend now includes a dedicated help resource explaining robot consumables (brushes, filters, sensors, wheels, and mops) and their maintenance requirements, accessible via the consumables view. Additionally, a comprehensive set of statistics achievements has been added, defining milestones for cleaning area, runtime, and cleanup count, ranging from humorous references (e.g., 'Saarland', 'Proton Decay') to practical benchmarks (e.g., '1k cleanups', 'Daily Driver').
frontend/src/robot/res · high confidence
Added help documentation for Do Not Disturb, Quirks, and Voice Packs
New help resources have been added to the frontend for the Do Not Disturb, Quirks, and Voice Packs capabilities. Users can now view specific guidance on how Do Not Disturb periods affect robot tasks and charging, understand that Quirks are vendor-specific tunables intended for manual use rather than automation, and learn the requirements for installing custom voice packs, including format, hosting, and hash considerations.
frontend/src/robot/capabilities/res · high confidence
Added help documentation for map management features
New help text files have been added to the frontend map resources to guide users through segment management, map annotations (thresholds, ramps, curtains), robot coverage maps, and virtual restriction editing. These resources provide explanations on how to split, join, and name segments, how annotations influence robot behavior, how to interpret coverage maps, and the limitations of virtual restrictions like walls and no-go areas.
frontend/src/map/res · high confidence
Added miscellaneous SVG assets
The repository now includes new static assets in the assets/misc directory: a 'confused valetudog' illustration and a star-history chart visualization. These files are added to the project's static asset collection for use in the application.
assets/misc · high confidence
Added timer actions for full and segment-based vacuum cleaning
New scheduler actions have been introduced to support scheduled cleaning tasks. The base ValetudoTimerAction class provides the structure for timer-based operations, while ValetudoFullCleanupTimerAction enables scheduled full-room cleanups by invoking the robot's BasicControlCapability. Additionally, ValetudoSegmentCleanupTimerAction allows for scheduled cleaning of specific map segments, supporting configurable segment IDs, iteration counts, and custom ordering via the MapSegmentationCapability.
backend/lib/scheduler/actions · high confidence
Enhanced timer configuration with pre-actions, custom labels, and manual execution
The Timers view now supports configuring pre-actions (such as setting fan speed, water usage, or operation mode) that run before the main cleaning action, allows users to assign custom labels to timers for easier identification, and enables manual execution of stored timers via a new 'Execute Now' button. The interface has been updated to use MUI Grid2, displays the current browser timezone alongside UTC times to prevent day-of-week shifting errors, and includes validation for timer parameters.
frontend/src/valetudo/timers · high confidence
Expanded Dreame robot capabilities and model support
This update significantly broadens the functionality and device compatibility for Dreame vacuum robots. New capabilities include manual control for the Dreame 1C, consumable monitoring for the 1C, and voice pack management. The auto-empty dock now supports configurable emptying intervals with distinct handling for V1 and V2 firmware versions, alongside manual trigger support. Navigation and cleaning behaviors are enhanced with AI camera-based obstacle avoidance, line/laser obstacle avoidance, carpet sensor modes (including lift and detach), and multiple clean route controls (Normal, Intensive, Deep, Quick). Additional features cover camera light control, collision avoidance settings, combined virtual restrictions, and AI camera go-to-location commands. The diff also introduces support for specific new models such as the L20 Ultra (MR813) and the P2148 Xiaomi Mijia Ultra Slim, while refining existing controls like zone cleaning and basic robot operations.
backend/lib/robots/dreame/capabilities · high confidence
Expanded Dreame robot support and AI obstacle classification
This update adds support for several new Dreame models, including the 1C, 1T, D10S Pro, D9 Pro, D9 Pro+, D9, and F9, each with their specific capability configurations (such as zone cleaning, consumable monitoring, and manual control). It also introduces a comprehensive AI classifier ID mapping in DreameConst.js, enabling the system to identify and handle a wide range of detected obstacles (e.g., furniture, pets, cables) for improved navigation and avoidance.
backend/lib/robots/dreame · high confidence
Expanded Midea robot support with advanced cleaning and navigation features
This update adds support for several new Midea robot models, including the E20, E20 Plus, E20 Evo Plus, J12 Ultra, J15 Ultra, J15 Pro Ultra, and J15 Max Ultra. These devices now support a wide range of new capabilities such as AI-powered obstacle avoidance (including pet and stain detection), mop twist and extension controls, carpet mode adjustments, and dust streaming. The update also introduces new quirks for features like hair cutting, quiet auto-empty, and deep carpet cleaning, along with improved map parsing and room metadata handling.
backend/lib/robots/midea · high confidence
Expanded Roborock dock and robot control capabilities
This update adds specific Roborock implementations for several new capabilities, allowing users to control auto-empty dock settings (duration, interval, manual trigger), mop dock functions (manual cleaning/drying, auto-drying control), and robot behaviors (carpet mode/sensor mode, clean route, collision avoidance, floor material navigation, key lock, and high-resolution manual control). It also introduces capabilities for managing map segments (renaming, material assignment, joining/splitting), resetting maps, and viewing current cleaning statistics.
backend/lib/robots/roborock/capabilities · high confidence
Expanded Roborock robot model support and capability coverage
The Roborock driver now supports a wider range of robot models, including the G10S, M1S, Q7 Max, S4, S4 Max, S5, S5 Max, S6, S6 MaxV, S6 Pure, and S7 Pro Ultra. This update introduces specific capabilities for these devices, such as water usage control, combined virtual restrictions (regular and mop zones), and various dock controls (auto-empty, mop cleaning/drying). It also includes a new map parser and quirk factory to handle device-specific behaviors like button LEDs and mop cleaning modes, ensuring better compatibility and feature parity across supported hardware.
backend/lib/robots/roborock · high confidence
Expanded mock robot capabilities for testing
The mock robot backend now supports a significantly wider range of robot features, allowing for more comprehensive testing of UI and integration scenarios. New mock implementations have been added for auto-empty dock controls (manual trigger and interval settings), consumable monitoring (brushes, filters, mops), and statistics (current and total). The mock also now simulates voice pack management, WiFi scanning and configuration, manual robot control, and various navigation and cleaning modes (carpet, obstacle avoidance, zone cleaning). This enables developers to test complex robot states and user interactions without needing physical hardware.
backend/lib/robots/mock/capabilities · high confidence
Initial Midea MSmart protocol support
Added a new backend library for the Midea MSmart protocol, introducing packet serialization and parsing for both standard and legacy communication modes. This includes a dummy cloud server to emulate device provisioning and MQTT interactions, enabling local control and status reporting for supported Midea robot vacuums without relying on the official cloud.
backend/lib/msmart · high confidence
Introduce DuststreamerManager for managing external streaming processes
Added a new backend module (backend/lib/duststreaming) that introduces DuststreamerManager to orchestrate an external video streaming process. The manager handles lifecycle states (Idle, Starting, Streaming, Failed), manages up to four subscribers, and enforces timeouts to kill the process if it fails to start within 15 seconds or stops producing frames for 5 seconds. It relies on DuststreamerProcess to spawn and monitor the external binary (with SIGTERM/SIGKILL fallback) and DuststreamerReceiver to listen for video datagrams via UDP.
backend/lib/duststreaming · high confidence
Introduce NTP client state model and OpenAPI schemas
The NTP client module now exposes a structured state model with distinct states for disabled, enabled, synced, and error conditions, allowing the system to accurately reflect the synchronization status. The error state specifically categorizes failures into unknown, transient, name resolution, connection, and persisting types, providing clearer diagnostics. Corresponding OpenAPI schemas have been added to document these states, ensuring the API contract accurately describes the NTP client's status data.
backend/lib/entities/core/ntpClient · high confidence
Introduce SSE middleware with connection management and leak prevention
Added a new Server-Sent Events (SSE) middleware and hub to the backend web server. The middleware manages client connections by enforcing a maximum client limit (terminating the oldest connection if exceeded), sending periodic keep-alive heartbeats to maintain connections, and detecting stale connections by checking socket buffer lengths to prevent memory leaks. It also ensures clean shutdowns by terminating all active SSE connections when the server stops and properly unregistering clients on connection close or finish events.
backend/lib/webserver/middlewares/sse · high confidence
Introduce automated firmware update capability
The backend now includes a new Updater module that allows the robot to check for, download, and apply firmware updates. Users can configure the update source (GitHub releases or nightly builds) via the configuration, and the system provides state-based feedback (idle, downloading, busy, error) to track progress. The implementation handles binary downloads with progress visualization, validates file integrity, manages disk space, and includes a cleanup mechanism to remove downloaded binaries if not applied within 10 minutes or upon reconfiguration.
backend/lib/updater · high confidence
Introduce structured Valetudo event classes
The system now uses a dedicated set of event classes in the \backend/lib/valetudo\_events/events\ module to represent runtime states, replacing ad-hoc event structures. This includes a base \ValetudoEvent\ class and specific types such as \ConsumableDepletedValetudoEvent\, \DustBinFullValetudoEvent\, \ErrorStateValetudoEvent\, \MopAttachmentReminderValetudoEvent\, and \ValetudoUpdatedValetudoEvent\. These events are structured as Data Transfer Objects (DTOs) with standardized properties like \id\, \timestamp\, and \processed\, and some (like \DustBinFull\ and \ErrorState\) extend a \DismissibleValetudoEvent\ base, indicating they can be acknowledged or dismissed by the user.
_backend/lib/valetudo\events/events · high confidence
Introduction of MiioValetudoRobot base class and updated vendor index
The backend now includes a new MiioValetudoRobot base class that centralizes Miio-specific logic, including an embedded FDS mock server for handling map uploads and configurable dummycloud connections. The robots index has been updated to include the new Midea vendor implementation alongside existing vendors like Dreame, Roborock, and Viomi.
backend/lib/robots · high confidence
Introduction of event handler factory for robot events
A new ValetudoEventHandlerFactory has been added to the backend to manage event processing. This component provides a centralized mechanism to retrieve specific handlers for different types of robot events, including dismissible events, consumable depletion notifications, and pending map changes, ensuring that the correct logic is applied to each event type.
_backend/lib/valetudo\events · high confidence
Midea robot support expanded with new capabilities and protocol versions
This update adds extensive new capabilities for Midea vacuum robots, including control for auto-empty dock duration and interval, manual auto-empty triggering, camera LED toggling, carpet mode and sensor behavior (avoid/lift/off), clean route selection (quick/normal/deep), and collision avoidance navigation. It also introduces support for virtual walls and restricted zones (no-go/no-mop areas). To support different hardware generations, the implementation provides V1 (legacy protocol) and V2/V3 (newer MSmart protocol) versions for several capabilities, ensuring compatibility across a wider range of Midea devices.
backend/lib/robots/midea/capabilities · high confidence
New Home Assistant auto-discovery entities for robot status, battery, dock, and attachments
The backend now exposes detailed robot state to Home Assistant via new MQTT auto-discovery entities. Users will see a primary vacuum status sensor that maps internal states (cleaning, paused, idle, returning, docked, error) to Home Assistant equivalents, along with a diagnostic status flag and an error sensor that provides both a human-readable description and structured JSON error details. Battery information is split into two sensors: a level sensor (percentage) and a status flag sensor. Dock integration includes a dock status sensor and individual sensors for dock components such as freshwater, wastewater, dustbag, and detergent levels. Additionally, attachment states (dust bin, water tank, mop) are exposed as binary sensors. All new entities are categorized as diagnostic in Home Assistant.
backend/lib/mqtt/status · high confidence
New Linux-specific capabilities for dust streaming and Wi-Fi management
This change introduces three new capability classes for Linux-based robots: LinuxDuststreamingCapability, LinuxWifiConfigurationCapability, and LinuxWifiScanCapability. The dust streaming capability manages the 'duststreamer' binary, checking for its installation and handling subscriber connections. The Wi-Fi configuration capability retrieves the current Wi-Fi status (including BSSID, SSID, signal strength, and IP addresses) by parsing 'iw' command output. The Wi-Fi scan capability performs network scans using 'iw', caching results to provide immediate responses during long scans and limiting memory usage. These capabilities are exported via the linuxCapabilities index.
backend/lib/robots/common/linuxCapabilities · high confidence
New React-based UI with MUI components and HashRouter
The frontend has been replaced with a new React application using Material UI (MUI) for styling and react-router-dom (HashRouter) for navigation. This update introduces a redesigned interface featuring IBM Plex Sans and JetBrains Mono fonts, a dark/light theme toggle, and a mobile-first layout with simplified controls. Key functional additions include a Wi-Fi provisioning page with network scanning and display of passwords, a welcome dialog, and support for custom icons for fan speeds, water grades, and operation modes.
frontend/src · high confidence
New UI components and custom icon library
The frontend now includes a suite of new reusable components and a centralized icon library. A new ConfirmationDialog component supports multiline text via pre-wrap styling, while a LogViewer component displays timestamped, color-coded log lines with auto-scroll behavior. Visual consistency is improved through a new set of custom SVG icons for fan speeds, water grades, and operation modes, alongside helper components like HelpDialog (rendering Markdown), InfoBox, and DetailPageHeaderRow.
frontend/src/components · high confidence
New Valetudo UI pages and AI Assistant
The frontend now includes dedicated pages for About, Help, System Information, Logs, and the Updater, alongside a new AI Assistant chat interface. The Updater page visualizes download progress with a linear progress bar and displays changelogs in accordions. The AI Assistant integrates an Eliza-based bot with input filtering and a chat UI. System Information displays runtime details, environment variables, and dependency versions. Logs can be filtered by level and content. The router has been restructured to manage these new routes.
frontend/src/valetudo · high confidence
New build and documentation utility scripts
The util directory now includes several new scripts to support the build and documentation pipeline. build\_openapi\_schema.mjs generates the OpenAPI schema for the REST API, while build\_release\_manifest.js creates release manifests with SHA256 checksums for the binaries. generate\_build\_metadata.js produces build metadata files, and generate\_eslintrc\_flavors.js manages ESLint configuration variants. Documentation generation is handled by generate\_mqtt\_docs.js and generate\_robot\_docs.js, which create reference pages for MQTT topics and robot capabilities respectively. Additional utilities include convert\_obj.js for 3D model conversion, upx\_compress\_valetudo.js for binary compression, and auto\_changelog helpers for changelog generation.
util · high confidence
New capability router endpoints for robot control and configuration
The webserver now exposes a comprehensive set of new API endpoints for controlling robot capabilities and managing device settings. Users can now configure auto-empty dock parameters (duration, interval, manual trigger), mop dock operations (cleaning, drying, wash temperature, drying time), and carpet sensor modes. Map management features have been expanded with endpoints for segment editing (join, split, rename, material assignment), annotations, snapshots, and pending map change handling. Additional controls include high-resolution manual movement, go-to-location, virtual restrictions, consumable monitoring, do-not-disturb settings, voice pack management, and dust streaming. The underlying \CapabilityRouter\ base class has been refactored to use a unified error logging mechanism via \RobotFirmwareError\.
backend/lib/webserver/capabilityRouters · high confidence
New client-side map structures for interactive zone and line editing
The map editor now supports creating and manipulating several client-side visual structures directly on the canvas, including Zones, Restricted Zones (No-Go and No-Mop areas), Ramps, Cutting Lines, Thresholds, Virtual Walls, Curtains, and Go-To targets. These structures are fully interactive: users can tap to select them, drag to move or resize them using on-screen control handles, and delete them. The rendering respects HiDPI displays for crisp visuals, and specific structures like Zones display their calculated dimensions in meters. This change introduces the frontend logic and rendering for these editing primitives, which exist only on the client side during the editing session.
_frontend/src/map/structures/client\structures · high confidence
New connectivity settings pages with HTTP Basic Auth support
The Connectivity Options menu now includes dedicated pages for configuring Wi-Fi, MQTT, NTP, and Network Advertisement, all rebuilt using the MUI Grid2 layout system. A new Auth Settings page has been added, allowing users to enable HTTP Basic Authentication to restrict access to the Valetudo interface, complete with username and password fields and security guidance. The existing MQTT, NTP, and Network Advertisement settings have also been restructured into their own pages, providing clearer status indicators and configuration controls for each connectivity feature.
frontend/src/options/connectivity · high confidence
New core capability architecture for robot features
The backend's core capabilities module has been restructured into a modular system of distinct capability classes, replacing the previous monolithic or ad-hoc implementations. This change introduces specific, typed interfaces for controlling and monitoring robot functions, including basic navigation (BasicControlCapability, GoToLocationCapability), mopping and dock management (AutoEmptyDockAutoEmptyDurationControlCapability, MopDockMopWashTemperatureControlCapability, MopExtensionControlCapability), map management (MapSegmentEditCapability, MapAnnotationsCapability, PendingMapChangeHandlingCapability), and sensor/obstacle handling (ObstacleImagesCapability, CarpetSensorModeControlCapability). Users benefit from a more consistent and granular control model where supported features are explicitly defined by their respective capability classes, enabling better support for diverse robot models and more precise configuration of advanced features like cleaning routes, carpet detection, and consumable monitoring.
backend/lib/core/capabilities · high confidence
New live map action controls for Go To, Segment, and Zone cleaning
The live map interface now includes dedicated action components (GoToActions, SegmentActions, ZoneActions) that allow users to trigger robot commands directly from the map. These controls feature a short-press to execute the action and a long-press (500ms) to open an Integration Help Dialog displaying the specific MQTT/REST payload for the operation. The Segment and Zone actions include an iteration count toggle, while the Go To action is disabled when the robot is busy, providing clear visual feedback and status-based constraints.
_frontend/src/map/actions/live\_map\actions · high confidence
New map editing action components for segments, annotations, and restrictions
The map editing interface now includes dedicated action components for managing map segments, map annotations (thresholds, curtains, ramps), and virtual restrictions (virtual walls, no-go areas, no-mop areas). These new UI components in the edit\_map\_actions directory provide the controls for renaming segments, setting floor materials, and saving changes to the robot's map configuration, ensuring edits are only possible when the robot is docked.
_frontend/src/map/actions/edit\_map\actions · high confidence
New map entity models for spatial features
Added a new set of backend entity classes in \backend/lib/entities/map/entities\ to represent map-based spatial data. This includes a base \MapEntity\ with validation for integer coordinates, and specific subclasses for \PointMapEntity\ (charger locations, robot positions, go-to targets, obstacles), \LineMapEntity\ (virtual walls, thresholds, curtains), \PolygonMapEntity\ (active zones, no-go areas, no-mop areas, carpets, ramps), and \PathMapEntity\ (paths, predicted paths). These entities provide a structured way to handle map annotations and spatial constraints within the application.
backend/lib/entities/map/entities · high confidence
New map structure rendering components
The map view now supports rendering a comprehensive set of new structural elements, including active zones, no-go areas, no-mop areas, ramps, thresholds, virtual walls, curtains, carpets, and obstacle markers. These additions enhance the visual detail of the floor plan, allowing users to see specific room boundaries, restricted zones, and physical obstacles directly on the map.
_frontend/src/map/structures/map\structures · high confidence
New modular API v2 router architecture with expanded configuration endpoints
The webserver backend has been restructured into a modular router system (API v2) that exposes granular control over robot capabilities, system settings, and device management. Users can now manage timers with custom labels and pre-actions, configure NTP and network advertisement (SSDP/UPnP/mDNS), update firmware via a new Updater API, and view detailed system and runtime information. The API also supports a new event system for robot interactions, allows setting a custom friendly name, and includes a killswitch for camera streaming. Additionally, the server now serves a 404 page for unknown routes and validates requests against an OpenAPI schema.
backend/lib/webserver · high confidence
New robot management interface with consumables, manual control, and statistics
The robot settings area has been restructured into a new interface featuring dedicated pages for consumables, manual control, and total statistics. The Consumables page now displays progress bars for remaining life and allows users to reset consumable states. Manual Control supports both standard and high-resolution movement via joystick, D-pad, or keyboard inputs, and can optionally display a live dustbin camera stream. A new Total Statistics page provides an overview of robot usage data alongside achievement badges.
frontend/src/robot · high confidence
New robot settings capabilities: Do Not Disturb, Voice Packs, Speaker, and Quirks
The robot settings interface now includes dedicated configuration panels for four new capabilities. Users can manage Do Not Disturb schedules by enabling/disabling the feature and setting start/end times in UTC. Voice pack management allows users to download and install new language packs by providing a URL, language code, and hash, with progress tracking during download and installation. Speaker controls let users adjust volume via a slider and test audio output. Additionally, a new Quirks section displays available experimental or advanced options as selectable dropdowns, with support for refetching when no quirks are present. These components are laid out using a responsive grid that switches to a multi-column masonry-style layout on wider screens.
frontend/src/robot/capabilities · high confidence
New timer scheduler with pre-actions and drift prevention
The backend now uses a new Scheduler module to manage robot timers, introducing support for pre-actions (fan speed, water usage, and operation mode control) that run before the main cleanup action. To ensure reliability, the scheduler includes logic to prevent timer drift by re-evaluating missed minutes and waits five seconds after pre-actions to allow the firmware to report state changes before proceeding.
backend/lib/scheduler · high confidence
New utility assets and design tools added to icon library
The \assets/icons/util\ directory now includes several new SVG assets and a parametric design tool. New icons added are \add-icon-plus.svg\, \drop.svg\, \robot\_with\_extensions.svg\, and a blank template \tpl.svg\. Additionally, \fan\_parametric.htm\ has been added as an interactive HTML tool for generating fan speed icons by adjusting parameters like line count, curvature, and radius.
assets/icons/util · high confidence
New utility modules for system tools, networking, and caching
The backend/lib/utils directory now includes several new modules: DummyCloudTLSManager for generating and caching TLS certificates, KeyValueDeduplicationCache for memory-efficient value comparison using hardware-adaptive hashing, LinuxTools and LinuxToolsHelper for parsing /proc filesystem data (memory, network interfaces, routes) and executing system commands, SSDPServer for handling UPnP/SSDP network discovery, PipelineThroughputTracker for monitoring data stream throughput, ValetudoHelper for managing robot configuration and friendly names, and supporting utilities like Tools (system stats, IDs), iso8601 (duration conversion), misc (sleep), and const (image formats).
backend/lib/utils · high confidence
Redesigned map interface with live editing and mode switching
The map view has been restructured into distinct Live and Edit modes to improve usability and performance. The Live Map now features a mode switcher allowing users to toggle between segment selection, zone cleaning, and Go-To target placement, with the last selected mode remembered in the browser. The new Edit Map interface supports creating and managing virtual restrictions (walls, no-go areas, thresholds) and map annotations, with specific help text for each mode. Under the hood, map rendering is offloaded to a Web Worker to prevent UI jank, and carpet materials are now visually distinguished with specific patterns in the map layers.
frontend/src/map · high confidence
Valetudo backend library restructured with new core components
The backend/lib directory has been restructured to introduce a new event-driven architecture and improved system stability. A new ValetudoEventStore and handler system now manages robot events (such as consumable depletion and map changes) with interactive reset capabilities. Configuration handling has been rewritten to include JSON schema validation, automatic backup on invalid files, and migration logic. Network reliability is enhanced via a NetworkAdvertisementManager (SSDP/mDNS) and a NetworkConnectionStabilizer that pings the gateway to prevent Wi-Fi drops on embedded devices. Additionally, a PhoenixManager enables 'reincarnation' (state-preserving restarts) for crash recovery and updates, while the Logger now automatically clears large log files.
backend/lib · high confidence
Viomi robot support expanded with new models and capabilities
This change introduces full support for Viomi V6, V7, and V8 robot vacuum models, including automatic device detection. It adds a comprehensive set of capabilities for these devices, such as operation mode control (vacuum, mop, vacuum-and-mop), fan speed and water usage adjustment, zone cleaning, manual control, and map segmentation/editing. Additionally, it introduces specific quirks for the V6 and V8 models to control button LEDs and enable an 'outline cleaning' mode, while providing common attribute definitions and a quirk factory to manage these device-specific features.
backend/lib/robots/viomi · high confidence
Viomi robot support: comprehensive capability implementation
This update introduces a full suite of capabilities for Viomi vacuum robots, enabling users to control basic operations (start, stop, pause, resume, dock), manage cleaning routes (normal/deep mop), and configure device settings such as fan speed, water usage, carpet mode, and speaker volume. Users can now perform zone and segment-based cleaning with support for up to 10 zones and 2 iterations, edit and rename map segments, and set virtual restrictions (walls and zones). Additional features include consumable monitoring (brushes, filter, mop), current statistics (time, area), do-not-disturb configuration, manual directional control, map reset, voice pack management, and speaker testing.
backend/lib/robots/viomi/capabilities · high confidence
Behavioural changes
1 commit (0 fixes) modifying build\_dependencies
A change to existing behaviour in build\_dependencies — 1 commit, 2 files.
_build\dependencies · medium confidence · unverified
Added documentation for timer behavior and time synchronization requirements
A new help resource (TimersHelp.ts) has been added to the frontend to inform users that timers are evaluated and stored in UTC, displayed in the browser's local timezone, and do not automatically adjust for Daylight Saving Time. It also clarifies that timer execution is contingent on the system having a plausible time, warning users that if the system time has never been synced (e.g., no NTP), timers will not execute.
frontend/src/valetudo/timers/res · high confidence
Core entity model restructured with new domain classes
The core entity layer has been reorganized into a new \backend/lib/entities/core\ module, introducing a comprehensive set of domain-specific classes to replace previous ad-hoc structures. This update adds dedicated entities for robot state and configuration, including \ValetudoTimer\ (supporting custom labels, pre-actions, and segment-based actions), \ValetudoRobotError\ (with detailed severity and subsystem classification), and \ValetudoConsumable\ (tracking filter, brush, and mop wear). It also standardizes map and navigation data with \ValetudoMapSegment\, \ValetudoMapAnnotation\, \ValetudoZone\, and \ValetudoRestrictedZone\, while refining connectivity reporting via \ValetudoWifiStatus\ (now including BSSID and IP details) and \ValetudoWifiConfiguration\. These changes provide a more robust and consistent data model for the robot's internal state and user-facing features.
backend/lib/entities/core · high confidence
Custom build and watch scripts replace Create React App
The frontend build process no longer relies on Create React App; instead, custom scripts in \frontend/scripts/build.js\ and \frontend/scripts/watch.js\ now directly invoke Webpack via a shared configuration factory. This change provides explicit control over the production build and development watch modes, including file size reporting, public folder copying, and compilation status output, while removing the previous CRA abstraction layer.
frontend/scripts · high confidence
Eject from Create React App to custom Webpack configuration
The frontend build system has been refactored to remove the dependency on Create React App. The project now uses a custom Webpack configuration (defined in \frontend/config/webpack.config.js\) and a dedicated paths module (\frontend/config/paths.js\) to manage build settings, module resolution, and environment variables. This change provides direct control over the build process, replacing the previous abstracted CRA setup with explicit Webpack rules for handling assets, TypeScript/JSX compilation, and CSS processing.
frontend/config · high confidence
Enhanced backend stability and security posture
The backend now implements stricter error handling and security measures to improve reliability. It includes a mitigation for CWE-1321 Prototype Pollution by freezing the Object prototype, and adds robust handlers for uncaught exceptions and unhandled rejections to ensure orderly shutdowns. Additionally, the codebase has been restructured with new ESLint configurations (including automated, pedantic, and standard profiles) and TypeScript configuration to enforce consistent coding standards and improve code quality.
backend · high confidence
HiDPI support and map rendering improvements
The map renderer now supports HiDPI displays, ensuring sharper visuals on high-resolution screens by correctly handling device pixel ratios. This change includes a new context tracking wrapper to manage canvas transformations without monkey-patching, path simplification for better performance, and specific workarounds for Chrome 107+ DOMMatrix issues. Users will experience improved map clarity and smoother interactions on HiDPI devices, with fallbacks for Safari compatibility.
frontend/src/map/utils · high confidence
Introduce core robot abstraction and vendor quirks support
The backend core now features a new \ValetudoRobot\ base class that centralizes state management, capability registration, and map polling logic, replacing the previous scattered implementation. This change introduces a \Quirk\ system for vendor-specific settings that do not fit generic capabilities, allowing for model-specific toggles in the UI. Additionally, new error handling classes (\NotImplementedError\, \RobotFirmwareError\) and a \ValetudoRobotFactory\ for robot implementation autodetection are added to improve code structure and maintainability.
backend/lib/core · high confidence
Introduce new entity model for robot state and attribute subscriptions
The backend now uses a new object-oriented entity structure in \backend/lib/entities\ to manage robot state and attribute changes. This includes a base \SerializableEntity\, a \ContainerEntity\ that supports subscribing to attribute updates via an \AttributeSubscriber\ interface, and a \RobotState\ class that extends this to represent the robot's current state (including map data). This change replaces the previous flat or implicit state representation with a structured, event-driven model for attributes.
backend/lib/entities · high confidence
Introduce structured MQTT controller with concurrency safeguards and event publishing
The MQTT integration has been refactored into a new, structured \MqttController\ that replaces legacy configuration options with sensible defaults and introduces robust concurrency handling. To prevent race conditions during reconfiguration, the controller now uses semaphores to manage access and ensures that state is only refreshed while connected. It also deduplicates outgoing messages and ignores received retained messages to work around common user errors. Additionally, the system now publishes ValetudoEvents to MQTT, allowing for interaction via the protocol, and exposes runtime metrics via REST.
backend/lib/mqtt · high confidence
Introduce structured state attribute classes for robot status and components
The backend now exposes a new set of typed state attributes for the robot's status and hardware components. Users will see more granular and structured data for the robot's operational status (including specific flags like zone, segment, or mapping), battery state (with charging/discharging/charged states), dock status (idle, emptying, cleaning, drying, error), and dock component levels (water tank, dustbag, detergent). Additionally, attachment states (dustbin, watertank, mop) and preset selections (fan speed, water grade, operation modes like vacuum, mop, vacuum\_and\_mop, vacuum\_then\_mop) are now available as distinct, strongly-typed attributes, replacing previous flat or less structured representations.
backend/lib/entities/state/attributes · high confidence
Introduce unified ListMenu component system for settings and controls
The settings interface now uses a new, unified ListMenu component structure to display options, replacing previous views. This change introduces a suite of reusable list item components—including Button, Link, Select, Toggle Switch, Text Edit, and SubHeader items—allowing for a consistent look and feel across robot settings. A key addition is the new Duststreaming configuration menu, which provides a guided setup for enabling camera streaming with a mandatory ethical warning and cooldown period, alongside specific installation instructions for the required binary.
_frontend/src/components/list\menu · high confidence
Introduce v2 API client with new data models and map compression support
The frontend API layer has been replaced with a new v2 client (\frontend/src/api\). This introduces new TypeScript interfaces for robot state (\RawRobotState\) and map data (\RawMapData\), including support for map layer materials and entity types. The client now handles automatic version mismatch detection via \x-valetudo-commit-id\ headers to force a page reload when the backend updates. It also implements transparent decompression of v2 map pixel data in \mapUtils.ts\ and uses \ReconnectingEventSource\ for robust Server-Sent Events (SSE) subscriptions for logs and map updates.
frontend/src/api · high confidence
Major refactor of MQTT Home Assistant integration to use a capability-based handle system
The MQTT integration has been rewritten to expose robot capabilities as distinct, modular Home Assistant entities. This change replaces the previous monolithic or hack-based approach with a structured system where each robot capability (such as AutoEmptyDockManualTrigger, BasicControl, ConsumableMonitoring, CurrentStatistics, GoToLocation, KeyLock, Locate, MapSegmentation, ObstacleAvoidance, PetObstacleAvoidance, PresetSelection, SpeakerVolumeControl, and TotalStatistics) has its own dedicated MQTT handle. These handles automatically generate appropriate Home Assistant auto-configuration for buttons, switches, selects, numbers, and sensors, ensuring that features like consumable monitoring, statistics, and segment cleaning are exposed with correct device classes, units, and entity categories. This provides a more robust, consistent, and feature-rich integration for Home Assistant users.
backend/lib/mqtt/capabilities · high confidence
Map data model refactored with pixel compression and unique map identification
The map entity structure has been redesigned to improve memory efficiency and data integrity. Map layers now store pixel data using Run-Length Encoding (RLE) compression, significantly reducing the size of map payloads for large areas. Additionally, every generated map instance is now assigned a unique nonce via \crypto.randomUUID()\, ensuring distinct identification for each map snapshot.
backend/lib/entities/map · high confidence
Map segment coloring logic ported to TypeScript
The map color-finding utilities in \frontend/src/map/utils/colors\ have been converted from JavaScript to TypeScript. This change introduces strict typing for segment IDs, color IDs, and graph structures (via \ColorUtils\, \MapAreaVertex\, and \MapAreaGraph\) and updates the \FourColorTheoremSolver\ to use these types, ensuring type safety for the algorithm that assigns distinct colors to adjacent map segments.
frontend/src/map/utils/colors · high confidence
MiioWifiConfigurationCapability now validates Wi-Fi credentials and uses a non-zero UID for provisioning
The MiioWifiConfigurationCapability now enforces validation on SSID and WPA2-PSK passwords, rejecting inputs containing special characters like semicolons, backslashes, or quotes to prevent issues with certain robot firmwares. Additionally, the Wi-Fi provisioning command now uses a non-zero UID (1337) instead of 0, which fixes provisioning failures on specific devices such as the Roborock A38.
backend/lib/robots/common/miioCapabilities · high confidence
New UI hooks for slider behavior, theming, and state management
This change introduces several new React hooks in the frontend to improve user experience and code organization. The \useCommittingSlider\ hook manages slider interactions by displaying the current value immediately but only committing it to the backend upon user confirmation, with an automatic reset if the value is not applied within a specified timeout. The \useFeedbackPending\ hook provides a mechanism to track pending state for UI feedback. Theming is centralized via \useValetudoColors\ and \useValetudoColorsInverse\, which dynamically return color palettes based on the current light or dark mode. Additionally, \useIsMobileView\ simplifies responsive design checks, and \useLocalStorage\ offers a persistent state solution for client-side data.
frontend/src/hooks · high confidence
New map structure rendering and interaction model
The map rendering engine now uses a new \Structure\ class to handle the drawing and interaction of map elements. This change introduces a dedicated canvas context tracking wrapper to avoid monkey-patching the 2D context, improves label rendering with the IBM Plex Sans font, and implements a mipmap caching system for optimized image scaling. It also adds support for intercepting tap events on structures and handles visual cleanup for zone dimensions based on pixel size.
frontend/src/map/structures · high confidence
New webserver middleware layer for security, access control, and metadata
The backend webserver now includes a new middleware module that enforces stricter security and access policies. External access is now blocked by default for non-local and non-private IPv4/IPv6 addresses, returning a 418 status code for denied requests. A Content Security Policy header is added to restrict worker sources, and version/commit headers are exposed to help the frontend detect backend updates. Additionally, a humorous Easter egg is available via a specific authorization header, and server identification headers are set.
backend/lib/webserver/middlewares · high confidence
Patch applied to path-to-regexp to restrict identifier character sets
A patch has been added for the path-to-regexp library (version 8.3.0) that modifies the regular expressions used to validate identifier start and continuation characters. Specifically, the Unicode property escapes for ID\_Start and ID\_Continue have been replaced with explicit ASCII character ranges (a-zA-Z0-9 and underscores), ensuring that only standard ASCII letters, digits, and underscores are recognized as valid identifier components in path patterns.
patches · high confidence
Redesigned controls interface with new component structure
The controls section has been completely rebuilt using a new modular component architecture. The main layout is now handled by ControlsBody, which conditionally renders specific control cards based on robot capabilities. New components include BasicControls for start/pause/stop/home commands with confirmation dialogs for map actions, Attachments for displaying supported robot attachments, CurrentStatistics for real-time cleaning stats, and an enhanced Dock component that visualizes dock component states (water tanks, detergent, dustbag) with color-coded status indicators. PresetSelection controls for fan speed, water grade, and operation mode now use a collapsible slider interface. The RobotStatus card displays battery levels with color-coded progress bars. Mobile experience is improved via a dedicated MobileControls sheet component. All controls are wrapped in a consistent ControlsCard UI pattern.
frontend/src/controls · high confidence
Refactored Home Assistant MQTT integration with new anchor-based architecture
The Home Assistant MQTT integration has been restructured to use a new 'HassAnchor' system for managing dynamic values and topic references, replacing previous direct handling methods. This change introduces a more robust mechanism for publishing autodiscovery topics and handling state updates, including support for optional current and total statistics, custom friendly names, and improved entity ID generation via object IDs. The refactoring also aligns the integration with newer Home Assistant requirements, such as specific device and state classes, and removes legacy configuration cruft.
backend/lib/mqtt/homeassistant · high confidence
Refactored Home Assistant component architecture and updated vacuum autodiscovery
The Home Assistant integration has been restructured to use a new base \HassComponent\ class and specific implementations like \VacuumHassComponent\ and \InLineHassComponent\, replacing previous ad-hoc logic. For vacuum entities, the autodiscovery payload now uses \default\_entity\_id\ instead of the deprecated \object\_id\ and removes the deprecated \schema\ property to comply with Home Assistant 2023.8+ naming requirements. Additionally, the vacuum component now correctly exposes \fan\_speed\ and \clean\_segments\ features based on the robot's capabilities, and legacy Homie optionality has been removed.
backend/lib/mqtt/homeassistant/components · high confidence
Refactored update provider into modular components with nightly channel support
The update provider logic has been broken out into separate, dedicated files to improve maintainability and enable new update sources. This change introduces a new \GithubValetudoNightlyUpdateProvider\ that allows users to check for updates against the nightly build channel, in addition to the existing stable release provider (\GithubValetudoUpdateProvider\). The refactoring also includes a \NullUpdateProvider\ for scenarios where no updates are available, and extracts release and binary data structures into their own classes (\ValetudoRelease\, \ValetudoReleaseBinary\) for cleaner code organization.
_backend/lib/updater/lib/update\provider · high confidence
Refactored updater into modular steps with improved storage and error handling
The updater logic in this location has been restructured into distinct, reusable steps (Check, Download, Apply) to improve code organization and safety. This change introduces a storage survey that automatically selects UPX-compressed binaries when disk space is low, ensuring updates can proceed on constrained devices. It also adds specific error types for update failures (such as insufficient space or invalid checksums) and passes file descriptors between steps to handle downloads more safely, while providing clearer error messages for HTTP failures.
backend/lib/updater/lib/steps · high confidence
Refactored updater state management into distinct state classes
The updater logic in the backend has been restructured to use a dedicated state machine pattern, replacing the previous monolithic implementation with separate classes for each lifecycle stage (Idle, Downloading, ApprovalPending, ApplyPending, NoUpdateRequired, Error, Disabled). This change introduces a 'busy' flag to the base state to provide better user feedback during operations and adds a 'changelog' field to the NoUpdateRequired and ApprovalPending states, allowing the system to display release notes even when no update is needed or before approval. The update process now also passes file descriptors for safer binary handling.
backend/lib/entities/core/updater · high confidence
Restructured MQTT handle architecture with new base classes and mappings
The MQTT integration has been refactored to use a new hierarchical handle system. New base classes (MqttHandle, NodeMqttHandle, PropertyMqttHandle) define the structure for MQTT topics, while RobotMqttHandle acts as the root device node. A new HandleMappings file centralizes the mapping between robot capabilities (like BasicControl, FanSpeed, MapSegmentation) and their specific MQTT handles. This change introduces new MQTT nodes for MapData (including Home Assistant camera integration) and ValetudoEvents (allowing event interaction via MQTT), replacing the previous flat or less structured handle organization.
backend/lib/mqtt/handles · high confidence
Restructured options interface with categorized navigation and new management features
The options interface has been reorganized into distinct categories—Connectivity, Map Management, Robot, and Valetudo—each with its own sub-router, replacing the previous flat structure. This change introduces new capabilities for users, including the ability to set a custom friendly name for the Valetudo instance, manage map data (persistent maps, mapping passes, map resets, and exports), and configure connectivity settings (Wi-Fi, MQTT, NTP, and network advertisement). Additionally, a new Analytics page has been added under Valetudo options, and the update provider can now be switched between Release and Nightly channels.
frontend/src/options · high confidence
Rewritten map touch handling with structured gesture support
The map's touch and mouse interaction logic has been replaced with a new TypeScript-based architecture in \frontend/src/map/utils/touch\_handling\. This change introduces a \TouchHandler\ that normalizes input into \MapCanvasEvent\ objects and manages a state machine for gestures, including taps, pans, and pinches. Users benefit from more robust gesture recognition, such as the ability to upgrade a tap to a pan if movement is detected, and improved pinch-to-zoom behavior that tracks individual pointer IDs. The new system also ensures that all changed touches are processed during touch events, reducing the likelihood of missed inputs during complex multi-touch interactions.
_frontend/src/map/utils/touch\handling · high confidence
Updated default configuration and map resources
The default configuration file has been updated to include new settings for network advertisement (SSDP/mDNS), an automatic updater, an out-of-box-experience welcome dialog, and dust streaming. The default map resource has been replaced with a new file defining a 5120x5120 pixel map with a 5-pixel size, providing the baseline map data structure for the system.
backend/lib/res · high confidence
Fixes
Added placeholder for generated Midea robot code
A .gitkeep file was added to the backend/lib/robots/midea/generated directory to ensure the folder is tracked by version control, allowing generated code files to be committed in the future.
backend/lib/robots/midea/generated · high confidence
New 3irobotix map parser handles temporary maps and non-standard dimensions
Added a new map parser for 3irobotix robots that correctly processes temporary maps (such as those generated during initial cleanup when no segments exist) and maps with dimensions other than the previously assumed 800x800px. The parser now uses a fallback indexing strategy when the unique map ID is zero, preventing out-of-memory errors and ensuring compatibility with a wider range of map data formats.
backend/lib/robots/3irobotix · high confidence
New miio protocol implementation with robust handshake and encryption
The backend's Miio library has been rewritten to provide a more reliable connection to Miio devices. This update introduces a new Codec for handling AES-128-CBC encryption and MD5 checksums, ensuring data integrity. A new RetryWrapper manages the local connection handshake and implements automatic retries with token refresh logic to handle stale stamps and timeouts. Additionally, a Dummycloud component now handles cloud-side spoofing and message routing, while specific error classes (MiioTimeoutError, MiioDummycloudNotConnectedError) provide clearer failure diagnostics for users.
backend/lib/miio · high confidence
Test coverage
Added test coverage for map parsing, event store, and Linux Wi-Fi capabilities
Added comprehensive test suites for the backend's core and vendor-specific components. This includes tests for the 3irobotix map parser (handling various Viomi and Conga map formats), the ValetudoEventStore (verifying event rehydration and handling of unknown classes), and the MSmart packet parsers (validating B8 packet structures and provisioning packets). Additionally, tests were added for the Linux Wi-Fi configuration and scan capabilities to ensure correct parsing of \iw\ command output, as well as unit tests for the MiioSocket message ID generation and the ValetudoMap deserialization logic.
backend/test · high confidence
Dependencies
Valetudo 2026.08.0 monorepo dependency update
This release updates the Valetudo monorepo (backend, frontend, docs) to version 2026.08.0, introducing several significant dependency upgrades. The backend now uses Express 5.2.1 and requires Node.js \>=16, while the frontend has been upgraded to React 19.2.3 and React Router 7.12.0. The build tooling has also been updated, with the backend bundler (@yao-pkg/pkg) moving to version 6.6.0 and the docs site migrating to Eleventy 3.1.5.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 40 → 39 (-1.1)
- Rubric changed (rubric-2026.09.12 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 70 → 70 (+0.0)
- Architecture 81 → 79 (-2.1)
- Maturity 56 → 56 (+0.3)
- Readiness 50 → 43 (-6.6)
- Security 39 → 39 (+0.0)
- Accessibility 31 → 31 (+0.0)
- Performance 60 (new)
Resolved (19)
- ClassTooLong: DreameMapParser (backend/lib/robots/dreame/DreameMapParser.js)
- ClassTooLong: MqttController (backend/lib/mqtt/MqttController.js)
- Dependency hygiene PARTLY measured — npm pinning read, dependency currency not (no pnpm-resolved versions to grade)
- Documentation: no installation or build instructions (README.md)
- Documentation: no installation or build instructions (docs/pages/installation/dreame.md)
- Documentation: no installation or build instructions (docs/pages/installation/midea.md)
- Documentation: no licence statement (docs/index.md)
- Documentation: written for insiders (docs/pages/general/so-youve-been-banned.md)
- Documentation: written for insiders (docs/pages/general/why-not-valetudo.md)
- FileTooLong: util/generate_mqtt_docs.js (util/generate_mqtt_docs.js)
- Hotspot: backend/lib/robots/dreame/DreameQuirkFactory.js (backend/lib/robots/dreame/DreameQuirkFactory.js)
- Hotspot: backend/lib/robots/midea/MideaValetudoRobot.js (backend/lib/robots/midea/MideaValetudoRobot.js)
- Hotspot: backend/lib/webserver/ValetudoRouter.js (backend/lib/webserver/ValetudoRouter.js)
- Hotspot: frontend/src/map/SpectatorMapPage.tsx (frontend/src/map/SpectatorMapPage.tsx)
- Hotspot: util/generate_mqtt_docs.js (util/generate_mqtt_docs.js)
- Medium CVE: [GHSA redacted] (package-lock.json)
- Off-boarding risk: anonymized user #1
- connect (cognitive 33) (backend/lib/mqtt/MqttController.js)
- connect (cyclomatic 18) (backend/lib/mqtt/MqttController.js)
New (33)
- Documentation: no contributor guidance (docs/pages/general/why-not-valetudo.md)
- FunctionTooLong: DreameValetudoRobot.DreameValetudoRobot.MAP_ERROR_CODE (backend/lib/robots/dreame/DreameValetudoRobot.js)
- FunctionTooLong: RoborockValetudoRobot.RoborockValetudoRobot.MAP_ERROR_CODE (backend/lib/robots/roborock/RoborockValetudoRobot.js)
- Low cohesion: DreameValetudoRobot (LCOM4 4) (backend/lib/robots/dreame/DreameValetudoRobot.js)
- Low cohesion: FourColorTheoremSolver (LCOM4 4) (frontend/src/map/utils/colors/FourColorTheoremSolver.ts)
- Low cohesion: MiioValetudoRobot (LCOM4 5) (backend/lib/robots/MiioValetudoRobot.js)
- Low cohesion: RoborockValetudoRobot (LCOM4 6) (backend/lib/robots/roborock/RoborockValetudoRobot.js)
- Medium vulnerability: [GHSA redacted] (package-lock.json)
- Off-boarding risk: anonymized user #1
- Outdated (npm): @fontsource/ibm-plex-sans
- Outdated (npm): @fontsource/jetbrains-mono
- Outdated (npm): @mui/icons-material
- Outdated (npm): @mui/material
- Outdated (npm): @tanstack/react-query
- Outdated (npm): @tanstack/react-query-devtools
- Outdated (npm): aedes
- Outdated (npm): ajv
- Outdated (npm): axios
- Outdated (npm): bonjour-service
- Outdated (npm): compression
- …and 13 more
Changes since last survey
- 2 commits — 1 feature/other, 1 fixes
By area
- backend/lib — 1 commit
- docs/pages — 1 commit
Notable commits
- fix: fix(mqtt): Remove legacy cruft homie and home assistant optionality
- change: docs: Updating note for roborock ota
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
Hypfer/Valetudo was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 2 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 31bbc50c8dc34d02d4ed1a24d2febe0444344c64 — the exact code this score is about.
- Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.