Changelog

Release notes, fixes, and upgrade instructions. Unreleased entries describe work in progress.

Sections

3.1.0 Unreleased

3.0.0 Wi-Fi sensing SDK, standalone firmware, and browser tools

ESPectre 3.0 splits the sensing engine, runtime, and frontend so Wi-Fi motion detection can run inside other firmware. It turns the three release candidates into one stable release.

Coming from 2.x? Read up to "Upgrading from 2.x". Tested a release candidate? Jump to "For release candidate testers".

Highlights

Sensing and CSI

SDK, integrations, and tools

Upgrading from 2.x

For release candidate testers

Changed since 3.0.0-rc3

Fixed since 3.0.0-rc3

Upgrading from 3.0.0 release candidates

3.0.0-rc3 SDK on the ESP Component Registry and ESP-IDF 6 support

Highlights

Added

Changed

Fixed

Removed

SDK source migration

Updating C++ code from rc2 is a compile-and-replace pass. Behavior changes only where noted. The external traffic setting also changes on the wire, in Kconfig, and in ESPHome YAML; saved settings migrate on their own.

rc2 rc3
#include "runtime/runtime_interface.h" #include "runtime/runtime_config.h"
IEspectreRuntime Internal; use RuntimeFrontendController
Protocol, JSON, and transport contracts from espectre_sdk.h #include "espectre_protocol_sdk.h"; the services and MQTT headers include it
Diagnostic JSON and field helpers in runtime/runtime_diagnostics.h runtime/runtime_diagnostics_protocol.h
Profile masks 1U, 2U, 4U, 7U ESPECTRE_DIAGNOSTIC_PROFILE_NATIVE, _BRIDGE, _MICRO, _ALL
CsiTrafficMode, config.csi_traffic_mode = EXTERNAL config.traffic_generator_mode = TrafficGeneratorMode::EXTERNAL
RuntimeTrafficMode TrafficGeneratorMode
config.csi_capture_profile config.csi_capture_policy
config.segmentation_threshold config.threshold
config.segmentation_window_size_ms config.window_size_ms
RUNTIME_SEGMENTATION_THRESHOLD_DEFAULT RUNTIME_THRESHOLD_DEFAULT
RUNTIME_SEGMENTATION_WINDOW_SIZE_MS_* RUNTIME_WINDOW_SIZE_MS_*
set_threshold_runtime(), set_motion_hits_runtime(), set_detection_algorithm_runtime() set_threshold(), set_motion_hits(), set_detection_algorithm()
set_csi_traffic_mode_runtime(EXTERNAL) set_traffic_generator_mode(TrafficGeneratorMode::EXTERNAL)
set_traffic_generator_mode_runtime() set_traffic_generator_mode()
traffic_mode_name(), parse_traffic_mode() traffic_generator_mode_name(), parse_traffic_generator_mode()
runtime_traffic_mode_valid(), runtime_traffic_mode_supported() runtime_traffic_generator_mode_valid(), runtime_traffic_generator_mode_supported()
csi_traffic_mode_name(), parse_csi_traffic_mode(), runtime_csi_traffic_mode_valid(), csi_traffic_mode_is_sensing_control() Removed; traffic_generator_mode_name() returns external
csi_traffic_mode: (ESPHome YAML), CONFIG_ESPECTRE_CSI_TRAFFIC_MODE_EXTERNAL, csi_traffic_mode (protocol) traffic_generator_mode: external, CONFIG_ESPECTRE_TRAFFIC_GENERATOR_MODE_EXTERNAL, traffic_generator_mode: "external"
make_runtime_sensing_config() RuntimeConfig{}
snapshot.fixed_subcarriers controller.subcarriers()
diagnostics.csi_accepted_total, diagnostics.wifi_rssi_dbm diagnostics.csi.accepted_total, diagnostics.link.rssi_dbm; see the grouping entry above
on_periodic_update(snapshot, packets_received) on_periodic_update(snapshot, csi_accepted); same signature
RuntimeProfile, RuntimeSubcarrierSource, visit_runtime_diagnostics() Removed
FrontendCommandEngine::execute(..., raw_stream_callback) Drop the last argument; raw CSI collection opens with GET /csi
handle_device_config_command() parse_espectre_config_command(), parse_espectre_mqtt_config_command()
ESPECTRE_DIRECT_MAX_REQUEST_ID_SIZE ESPECTRE_COMMAND_ID_MAX_LENGTH
ESPECTRE_DIRECT_MAX_METHOD_SIZE Removed; command names use the canonical registry
BaseDetector::packet_index_ total_packets_

Two behavior changes need a decision:

3.0.0-rc2 Signed firmware, CSI capture controls, and standalone SDK builds

Highlights

Firmware and sensing

SDK and diagnostics

Web tools, builds, and maintenance

Breaking changes and migration

3.0.0-rc1 Wi-Fi sensing SDK, multi-frontend support, ready for new runtimes

ESPectre 3.0 makes Wi-Fi sensing a building block for your own products. This first release candidate introduces a C++ SDK and separates the sensing engine from the runtime and frontend, so developers can bring it into their own firmware and extend it to new integrations.

Install, configure, and tune a sensor from the browser, or use one CLI from the first firmware build through deployment, diagnostics, and CSI collection. ESPHome is joined by standalone Native and Matter firmware, all built on the shared sensing engine. Matter controller validation remains limited in this release candidate.

Highlights

SDK, firmware, and tools

Breaking changes and migration

2.8.0 Detection hardening, ML cross-chip reliability, and runtime motion policy

2.7.0 ESPectre configuration over BLE and subcarrier normalization

2.6.0 ESP32-C5 support, context-aware calibration, and stricter validation targets

2.5.1 HT STBC multi-antenna router fix

2.5.0 ML detector, training pipeline, and pre-built firmware

2.4.0 Live recalibration, adaptive threshold, and PCA

2.3.0 End-of-year edition

2.2.0 Gain lock, low-pass filter, and ML data collection

2.1.0 Made for ESPHome compliance

2.0.0 ESPHome native integration

1.5.0 Automatic subcarrier selection

1.4.0 Major refactoring and technical debt reduction

1.3.0 ESP32-C6 platform support

1.2.1 Wi-Fi optimization

1.2.0 Simplified architecture and MVS segmentation

1.1.0 Automatic calibration system

1.0.0 Initial release