On 14 October 2026 ESPHome maintainers published a developer note for a breaking change that lands with 2026.10.0: remote_base protocol methods are no longer virtual, receiver listener and dumper lists are fixed-size vectors sized at code generation, and a protocol’s .cpp file is compiled only when the configuration actually uses it. Ordinary YAML remotes keep working. External components and a few advanced lambdas need small edits before they build on 2026.10.

Why the clean break

Every IR/RF protocol in remote_base used to cost every build that enabled a receiver or transmitter, whether the config named that protocol or not. Virtual encode(), decode() and dump() kept vtables and bodies in the image, and the receiver grew heap vectors for listeners at setup even though codegen already knew the count. The PR’s CI memory report measured about 14.6 KB less flash on an ESP8266 test build with a receiver and the ir_rf_proxy platforms, and about 11.9 KB less on an ESP32 IDF build; the rc_switch protocol table also moves from RAM into flash. With 35 in-tree protocols and more arriving each release, there was no soft deprecation path once override on a non-virtual method became a compile error.

Who must change code

Touch your external component if it derives from RemoteProtocol and marks methods override, registers listeners or dumpers from C++ setup(), uses a bundled protocol class from C++ without a matching dump/trigger/transmit entry in the config, or calls the old split call_listeners_() / call_dumpers_() helpers. Migration is mechanical: drop override, register listeners from Python with remote_base.attach_receiver / register_listener, call remote_base.request_protocol("nec") (or the matching source stem) when you need a bundled protocol from C++, and use call_listeners_dumpers_(). Version guards are documented for components that must still build on 2026.9.

YAML users are fine unless a lambda transmits a concrete protocol type such as id(tx).transmit<remote_base::NECProtocol>(data) without any other reference to that protocol in the config. Add a dump entry, an on_nec trigger or a transmit_nec action so the source file stays in the build. Beta 4 of 2026.10.0 shipped on 13 October; stable 2026.10.0 is still targeted for 21 October. If you maintain a custom IR component, rebuild against a 2026.10 beta before the stable cut.