❌

Lees weergave

v0.8.15

What's Changed

  • feat(device): hold Back or Forward to scroll sideways with the main wheel (0x1b04 raw wheel) by @AprilNEA in #1828
  • test(gui): draw dialogs at rest before clicking their buttons by @AprilNEA in #1832
  • feat(desktop): offer hold-to-scroll-sideways for Back and Forward by @AprilNEA in #1835
  • feat(device): smooth a mouse's main wheel by diverting it (0x2121) by @AprilNEA in #1837
  • feat(desktop): add a per-device smooth wheel switch to the Scrolling card by @AprilNEA in #1839
  • feat(device): reach Litra lights over HID++ 0x1990 with read-back by @AprilNEA in #1841
  • fix(gui): show the Actions Ring tab for keyboards with a Keys panel by @4ni1ak in #1844
  • fix(gui): retain observed connection icons for offline devices by @i0ntempest in #1830
  • fix(cli): drop a paired device with no identity from fixture capture by @4ni1ak in #1861
  • fix(gui): recognize the MX Ergo precision-mode button slot by @4ni1ak in #1855
  • fix(agent): log thumb-wheel continuous-scroll dispatch by @4ni1ak in #1852
  • fix(i18n): translate the hold-modifiers and tap-key actions in Czech by @Imbecile6197 in #1850
  • feat(gui): add a Next / Previous Desktop thumb-wheel preset by @Rothschildiuk in #1848
  • fix(agent): write a light only when a reload changes its settings by @AprilNEA in #1865
  • feat(agent): keep a change made on a Litra as its setting and publish it by @AprilNEA in #1866
  • feat(gui): add device default option for keyboard bindings by @clifinger in #702
  • fix(linux): report input access as denied when the event node is unreadable by @AalmanSadath in #787
  • fix(gui): embed the Sleep action's moon glyph by @AalmanSadath in #790
  • feat(gui): add a Reset to defaults button to the F-key binding panel by @4ni1ak in #1255
  • fix(gui): enlarge About panel logo by @4ni1ak in #1364
  • fix(hid): open HID++ channels concurrently, not one node at a time by @4ni1ak in #1443
  • feat(gui): add Power User actions to the Action Ring editor by @4ni1ak in #1445
  • fix(inject): give the Windows Screenshot action its own Win+PrtScn chord by @AprilNEA in #1867
  • fix(linux): keep "pen" out of the uinput device names by @AprilNEA in #1868
  • fix(linux): grab a mouse again after it reconnects or appears late by @AprilNEA in #1869
  • feat(desktop): save a change made on a Litra as its setting by @AprilNEA in #1870
  • fix(hook): fall back to a recent device attribution on macOS by @andybateman in #805
  • fix(hid): suppress duplicate Bolt pairing slots by @xcouturecc in #963
  • fix(gui): allow clearing function-key bindings by @xcouturecc in #962
  • feat(gui): show the receiver slot on each device card by @garysassano in #1802
  • fix(gui): fold leftover receiver pairings into one device card by @garysassano in #1801
  • fix(hid): capture the M720 Triathlon's multiplatform gesture button by @kurtlieber in #1613
  • fix(i18n): route hardcoded GUI labels through the catalog by @eibidia in #1331
  • fix(macos): preserve fractional wheel distance by @li-shch in #1154
  • feat(linux): route window-manager native actions through KWin D-Bus on KDE by @werwolf2303 in #1087
  • feat(linux): support Hyprland native remaps by @shawnyeager in #1152
  • fix(agent): include MiddleClick in the macOS HID++ gesture ownership by @tims2002 in #1380
  • test(inject): cover the macOS Lock Screen chord by @AprilNEA in #1885
  • feat(overlay): show keyboard backlight level by @nathan-fontenele in #1695
  • ci(macos): lint the macOS cfg with clippy by @AprilNEA in #1883
  • chore: drop stale lint suppressions and reject module-wide #![allow] by @AprilNEA in #1884
  • feat(core,gui): allow middle click gesture mode by @PedroDiogo in #1738
  • feat(hidpp): add scrolling force control for smartshift enhanced mice by @pedrohgmacedo in #1636
  • fix(core,agent): chain swipes within one gesture-button hold by @sarat03 in #1652
  • feat(linux): ship a Flatpak bundle with each release by @AalmanSadath in #767
  • ci: sweep stale #[allow] on Linux, Windows, and macOS weekly by @AprilNEA in #1887
  • feat(overlay): show a notice when a device's battery runs low by @AprilNEA in #1891
  • feat(overlay): show an indicator when a keyboard turns a lock key on or off by @AprilNEA in #1898
  • fix(device): drop a lock-state read that answers after a reconnection by @AprilNEA in #1899
  • fix(overlay): draw one Actions Ring per display on Wayland by @AprilNEA in #1906
  • feat(core,gui): share per-app profiles across platforms with [apps] aliases by @AprilNEA in #1907
  • chore: release v0.8.15 by @AprilNEA[bot] in #1831

New Contributors

Full Changelog: v0.8.14...v0.8.15

  •  

v25.12.6

Hi,

The OpenWrt community is proud to announce the sixth service release of the OpenWrt 25.12 stable series.

Download firmware images using the OpenWrt Firmware Selector:

Download firmware images directly from our download servers:

Main changes between OpenWrt 25.12.5 and OpenWrt 25.12.6

Only the main changes are listed below. See the full changelog for details.

Security fixes

This release fixes several remotely triggerable vulnerabilities in core network
services that are enabled by default. Updating is strongly recommended.

Many optional packages in the packages feed were also updated to new versions with
security fixes, among them curl 8.22.0, OpenSSH 10.6p1, unbound 1.26.1, BIND 9.20.29,
OpenVPN 2.7.7, strongSwan 6.0.7, HAProxy 3.2.21, expat 2.8.4, nghttp2 1.70.0,
libssh 0.12.2, c-ares 1.34.8, Tor 0.4.9.13, Knot DNS 3.5.7, PowerDNS 4.9.17,
PowerDNS Recursor 5.2.13, Exim 4.100.1, Python 3.13.15, Node.js 22.23.2, xz 5.8.3
and rsync 3.5.1. These packages are not part of the default images; update the
installed packages to get these fixes.

Beyond the issues listed above, this release fixes a number of further security
problems for which no CVE number or dedicated advisory was assigned. We strongly
recommend upgrading to the latest OpenWrt release and installing all available
package updates
.

Important changes

WiFi: GCMP-256 and SAE-EXT-KEY are no longer offered by default

OpenWrt 25.12.0 to 25.12.5 offered the GCMP-256 pairwise cipher and, in some configurations, the SAE-EXT-KEY key management (SAE with a group-dependent hash, also called SAE-GDH) on WPA3 networks with WiFi 6 (HE) or WiFi 7 (EHT), but not in the way the Wi-Fi Alliance "WPA3 and Wi-Fi Enhanced Open Deployment and Implementation Guide" describes it. This configuration caused connection problems, for example with Pixel 10 phones (#21486) and with 802.11r Fast Transition (#22200).

The WPA3 specification makes GCMP-256 and SAE-EXT-KEY mandatory for WiFi 7 and recommends them otherwise. When the configuration recommended by the Wi-Fi Alliance was enabled in the OpenWrt development branch, it turned out that about 15% of the client devices in use are not compatible with it. For example:

  • Some clients cannot connect when GCMP-256 is offered, already on WiFi 6, for example Nanoleaf devices, a Motorola/Unisoc phone and Linux laptops using iwd.
  • With 802.11r Fast Transition enabled, FT-SAE-EXT-KEY prevents some clients from connecting (for example a Samsung Galaxy Tab S10 FE) or makes them reboot shortly after connecting (for example a Poco X6).

See the discussion on the hostap mailing list (https://lists.infradead.org/pipermail/hostap/2026-July/045277.html) and pull request #23009 (#23009) for details.

Starting with 25.12.6, GCMP-256 and SAE-EXT-KEY are no longer offered by default in WPA3-Personal (sae) and WPA2/WPA3 mixed (sae-mixed) mode; only CCMP and plain SAE are offered. The old rsn_override option was removed.

We recommend using WPA3-Personal (sae) or WPA2/WPA3 mixed mode (sae-mixed). If some clients have problems with these modes, use the new WPA3-Personal Compatibility Mode (sae-compat, "WPA2-PSK/WPA3-SAE Compatibility Mode" in LuCI): WPA2 clients see a normal WPA2 network, while clients that support RSN overriding use WPA3.

Only enable GCMP-256 and SAE-EXT-KEY if you need them and if they do not cause problems with your clients. In LuCI, they are on the "Wireless Security" tab of the wireless network as "GCMP-256 pairwise cipher" and "SAE-EXT-KEY (SAE-GDH)". On the command line (replace default_radio0 with the name of your wifi-iface section):

uci set wireless.default_radio0.gcmp256='1'
uci set wireless.default_radio0.sae_ext_key='1'
uci commit wireless
wifi reload

gcmp256 offers GCMP-256 in addition to CCMP, but only if the WiFi driver supports GCMP-256. sae_ext_key offers SAE-EXT-KEY, and also FT-SAE-EXT-KEY when 802.11r is enabled.

DHCP client: the client identifier can be selected

Since OpenWrt 25.12.0, every device generates a random, UUID-based DUID on first boot and stores it in network.globals.dhcp_default_duid. The DHCPv6 client uses it as its DUID, and the DHCPv4 client sends it together with an interface-specific IAID as client identifier (DHCP option 61). This default follows the recommendation of RFC 4361 (https://www.rfc-editor.org/rfc/rfc4361) that DHCPv4 clients use the same DUID as DHCPv6, so the device is identified in the same way for DHCPv4 and DHCPv6. The UUID-based DUID format is defined in RFC 6355 (https://www.rfc-editor.org/rfc/rfc6355). OpenWrt 24.10 sent no client identifier with DHCPv4 and used a DUID-LL derived from the MAC address for DHCPv6. Some DHCP servers, including servers of some ISPs, do not work correctly with the new client identifier, and until now there was no way to go back to the old behavior.

OpenWrt 25.12.6 adds the new per-interface option sendclientid:

  • auto (default): use the client ID configured with the clientid option, else the default DUID of the device, else the MAC address. This is the behavior of 25.12.0 to 25.12.5 and follows RFC 4361.
  • global: always use the default DUID of the device, even if clientid is set.
  • hardware: use the MAC address of the interface (DHCPv4) or a DUID-LL derived from it (DHCPv6).
  • none (DHCPv4 only): do not send a client identifier at all.

We recommend keeping the default auto, which matches the behavior of OpenWrt 25.12.5. Only if the DHCP server of your ISP does not work with it, switch back to the behavior of OpenWrt 24.10 by setting none on the DHCPv4 interface and hardware on the DHCPv6 interface:

uci set network.wan.sendclientid='none'
uci set network.wan6.sendclientid='hardware'
uci commit network
service network reload

In LuCI, the option is called "Preferred client ID" and is on the "Advanced Settings" tab of the interface (Network β†’ Interfaces β†’ Edit). Select "None" for the DHCPv4 interface (wan) and "Hardware address" for the DHCPv6 interface (wan6). Note that the DHCP server sees a changed client identifier as a new client, so you may get a different IPv4 address or IPv6 prefix.

Device support

New devices supported in 25.12.6:

  • ipq806x: Aruba AP-324 / AP-325 (also Siemens Scalance W1750D)
  • mediatek (filogic): Airtel AirFiber AAP4221ZY (Zyxel EX3310-T0)
  • mediatek (filogic): Cudy WR3000U v1
  • mediatek (filogic): Globitel BT-R320
  • mediatek (filogic): Hiveton H5000M (Airpi H5000M)
  • mediatek (filogic): JioRouter AX6000 JIDU6J01 / JIDU6201
  • mediatek (filogic): Livinet Li320
  • mediatek (filogic): netis N6 V2
  • mediatek (filogic): Teralink TL3020 (256 MB)
  • mediatek (filogic): WAVLINK WL-WNT100X3 (stock layout and OpenWrt U-Boot layout)
  • qualcommax (ipq50xx): CMCC MR3000D-CI
  • ramips (mt7621): TP-Link ER605 v1 (TL-R605 v1)
  • ramips (mt76x8): Cudy LT500 Outdoor v1
  • rockchip: FriendlyARM NanoPi R2S Plus

New image variants for already supported devices:

  • mediatek (filogic): Cudy M3000 v1/v2 - add OpenWrt U-Boot layout (ubootmod) image, which uses the full NAND size
  • mediatek (filogic): Cudy M3000 v2 with Motorcomm YT8821 PHY - add OpenWrt U-Boot layout (ubootmod) image

Device fixes:

  • ath79: GL.iNet GL-E750 (Mudi) V2 - fix the 5 GHz WiFi radio, which did not come up because of missing calibration data
  • bcm53xx: fix sysupgrade losing the configuration on NAND devices (see "Upgrading" below)
  • bcm47xx, imx (Gateworks Ventana), layerscape (Traverse Ten64): fix Attended Sysupgrade (ASU) support
  • kernel: add support for FudanMicro FM25G01B/FM25G02B SPI-NAND (fixes a boot loop on new revisions of Keenetic KN-1812 / Netcraze NC-1812) and HeYangTek HYF1GQ4UDACAE SPI-NAND (found on some Keenetic KN-3411 units)
  • mediatek: MT7986 - correct the system timer rate, fixing clock drift (e.g. NTP running at the +500 ppm limit on the GL.iNet GL-MT6000)
  • mediatek (filogic): Cudy devices with DDR3 RAM - run the RAM at its rated speed of 1866 MT/s
  • mediatek (filogic): JioRouter AX6000 JIDU6101 - fix silently failing sysupgrade (SPI-NAND writes) and the U-Boot environment layout
  • mediatek (filogic): Keenetic / Netcraze devices - fix NMBM reserved block count, fixing boot on some units
  • mediatek (filogic): Comfast CF-WR632AX - fix NMBM configuration mismatch (#24546)
  • mediatek (filogic): Cudy WR3000S v1 - light up the Internet LED
  • mediatek: ipTIME AX3000SE - WLAN LED now shows activity of both radios
  • ramips: ipTIME A8004T - fix PCIe after a warm reboot
  • ramips: fix Ethernet interrupt handling with busy polling / interrupt deferral (#25742)
  • mpc85xx: Freescale P2020RDB - switch to DSA (see "Upgrading" below); TP-Link TL-WDR4900 v1 - the WiFi on/off switch now works; Enterasys WS-AP3715i - fix boot and allow access to the U-Boot environment
  • mvebu: Turris MOX - fix sysupgrade, squashfs boot and USB 2.0 device detection; WiFi (mwifiex SDIO) and Bluetooth drivers are now included in the image
  • qualcommax: ASUS RT-AX89X - use LAN1 instead of the SFP port in failsafe mode (#23633)
  • qualcommbe: ipq95xx - check the image metadata on sysupgrade
  • realtek: D-Link DGS-1210-28P/MP - fix fan control
  • rockchip: NanoPi R3S (1 GB) - fix the PCIe link to the RTL8111H Ethernet chip
  • sunxi: H5 boards (e.g. NanoPi NEO 2) - fix USB
  • airoha: new PCS implementation, Ethernet LRO and HW-GRO support, many Ethernet driver fixes, AN7583 USB/PCIe PHY support, updated pin controller driver and thermal settings

WiFi fixes and improvements

  • The WPA3 defaults were reworked to follow the WPA3 specification and deployment guide:
    • GCMP-256 and SAE-EXT-KEY are no longer offered by default in sae and sae-mixed mode (see "Important changes" above)
    • Beacon protection is now enabled by default on supported devices when management frame protection (PMF / 802.11w) is enabled
    • SAE now offers the groups 19, 20 and 21 by default
    • New WPA3-Personal Compatibility Mode (sae-compat): WPA2 clients see a normal WPA2 network, while clients that support RSN overriding use WPA3
    • New transition_disable option to tell clients to stop falling back to older security modes on a WPA3-only network
    • On 6 GHz, SAE uses H2E only, and WPA2-only configurations are automatically switched to WPA3 so the radio comes up
    • LuCI shows the new options in the wireless settings and hides encryption modes that are not allowed on 6 GHz
  • WiFi client (wpa_supplicant) with WPA-Enterprise: fix EAP inner methods such as EAP-MSCHAPV2 (#24086), fix server certificate checks (altsubject_match, domain_match, domain_suffix_match), and accept the old priv_key / priv_key_pwd option names again, so EAP-TLS client configurations from 24.10 work again (#22599)
  • hostapd: fix EAP-TLS client mode with Mbed TLS 3.6.3 and newer
  • wifi-scripts: restore 802.11ad (60 GHz) support
  • wifi-scripts: the multicast_to_unicast option works again
  • hostapd: restore Link Measurement Report handling; beacon reports via ubus support the reporting detail parameter and include the raw report data
  • mac80211: update to 6.18.55 with many upstream fixes for ath10k, ath11k, iwlwifi, rtw88 and other drivers
  • ath9k: reset the hardware on init again, fixing problems on some devices
  • rtw88 (USB/SDIO): use a longer TX report timeout, fixing repeated "failed to get tx report from firmware" warnings in access point mode
  • mt76: backport fixes from Linux 6.18.55
  • iwinfo: fix corrupt scan results when wpa_supplicant is running; add new device IDs
  • iw: show RSN Override elements in scan results

Network and service improvements

  • DHCP client: new per-interface option sendclientid to choose the DHCPv4/DHCPv6 client identifier (see "Important changes" above)
  • ppp: on-demand dialing (demand option) works again. It was broken since the update to ppp 2.5.0 (#24454).
  • uhttpd: stricter and more robust HTTP parsing, lower latency (TCP_NODELAY), can bind to addresses that are not yet configured, and supports SNI-based redirects
  • umdns: many robustness fixes
  • L2TP: fix heavy packet fragmentation, seen for example with batman-adv over an L2TP tunnel over IPv4
  • Mobile broadband: uqmi and umbim now report the DNS servers in ifstatus also with peerdns disabled; support for the Quectel EG120K-EA modem (qmi_wwan); NCM support for Fibocom FG621-EA modems (e.g. ASUS 4G-AX56, TP-Link TL-MR500 v1)
  • adb: fix RSA authentication with Mbed TLS

Other changes

  • LuCI: new optional theme luci-theme-footstrap; the optional luci-mod-dashboard got live charts and a configurable layout; new apps luci-app-librespeed and luci-app-weechat

Core component updates

  • Linux kernel: update from 6.12.94 to 6.12.112
  • OpenSSL: update from 3.5.7 to 3.5.9 (multiple security fixes, see above)
  • Mbed TLS: update from 3.6.6 to 3.6.7 (multiple security fixes, see above)
  • wolfSSL: update from 5.9.1 to 5.9.4 (multiple security fixes, see above)
  • mac80211: update from 6.18.26 to 6.18.55
  • wireless-regdb: update from 2026.05.30 to 2026.09.03
  • nilfs-utils: update from 2.2.12 to 2.2.17
  • ca-certificates: update from 20260601 to 20260816 (refreshed root CA bundle)
  • wireguard-tools: update from 1.0.20250521 to 1.0.20260223
  • uhttpd, rpcd, umdns, odhcp6c and iwinfo: updated to newer upstream versions

Upgrading to 25.12.6

Upgrading from 24.10 to 25.12 should be transparent on most devices, as most configuration data has either remained the same or will be translated correctly on first boot by the package init scripts.
For upgrades within the OpenWrt 25.12 stable series, Attended Sysupgrade is also supported, which allows preserving the installed packages.

  • Sysupgrade from 23.05 or earlier to 25.12 is not officially supported.

  • Cron log level was fixed in busybox. system.@system[0].cronloglevel should be set to 7 for normal logging. 7 is the default now. If this option is not set, the default is used and no manual action is needed. fc0c518

  • Bananapi BPI-R4: Interface eth1 was renamed to sfp-lan or lan4, and interface eth2 was renamed to sfp-wan to match the labels. You have to upgrade without saving the configuration. cd8dcfe

  • DHCP client identifier: Since 25.12.0, the DHCP clients identify the device with a UUID-based DUID instead of the MAC address. If your ISP's DHCP server has problems with this, set the new sendclientid option to get the behavior of OpenWrt 24.10 back, see "Important changes" above.

  • bcm53xx devices with NAND flash: Since 24.10, sysupgrade lost the configuration on these devices. This is fixed in 25.12.6, but because the fix is in the firmware that does the flashing, the upgrade to 25.12.6 loses the configuration one last time. Back up your configuration before upgrading and restore it afterwards. 67b18c1

  • Freescale P2020RDB: The switch was converted from swconfig to DSA. The configuration cannot be migrated, so upgrade without keeping the settings (sysupgrade -n).

  • TP-Link RE355 v1, RE450 v1 and RE450 v2: The partition layout and block size changed in OpenWrt 25.12.1 to fix configuration loss on sysupgrade. Users upgrading from OpenWrt 25.12.0 or earlier must use sysupgrade -F to force the upgrade. The image must not exceed 5.875 MB (6016 KiB).

  • Meraki MX60: Direct sysupgrade to 25.12.6 is not possible without manual preparation β€” meraki_loadaddr must be changed before upgrading, as the default value is insufficient to boot OpenWrt 25.12+. See the device wiki page for instructions.

  • Sitecom WLR-7100 (X7 AC1200): This device was moved from the ath79/generic target to the ath79/tiny target in OpenWrt 25.12.4. Users upgrading from 25.12.3 or earlier need to flash the new image from the ath79/tiny target (use sysupgrade -F).

Known issues

  • Zyxel EX5601-T0: the WAN interface was renamed from eth1 to wan β€” check and update your network configuration after upgrading.
  • SQM CAKE MQ (cake_mq): throughput may be unexpectedly low on some configurations. #22344
  • qualcommax/ipq50xx: Ethernet ports do not work. #25975

Full release notes and upgrade instructions are available at
https://openwrt.org/releases/25.12/notes-25.12.6

In particular, make sure to read the known issues before upgrading:
https://openwrt.org/releases/25.12/notes-25.12.6#known_issues

For a detailed list of all changes, refer to
https://openwrt.org/releases/25.12/changelog-25.12.6

To download the 25.12.6 images, navigate to:
https://downloads.openwrt.org/releases/25.12.6/targets/
Use OpenWrt Firmware Selector to download:
https://firmware-selector.openwrt.org?version=25.12.6

As always, a big thank you goes to all our active package maintainers, testers, documenters and supporters.

Have fun!

The OpenWrt Community


To stay informed of new OpenWrt releases and security advisories, there
are new channels available:

  •  

v0.8.14

What's Changed

  • fix(gui): prefer the Buttons panel over Keys when kind resolution is wrong by @4ni1ak in #1702
  • docs(readme): add Spanish translation by @eibidia in #1314
  • fix(gui): let the theme card name shrink so the badge fits by @4ni1ak in #1435
  • fix(hook): carry the mouse's vendor/product ID onto its uinput mirror by @4ni1ak in #1453
  • fix(cli): let macOS prompt for Input Monitoring before diag opens a device by @4ni1ak in #1256
  • fix(gui): draw the client-side titlebar only where the compositor declines one by @4ni1ak in #945
  • fix(inject): distinguish Linux Capture Region from Screenshot by @4ni1ak in #1433
  • fix(hook): preserve low-res wheel events during Linux pass-through by @nathan-fontenele in #1693
  • fix(i18n): use Spain's Spanish terms in the es catalog by @eibidia in #1326
  • docs(i18n): add Portuguese README translation by @obrenoalvim in #1371
  • fix(windows): enable HID++ side-button gestures by @c1m-Chenym in #1635
  • fix(agent): emit scroll input queued across a smoothing toggle instead of dropping it by @isleofgreg in #1721
  • fix(agent): honor an overflow cancel from a generation the scroll worker has not seen by @isleofgreg in #1720
  • feat(device): Detect Logitech G735 headset dongle by @xvilo in #1040
  • fix(i18n): translate the custom-action input error in Czech by @Imbecile6197 in #1728
  • fix(overlay): set the macOS activation policy before gpui_platform starts by @4ni1ak in #1692
  • fix(hid): capture alternate gesture controls by @4dux in #1561
  • feat(camera): expose pan, tilt, gain and backlight compensation by @yuzi-co in #1020
  • feat(gui): add precise camera control entry by @vinayaksodar in #1047
  • fix(device): omit raw-xy flags when diverting or restoring keyboard controls by @henius98 in #1726
  • fix(inject): send hi-res wheel events for Linux scroll actions (by @RisenID) by @Fede2782 in #1719
  • fix(assets): resolve variants for depots whose manifests key on depot name or stem by @felipecadal in #1295
  • fix(gui): render camera depots that ship no hotspot metadata by @MattijsE in #1265
  • fix(inject): give App Expose/Mission Control/Show Desktop/Launchpad a GNOME implementation by @4ni1ak in #1446
  • fix(gui): open the config folder from the fail-closed config screen by @yuzi-co in #942
  • fix(gui): give MenuRow-based list rows an accessible name by @4ni1ak in #1448
  • fix(camera): collapse a Brio's IR node into one Linux camera entry by @4ni1ak in #1234
  • docs: add Turkish README translation by @4ni1ak in #1734
  • feat(hook): reverse the wheel in software for devices without 0x2121 by @4ni1ak in #847
  • feat(gui): add custom-shortcut Tap/Hold recorder to the button picker by @fahadjibransheikh in #1396
  • fix(agent): reapply volatile settings on device reconnection and retry disagreeing DPI writes by @isleofgreg in #1270
  • fix(overlay): properly position and scale Actions Ring on Windows mixed-DPI displays by @c1m-Chenym in #1745
  • fix(camera): pass the pan/tilt payload by value by @SMRehan in #1740
  • feat(core): add an action that holds modifiers and taps the key once by @Rick0525 in #1161
  • feat(gui): update macOS through Sparkle by @AprilNEA in #1744
  • docs(ipc): move PROTOCOL_VERSION once per release by @AprilNEA in #1760
  • fix(hidpp): write 0x1990 non-linear level tables whole by @AprilNEA in #1765
  • fix(hidpp): read the 0x4530 platform with function 0 by @AprilNEA in #1766
  • fix(hidpp): write each 0x0007 name chunk at its own offset by @AprilNEA in #1767
  • fix(hidpp): preserve device state OpenLogi does not own on writes by @AprilNEA in #1753
  • fix(device): encode 0x8080 tail frames and 0x8070 fixed colour per device by @AprilNEA in #1758
  • fix(device): write SmartShift torque and DPI only as the device advertises by @AprilNEA in #1759
  • fix(device): give the Litra Beam its own brightness range by @AprilNEA in #1763
  • fix(device): stop misreading 0x1000 and 0x1001 battery states by @AprilNEA in #1768
  • fix(device): stop committing 0x8080 frames the keyboard rejected by @AprilNEA in #1764
  • fix(device): own RGB software control for the agent session by @AprilNEA in #1769
  • fix(hidpp): require the 0x8081 zone echo before reporting a write by @AprilNEA in #1771
  • fix(hidpp): refuse short 0x1990 info and level replies by @AprilNEA in #1772
  • fix(device): confirm the haptic repair from the device's reply by @AprilNEA in #1773
  • fix(device): confirm SmartShift writes from the device's reply by @AprilNEA in #1775
  • fix(agent-core): close the RGB release races left by #1769 by @AprilNEA in #1770
  • fix(hidpp): require the sensor echo in DPI replies by @AprilNEA in #1776
  • fix(device): end a thumb-wheel roll whose Stop never arrives by @AprilNEA in #1777
  • docs(hidpp): say that a None remap keeps the current mapping by @AprilNEA in #1778
  • fix(hidpp): hold 0x8060 and 0x8061 rates to what the features define by @AprilNEA in #1779
  • fix(hidpp): decode every 0x2121 capability flag and the horizontal delta by @AprilNEA in #1780
  • fix(hidpp): decode 0x1c00 empty actions and status, and 0x4531 OS bits by @AprilNEA in #1781
  • fix(hidpp): keep 0x0003 firmware entity types without a name by @AprilNEA in #1783
  • fix(hidpp): refuse a short 0x40A3 reply instead of zero-filling it by @AprilNEA in #1782
  • fix(hidpp): treat a Bolt protocol byte in 0x41 as an encrypted link by @AprilNEA in #1784
  • fix(device): reconcile inventory on 0x1000/0x1001 battery broadcasts by @AprilNEA in #1787
  • fix(device): wait for the Unifying lock to open before searching by @AprilNEA in #1785
  • fix(device): report no percentage for a 0x1004 battery without a gauge by @AprilNEA in #1788
  • fix(hidpp): check the echoed index in 0x8070/0x8071 info and 0x0007 name reads by @AprilNEA in #1789
  • fix(hidpp): read a non-BCD 0x0003 firmware version as binary by @AprilNEA in #1790
  • fix(device): re-read settings the device changes itself by @AprilNEA in #1791
  • fix(device): drive Fn-lock on keyboards that only have 0x40a0 by @AprilNEA in #1792
  • fix(device): play only the haptic waveforms the device advertises by @AprilNEA in #1796
  • feat(camera): name webcams that report no USB product string by @DonovanMontoya in #1793
  • chore(deps): bump rustls to 0.23.46 by @AprilNEA in #1805
  • feat(device): keep multi-platform keyboards on the host OS layout by @AprilNEA in #1806
  • feat(device): adjust the report rate of mice with 0x8060 or 0x8061 by @AprilNEA in #1808
  • feat(device): set keyboard backlight automatic brightness, level and battery saving by @AprilNEA in #1811
  • feat(desktop): control the keyboard backlight from the Device tab by @AprilNEA in #1812
  • fix(device): refuse haptic plays while 0x19b0 reports a non-zero status by @AprilNEA in #1817
  • fix(linux): settle the uinput action device before its first emit by @4ni1ak in #1810
  • fix(device): don't let a stuck Empty host-slot status refuse a real pairing by @4ni1ak in #1813
  • fix(agent): divert a keyboard key explicitly bound to Action::None by @4ni1ak in #1819
  • fix(device): discard the stale first raw-XY report of every gesture hold by @DonovanMontoya in #1786
  • fix(scroll): post phaseless continuous scroll events on macOS by @isleofgreg in #1157
  • fix(gui): gate debug diagnostics imports in release builds by @gitsacha in #1815
  • fix(agent): anchor the recovery-scan timer to scan start, not scan end by @4ni1ak in #1809
  • fix(agent): queue HID requests before response timeout by @sh3ll3x3c in #936
  • fix(linux): open the Actions Ring at the cursor on Wayland by @AalmanSadath in #1004
  • fix(agent): hand off capture across receiver routes by @justinechang39 in #1198
  • Horizontal Scroll Reversed #1120 by @romanr in #1140
  • feat(device): read Easy-Switch host names and OS, and rename hosts (0x1815) by @AprilNEA in #1824
  • fix(overlay): configure accessory policy after GPUI initialization by @gitsacha in #1814
  • fix(hook): keep software scroll inversion applied when the agent intercepts the wheel by @4ni1ak in #1749
  • feat(desktop): show Easy-Switch hosts on the Device tab and rename them by @AprilNEA in #1825
  • fix(hook): keep the pixel delta when inverting a macOS wheel event by @AprilNEA in #1827
  • chore: release v0.8.14 by @AprilNEA[bot] in #1718

New Contributors

Full Changelog: v0.8.13...v0.8.14

  •  

v0.8.13

What's Changed

  • fix(linux): add a Spanish comment to the desktop entry by @eibidia in #1468
  • fix(agent): let a thumb-wheel swipe fire Volume Up/Down more than once by @4ni1ak in #1455
  • feat(hid): recognise Powerplay receiver 046d:c53a by @FelipeIzui in #1267
  • feat(hid): add G733 battery and power-state support by @d-tatianin in #1601
  • fix(i18n): improve Turkish catalog wording by @volkanncicek in #1415
  • docs(core): clarify persisted device identifier scope by @yuzi-co in #670
  • fix(macos): respect the selected Apple developer directory by @4ni1ak in #1457
  • fix(gui): restore the config-error folder action by @4ni1ak in #1458
  • fix(core): resolve connection transport from live routes by @4ni1ak in #1367
  • feat(gui): add custom actions to the mouse picker by @4ni1ak in #1452
  • fix(gui): show friendly names for Windows app profiles by @4ni1ak in #1463
  • feat(hidpp): implement pointer motion scaling by @Chernicharo in #1347
  • fix(inject): restore macos 27 space swipes by @4ni1ak in #1703
  • fix(hook): identify unbundled macos applications by @4ni1ak in #1469
  • chore: release v0.8.13 by @AprilNEA[bot] in #1716

New Contributors

Full Changelog: v0.8.12...v0.8.13

  •  

v0.8.12

What's Changed

  • test(agent): cover a BLE mouse that wakes as a new node by @kohjunhao in #1649
  • fix(gui): seed the DPI editor from config while the live read is pending by @4ni1ak in #1628
  • fix(hid): recognize Lightspeed receiver 046d:c541 by @hamfield-eu in #1679
  • fix(gui): truncate the function-row key callout's name instead of overflowing by @4ni1ak in #1691
  • fix(gui): wrap the device-enabled caption so the switch stays in the card by @Imbecile6197 in #1670
  • feat(fixture): add an MX Ergo Unifying fixture by @Chernicharo in #1374
  • fix(gui): set text color on mouse pairing passkey click icons by @ZOZiBoi in #1640
  • fix(hidpp): tell another protocol's reports apart from malformed HID++ by @Chernicharo in #1373
  • fix(macos): log the candidate displays when Space state has no match by @4ni1ak in #1694
  • fix(agent): phase horizontal thumb-wheel scroll when smoothing is off by @nredd in #1689
  • feat(i18n): add Czech locale by @Imbecile6197 in #1669
  • fix(core): write config through symlinks instead of replacing them by @FunJim in #1642
  • fix(hook): keep the short budget for tap teardown after a probe break by @TheMedpreneur in #1600
  • fix(i18n): name the real update-check host in the consent dialog by @4ni1ak in #1629
  • fix(agent): restore ring toggle and publish expired sessions by @isleofgreg in #1665
  • fix(gui): scale configuration labels with interface text by @4ni1ak in #1627
  • fix(agent): fall back to focus when the pointer target is unidentified by @kohjunhao in #1648
  • fix(gui): anchor scrollbar overlays in action ring editor and app picker by @lynicis in #1360
  • fix(i18n): track the locale catalogs as build inputs by @zmingxie in #1327
  • fix(gui): wrap the About page's link row instead of clipping it by @crnst8 in #885
  • fix(cli): replace the stale receiver note with a Linux udev hint by @Chernicharo in #1348
  • fix(gui): show wheel controls without adjustable dpi by @minatoaquaMK2 in #1369
  • fix(gui): recognize MX Ergo's DPI slot name for the mouse diagram by @armandodollia in #1391
  • fix(macos): write the scroll point delta last so pixel precision survives by @isleofgreg in #1156
  • chore: release v0.8.12 by @AprilNEA[bot] in #1646

New Contributors

Full Changelog: v0.8.11...v0.8.12

  •  

v0.8.11

What's Changed

  • fix(macos): press Back and Forward as the frontmost app's menu item by @AprilNEA in #1622
  • chore(nix): update flake.lock by @AprilNEA[bot] in #1217
  • fix(agent): recognize an overlay tenant by any image we ever shipped by @AprilNEA in #871
  • feat(linux): add verified release installer by @AprilNEA in #1109
  • ci(nix): only run Nix CI on flake and packaging changes by @davidbudnick in #1250
  • fix(macos): confirm desktop switches with private space APIs by @AprilNEA in #1586
  • fix(macos): drive the device-I/O gate from powerd instead of workspace notifications by @AprilNEA in #1323
  • fix(core): match Actions Ring layouts with the per-app selector by @AprilNEA in #643
  • chore: release v0.8.11 by @AprilNEA[bot] in #1637
  • fix: clear the lints rustc 1.99 raises on untouched code by @AprilNEA in #1638
  • chore: release v0.8.11 by @AprilNEA in #1643
  • chore: release v0.8.11 by @AprilNEA in #1644

Full Changelog: v0.8.10...v0.8.11

  •  

v0.8.10

What's Changed

  • feat(keyboard): key controls by HID++ control ID, fix Keys tab and Fn-lock by @AprilNEA in #1604
  • fix(macos): keep the hook from hearing the keys OpenLogi posts by @AprilNEA in #1618
  • fix(gui): unpair a forgotten receiver device so it stays deleted by @AprilNEA in #1617
  • fix(macos): press shortcut keys where the active layout types them by @guslipkin in #948
  • feat(core): add a Super modifier and make Win/Meta name it by @sungyongcho in #1387
  • fix(agent): re-arm a crash respawn instead of going dormant by @AprilNEA in #1619
  • fix(hook): give the macOS tap's capability probes their own watchdog budget by @hyspacex in #1282
  • fix(hook): give the callback watchdog the same watched-time rule by @AprilNEA in #1624
  • chore: release v0.8.10 by @AprilNEA[bot] in #1616

New Contributors

Full Changelog: v0.8.9...v0.8.10

  •  

v0.8.9

What's Changed

  • fix(gui): swap the thumb-wheel volume preset labels onto the pairing they describe by @4ni1ak in #1436
  • fix(hook): stop the GNOME frontmost observer leaking a socket per renewal by @sungyongcho in #1418
  • fix(gui): rebuild the agent's launchd registration when its job is gone by @raphaeljostan in #1303
  • fix(hook): hit-test the window under the pointer through AppKit by @pseudoseed in #1568
  • chore: release v0.8.9 by @AprilNEA[bot] in #1599

New Contributors

Full Changelog: v0.8.8...v0.8.9

  •  

v0.8.8

What's Changed

  • feat(hid): recognise Nano receiver 046d:c534 (MK270, MK295) by @4ni1ak in #1456
  • fix(agent): divert a single-bound gesture button by @pseudoseed in #1569
  • fix(gui): restore per-app profile removal and add reset controls by @AprilNEA in #1580
  • fix(gui): prefer firmware codename over catalog name for M650 variants by @4ni1ak in #1366
  • refactor(gui): simplify variant name correction ownership by @AprilNEA in #1585
  • chore: release v0.8.8 by @AprilNEA[bot] in #1573

New Contributors

Full Changelog: v0.8.7...v0.8.8

  •  

v0.8.6

What's Changed

  • refactor(gui): split app_icon around an AppIconExt trait by @AprilNEA in #1422
  • fix(gui): hold a config reload until the agent connects by @AprilNEA in #1416
  • refactor(ipc): own the client handshake once and guard it with ast-grep by @AprilNEA in #1424
  • refactor(core): name the process roles, host profiles, and environment knobs once by @AprilNEA in #1426
  • refactor(ipc,cli): bound the handshake once and give the CLI one agent door by @AprilNEA in #1427
  • refactor(core): build every worker runtime in one place by @AprilNEA in #1428
  • refactor(core): spell the app bundle's layout once by @AprilNEA in #1429
  • docs(infra): add openlogi workflow skills by @AprilNEA in #1409
  • docs(infra): refine agent guidance and diagnostic workflows by @AprilNEA in #1485
  • refactor(cli): give the command modules that carry code a file of their own by @AprilNEA in #1494
  • refactor(hidpp): split the pending-request queue and the mock channel out of channel.rs by @AprilNEA in #1495
  • refactor(hook): split the macOS backend by responsibility by @AprilNEA in #1496
  • refactor(hook): split the Linux backend into the evdev hook and the foreground watcher by @AprilNEA in #1497
  • chore: drop an unused dependency, a dead parameter, and stale docs by @AprilNEA in #1487
  • refactor(gui): let state mutators own their events and views share one relevance filter by @AprilNEA in #1505
  • refactor(gui): give write-on-release sliders one component by @AprilNEA in #1506
  • refactor(ipc): own the observe loop's connection state in one Observer by @AprilNEA in #1507
  • perf(gui): resolve each device's assets once per asset generation by @AprilNEA in #1508
  • refactor(gui): say what the state types are by @AprilNEA in #1509
  • refactor(core): give the key vocabulary one owner by @AprilNEA in #1488
  • refactor(core): give seven copied decisions one owner each by @AprilNEA in #1489
  • refactor(xtask): spell xtask's waits and its bundle builder in the workspace's vocabulary by @AprilNEA in #1490
  • ci(windows): run the tests on Windows by @AprilNEA in #1491
  • refactor(device): drop the capture paths nothing calls and type the session errors by @AprilNEA in #1500
  • refactor(core): split the config module by concern by @AprilNEA in #1511
  • refactor(device): split the inventory and probe modules by responsibility by @AprilNEA in #1512
  • refactor(device): call durations that bound a wait timeouts by @AprilNEA in #1513
  • refactor(device): run gesture and keyboard capture through one session skeleton by @AprilNEA in #1501
  • refactor(device): share one pending-restore token between capture and host switch by @AprilNEA in #1502
  • refactor(agent): run the capture watchers on one harness and name the device-access handles by @AprilNEA in #1503
  • refactor: say what eight identifiers are by @AprilNEA in #1517
  • refactor(camera): suffix the macOS backends like the other platforms' by @AprilNEA in #1518
  • refactor(gui): move the F-key geometry into function_row/key_points.rs by @AprilNEA in #1525
  • refactor(agent): move the device list and re-apply plan into orchestrator/devices.rs by @AprilNEA in #1526
  • refactor(gui): split the AppState tests by what they exercise by @AprilNEA in #1527
  • refactor(inject): run scripts and workflows once, over four platform hooks by @AprilNEA in #1529
  • refactor(core): split the config tests by what they exercise by @AprilNEA in #1530
  • refactor(device): split the inventory and gesture capture tests by what they exercise by @AprilNEA in #1531
  • refactor(agent): split the orchestrator tests by what they exercise by @AprilNEA in #1532
  • refactor(hidpp): split the channel tests by what they exercise by @AprilNEA in #1533
  • refactor(device): move the host-switch session's tests to host_switch/tests.rs by @AprilNEA in #1535
  • refactor(agent): move the button runtime's worker loop into button/worker.rs by @AprilNEA in #1536
  • refactor(inject): break the macOS injector into scroll, browser and SPI modules by @AprilNEA in #1537
  • refactor(gui): move the mouse view's binding labels and tests out of view.rs by @AprilNEA in #1538
  • refactor(gui): move the camera panel's row builders into controls/rows.rs by @AprilNEA in #1539
  • feat(gui): detect and display installation sources by @AprilNEA in #1515
  • docs(gui): mend the desktop crate's intra-doc links by @AprilNEA in #1541
  • chore: release v0.8.6 by @AprilNEA[bot] in #1481

Full Changelog: v0.8.5...v0.8.6

  •  

v0.8.5

What's Changed

  • fix(gui): resolve depot metadata named only by the manifest by @4ni1ak in #836
  • docs(gui): adopt upstream gpui kit skills by @AprilNEA in #1400
  • fix(linux): keep the generated systemd unit out of the user's tier by @AalmanSadath in #796
  • fix(hidpp): stop HID++ replies landing on the wrong request by @isleofgreg in #1286
  • feat(gui): enable supported button gestures by @juan-apa in #1167
  • fix(gui): restore stacked card layout under gpui-kit 0.6 by @AprilNEA in #1408
  • chore: release v0.8.5 by @AprilNEA[bot] in #1399

Full Changelog: v0.8.4...v0.8.5

  •  

v0.8.4

What's Changed

  • feat(i18n): migrate catalogs to semantic TOML keys by @AprilNEA in #1169
  • perf(i18n): avoid copying borrowed translations by @AprilNEA in #1184
  • fix(i18n): polish supported locale copy by @AprilNEA in #1180
  • fix(i18n): localize DPI steps and correct count labels by @AprilNEA in #1292
  • fix(i18n): polish Brazilian Portuguese profile and settings copy by @uricholiveira in #1276
  • fix(i18n): refine French asset and control descriptions by @didlawowo in #1278
  • fix(hid): keep pairing phase after device selection by @AprilNEA in #1181
  • refactor(gui): model camera preview lifecycle states by @AprilNEA in #1182
  • refactor(agent): consolidate capture manager slots by @AprilNEA in #1183
  • docs(linux): fix the Debian install command and the bug form's platform note by @AalmanSadath in #791
  • docs: add Russian README translation by @MonteNegroX in #1039
  • Fix typo in installation guide by @mikevankuik in #1189
  • fix(i18n): correct mistranslations in the Spanish catalog by @eibidia in #1315
  • feat(i18n): Updated French README.md file by @DimitriDR in #1271
  • fix: add Debian runtime dependencies by @MauricioSilv in #1249
  • fix(hook): normalize Windows cursor position to DIP scale by @fly530 in #1246
  • fix(agent): restore diverted HID++ controls on a clean shutdown by @4ni1ak in #1106
  • refactor(hook): type windows cursor dpi normalization by @AprilNEA in #1318
  • fix(linux): declare F13-F20 in uinput key capabilities by @costantinoai in #1224
  • fix(core): stop seeding Back/Forward with a divertable default by @litityum in #1225
  • fix(agent): fence queued pairing discovery after selection by @AprilNEA in #1320
  • fix(agent): avoid capture recovery deadline busy loops by @AprilNEA in #1321
  • test(gui): cover camera preview lifecycle by @AprilNEA in #1322
  • fix(gui): place Windows actions ring correctly across mixed-DPI monitors by @AprilNEA in #1319
  • fix(gui): stop linking SMAppServiceErrorDomain so macOS 13 and 14 can launch by @AprilNEA in #1324
  • feat(hid): add hardware-aware mock device record and replay by @AprilNEA in #1165
  • test(agent): cover native and browser side-button profiles by @AprilNEA in #1325
  • fix(macos): bind Safari navigation to press-time process by @foleykyle01 in #1082
  • fix(camera): surface startup failures and retry preview by @yuzi-co in #1069
  • chore(gui): upgrade to gpui kit 0.6.1 and published pre adapters by @AprilNEA in #1338
  • feat(hid): add rgb-effects lighting and receiver routing by @LuisUrrutia in #351
  • fix(gui): keep update consent buttons visible by @AprilNEA in #1398
  • fix(linux): preserve gesture capture across receiver probes by @yvvlee in #1043
  • chore: release v0.8.4 by @AprilNEA[bot] in #1179

New Contributors

Full Changelog: v0.8.3...v0.8.4

  •  

v0.8.2

What's Changed

  • fix(camera): read WhiteBalance, not ColorEnable, on Windows by @yuzi-co in #662
  • refactor(hid): name the divert intents instead of passing flag bools by @AprilNEA in #1071
  • refactor(linux): make the hidraw probe outcome an explicit enum by @AprilNEA in #1073
  • feat(macos): let launchd own the agent lifecycle via SMAppService by @AprilNEA in #1031
  • docs: character stand-in icon rule + crate-homed agent guides by @AprilNEA in #1026
  • Map SLOT_NAME_DPI_BUTTON to DpiToggle and add verification tests by @ediaz2 in #703
  • fix(agent): harden capture sessions, arming, and observe staleness by @AprilNEA in #1077
  • refactor(hid): fold the one-shot retry state into a OneShotScan type by @AprilNEA in #1070
  • refactor(gui): name the scrolling card's facts instead of a five-tuple by @AprilNEA in #1072
  • feat(agent): localize the menu-bar tray by @AprilNEA in #1038
  • refactor: make the audited implicit state machines typed by @AprilNEA in #1080
  • fix: resolve remaining state-machine audit findings by @AprilNEA in #1083
  • feat(gui): add per-app Actions Ring editor by @AprilNEA in #1085
  • feat(i18n): add Belarusian (be) locale by @aliaksandr-trush in #912
  • fix(macos): capture side-button gestures over HID++ by @juan-apa in #722
  • perf(agent): replace capture polling with events by @AprilNEA in #1136
  • perf(agent): replace lifecycle polling with native events by @AprilNEA in #1137
  • fix(macos): prevent HID activity from promoting DarkWake by @AprilNEA in #1142
  • fix(hid): normalize thumbwheel direction per device by @AprilNEA in #1158
  • chore: release v0.8.2 by @AprilNEA[bot] in #1056

New Contributors

Full Changelog: v0.8.1...v0.8.2

  •  

v0.8.1

What's Changed

Full Changelog: v0.8.0...v0.8.1

  •  

v0.8.0

Highlights

  • One device, however you connect it. The same mouse now keeps one device card and one set of settings across receiver and USB connections. Existing configurations migrate automatically and are backed up before the first save. (#876)
  • A redesigned device workspace makes larger setups easier to manage. A responsive grid, compact cards, clearer battery status, custom device names, scalable interface presets, and a dedicated action menu make devices faster to scan and configure.
  • Per-app profiles are now editable in the GUI. Pick an installed application from the new catalog, see which profile is active, and customize its button bindings without editing TOML. (#976)
  • Scrolling is smoother and more configurable. Built-in smooth scrolling, vertical sensitivity controls, preserved fractional motion, rebindable wheel tilt, and fixes for diverted high-resolution wheels deliver more consistent scrolling across main and thumb wheels. (#902, #925, #992)
  • Buttons can now distinguish a tap from a hold. TOML bindings can assign independent short- and long-press actions with a 500 ms threshold, while held shortcuts remain active until the button is released. (#961)

What's Changed

  • chore(gui): bump gpui-component to da4f9369 by @AprilNEA in #655
  • refactor(hid): centralize device identities by @AprilNEA in #831
  • docs(agents): scale local gate to affected packages by @AprilNEA in #696
  • feat(core,gui): make the main wheel's tilt rebindable (MX anywhere 2s,...) by @6lv1-blr in #902
  • fix(linux): install the app icon at every indexed hicolor size by @4ni1ak in #837
  • fix(gui): recognize mx ergo wheel tilt metadata by @AprilNEA in #905
  • ci: automate typo checks and consolidate configs by @AprilNEA in #906
  • refactor(gui): convert app state to entity events by @AprilNEA in #904
  • fix(mouse): compose thumb-wheel preset labels from translated action names by @NatsUIJM in #910
  • fix(linux): restore glibc 2.35 package baseline by @AprilNEA in #911
  • fix(gui): restore full-phrase thumb-wheel preset labels by @AprilNEA in #913
  • refactor(gui): componentize free-function builders by @AprilNEA in #914
  • fix(macos): honor XDG state dir in permission diagnostics by @AprilNEA in #915
  • fix(hid): improve Unifying receiver discovery reliability by @v14 in #853
  • feat(gui): add per-app profiles and redesign device workspace by @AprilNEA in #907
  • fix(macos): use reliable async-hid report writes by @sh3ll3x3c in #889
  • fix(hid): preserve usage pairs in native handle cache by @sh3ll3x3c in #882
  • fix: show Windows MSI completion and failure state by @mvanhorn in #819
  • feat(gui): make custom controls keyboard-operable by @AprilNEA in #916
  • style(gui): refine profile toolbar layout by @AprilNEA in #921
  • refactor(gui): clean up render paths and element ids by @AprilNEA in #926
  • fix(hidpp): read Unifying link encryption from bit 5, not the software-present bit by @AprilNEA in #924
  • refactor(gui): tighten typed rendering and async ownership by @AprilNEA in #931
  • refactor(gui): move device reads onto swr by @AprilNEA in #929
  • feat(gui): add scalable interface presets by @AprilNEA in #934
  • feat(agent): unify button Down/Up/Cancel lifecycle by @AprilNEA in #933
  • feat(i18n): add Turkish (tr) interface locale by @4ni1ak in #835
  • feat(gui): add switchable device gallery views by @AprilNEA in #927
  • refactor(gui): improve shared component quality by @AprilNEA in #966
  • feat(agent): hold shortcut output until button release by @AprilNEA in #960
  • fix(thumbwheel): scale remapped vertical scrolling by @hsearcy in #925
  • refactor(gui): structure app state by domain by @AprilNEA in #974
  • feat(gui): add installed application catalog picker by @AprilNEA in #976
  • feat(gui): add polished battery indicator by @AprilNEA in #983
  • feat(scroll): preserve precise scroll distances by @AprilNEA in #973
  • ci: replace target caches with sccache by @AprilNEA in #984
  • feat(scroll): add finite smooth scroll runtime by @AprilNEA in #975
  • feat(scroll): smooth diverted thumbwheel input by @AprilNEA in #977
  • feat(gui): polish the app catalog picker and device cards by @AprilNEA in #986
  • feat(scroll): add vertical scroll sensitivity by @AprilNEA in #978
  • feat(scroll): expose smooth scrolling setting by @AprilNEA in #979
  • refactor(gui): strengthen typed render boundaries by @AprilNEA in #981
  • fix(core,gui,agent): key device settings by identity, not by transport by @yuzi-co in #876
  • feat(agent): dispatch independent long-press actions by @AprilNEA in #961
  • refactor(agent): complete thumbwheel state machine by @AprilNEA in #968
  • fix(hid): preserve diverted wheel reporting by @AprilNEA in #992
  • chore: release v0.8.0 by @AprilNEA[bot] in #991

New Contributors

Full Changelog: v0.7.10...v0.8.0

  •  

v0.7.10

What's Changed

  • fix(gui): check the open helper's exit status when launching the agent by @AprilNEA in #820
  • fix(nix): provide git to the sandboxed test phase by @AprilNEA in #833
  • feat(ipc): surface HID open failures in agent status by @AprilNEA in #822
  • fix(agent): follow the picked app icon in the menu bar by @AprilNEA in #846
  • feat(cli): read the running agent's inventory in openlogi list by @AprilNEA in #823
  • fix(thumbwheel): stop the tap firing App ExposΓ©, and scroll by the wheel's native amount by @AprilNEA in #857
  • chore: release v0.7.8 by @AprilNEA[bot] in #834
  • fix(gui): stop discarding correctly rebuilt device records by @AprilNEA in #868
  • fix(overlay,agent): stop the anonymous overlay tenant from wedging the Actions Ring by @AprilNEA in #848
  • refactor(gui): put the asset tier on an swr cache by @AprilNEA in #869
  • chore: release v0.7.9 by @AprilNEA[bot] in #870
  • chore: release v0.7.10 by @AprilNEA in #874

Full Changelog: v0.7.7...v0.7.10

  •  

v0.7.7

v0.7.5 and v0.7.6 were tagged but never published β€” their macOS packaging failed before a single artifact was uploaded, so no release exists for either. Everything both of them contained ships here, and the changes below cover everything since v0.7.4.

What's Changed

  • docs(ci): map every CI job to a local command by @davidbudnick in #732
  • feat(i18n): add Ukrainian (uk) locale by @dima-karpenko in #715
  • ci(shell): gate every shell script with shellcheck and shfmt by @AprilNEA in #745
  • docs(core): correct the model_ids transport ordering, and fix the MX Keys mock by @yuzi-co in #668
  • refactor(xtask): move ci-local.sh and write-changelog.sh into xtask by @AprilNEA in #746
  • refactor(xtask): split bundle.rs along what it actually does by @AprilNEA in #753
  • feat(cli): report feature flags and firmware entities in diag features by @yuzi-co in #690
  • refactor(cli): render diagnostics with display adapters by @AprilNEA in #758
  • refactor: stream display-only formatting by @AprilNEA in #768
  • feat(camera): add anti-flicker and low-light controls by @awesamarth in #793
  • refactor(hid): split the HID++ device layer from the host backend by @AprilNEA in #772
  • chore: cut manifest comments that describe instead of constrain by @AprilNEA in #809
  • fix(hook): stop trusting AXIsProcessTrusted as a revocation signal by @AprilNEA in #801
  • fix(hook): keep macOS tap lifecycle instance-owned by @AprilNEA in #808
  • feat(gui): pick the app icon in Settings by @AprilNEA in #812
  • build(macos): name the helper bundles after their display names by @AprilNEA in #814
  • docs(agents): add a macOS permissions task skill by @AprilNEA in #813
  • fix(agent): shut down when the app is uninstalled by @AprilNEA in #810
  • fix(ipc,agent,desktop): surface Input Monitoring via agent status and fix registry bincode by @rekcilyssup in #760
  • fix(hid): take async-hid 0.5.3 so a denied HID open stops leaking by @AprilNEA in #804
  • fix(hid): park the Windows HID read on a permanently dead handle by @yuzi-co in #779
  • chore: release v0.7.5 by @AprilNEA[bot] in #750
  • fix(release): use changelog as release PR body by @AprilNEA in #821
  • refactor(agent): split the binary watcher from how it relaunches by @AprilNEA in #816
  • refactor(agent-core): give the polling watchers one loop by @AprilNEA in #818
  • feat(hid): recognise Lightspeed receiver 046d:c54d (PRO X SUPERLIGHT 2 DEX) by @v14 in #811
  • chore: release v0.7.6 by @AprilNEA[bot] in #824
  • fix(agent): make macOS permission failures diagnosable by @AprilNEA in #817
  • fix(ci): build both macOS legs with an Icon Composer-capable Xcode by @AprilNEA in #815
  • chore: release v0.7.7 by @AprilNEA[bot] in #830

New Contributors

Full Changelog: v0.7.4...v0.7.7

  •  

v0.7.2

What's Changed

  • fix(agent): reapply volatile settings after Windows resume by @davidbudnick in #639
  • build(nix): make Linux packaging first-class by @AprilNEA in #632
  • chore(infra): add CODEOWNERS by @AprilNEA in #646
  • fix: bind the Actions Ring overlay to one agent run by @AprilNEA in #645
  • chore: converge the repository top level by @AprilNEA in #647
  • refactor(gui): split the GPUI side into app, ui, and overlay crates by @AprilNEA in #672
  • refactor(ipc): replace the GUI's poll loop with a level-triggered state channel by @AprilNEA in #675
  • build(windows): ship the openlogi CLI in the zip and MSI by @yuzi-co in #659
  • build(infra): drop dependency debuginfo in dev builds by @AprilNEA in #695
  • refactor(core): extract openlogi-permissions and give shared constants one definition by @AprilNEA in #697
  • fix(gui): use the GPUI executor timer, not tokio::time::interval, for camera scans by @charliecai01 in #686
  • fix(overlay): prevent GPUI from exiting on window close by @clifinger in #700
  • fix(agent): relaunch after granting Input Monitoring by @AprilNEA in #713
  • chore: release v0.7.2 by @AprilNEA[bot] in #642

New Contributors

Full Changelog: v0.7.1...v0.7.2

  •  

v24.10.8

Hi,

The OpenWrt community is proud to announce the newest stable release of the OpenWrt 24.10 stable series.

This release fixes many security issues, several of them remotely triggerable in network services that are enabled by default. We strongly recommend everyone to upgrade.

The OpenWrt 24.10 series is in security maintenance (only security problems are fixed), with end of life (EoL) projected for September 2026. We recommend migrating to OpenWrt 25.12 before then.

Download firmware images using the OpenWrt Firmware Selector:

Download firmware images directly from our download servers:

Main changes between OpenWrt 24.10.7 and OpenWrt 24.10.8

Only the main changes are listed below. See changelog-24.10.8 for the full changelog.

Security fixes

This release fixes several remotely triggerable vulnerabilities in core network
services that are enabled by default. Updating is strongly recommended.

  • odhcpd (DHCPv6/DHCPv4/RA server, enabled by default): multiple vulnerabilities reachable by a network-adjacent, unauthenticated attacker were fixed:
  • odhcpd / LuCI stored XSS: CVE-2026-62948 (Critical): an unauthenticated DHCPv6 client could inject lease-file lines through a crafted FQDN hostname, resulting in stored cross-site scripting on the LuCI DHCPv6 leases status page. Fixed by escaping client hostnames in the lease state file.
    GHSA-hhmc-92hw-535f
  • uhttpd (web server, serves LuCI): three HTTP request smuggling issues on keep-alive connections were fixed:
    • CVE-2026-55614 (High): case-sensitive Transfer-Encoding matching.
      GHSA-mcfg-c4r7-pjpf
    • CVE-2026-55612 (High): invalid chunk-length state reset.
      GHSA-p55c-rmhc-qfm5
    • CVE-2026-55613 (Moderate): ubus POST body parse-error desync.
      GHSA-wgwp-64hh-f52p
    • In addition uhttpd received hardening without an assigned CVE: a one-byte overflow in uh_urldecode(), an off-by-one out-of-bounds read in uh_b64decode(), constant-time password comparison and stricter handling of $p$ crypt-hash entries in the authentication realm.
  • rpcd: ACL bypass through symlinks (High): the file plugin matched ACL grants against the textual path but then followed symlinks unchecked, so a symlink inside an ACL-covered directory let a limited account read or write arbitrary root-owned files. The path is now re-resolved and re-authorized for every operation that dereferences the final component.
    https://github.com/openwrt/openwrt/security/advisories/GHSA-q5gr-86pq-vvwr
  • cgi-io (file upload/download helper used by LuCI, installed by default with LuCI):
    • CVE-2026-62947 (Moderate): ACL bypass and arbitrary root file read β€” the download and exec paths were checked against the ACL before being canonicalized, so path traversal let an authenticated user with wildcard read permission read any root-readable file (e.g. /etc/shadow).
      GHSA-jw5r-xhf5-2xcq
    • Use-after-free (Moderate, no CVE assigned): decoding malformed percent-encoded POST field data could use freed memory.
      https://github.com/openwrt/openwrt/security/advisories/GHSA-wvhq-qmwj-grj2
  • LuCI (web interface): several issues in LuCI modules and applications were fixed. The privilege-escalation issues only apply if the affected app is installed and a limited (delegated) account with the relevant ACL exists:
    • luci-app-ddns (High): the ucode status backend passed DDNS UCI values such as lookup_host, dns_server and the section name to system() as an unquoted shell string, so anyone able to write DDNS configuration could execute commands as root. The invocations now use the array form of system().
      https://github.com/openwrt/openwrt/security/advisories/GHSA-32r4-3wh2-qvq3
    • luci-app-samba4 (High): the read ACL granted exec permission for smbd in general rather than only smbd -V, allowing read-only accounts to run arbitrary commands as root.
      GHSA-vx64-mmp7-h36c
    • luci-app-upnp (High): stored XSS β€” an unauthenticated LAN client can inject JavaScript through a UPnP port-mapping description, which the underlying daemon does not sanitize. The description is now HTML-escaped.
      GHSA-8v49-6387-7f89
    • luci-mod-status (High): stored XSS via a DHCP/DHCPv6 lease hostname shown in the lease status tables. Together with the odhcpd fix above this closes the injection path from an unauthenticated DHCP client into the LuCI admin UI.
      GHSA-686p-p8p9-x6fh
    • luci-base: the dispatcher now escapes the URL path and user name when logging, so crafted login requests can no longer pollute the system log.
    • The LuCI rpcd ACL files were adjusted for the symlink-aware rpcd ACL check mentioned above, so that /proc paths that are symlinks (such as /proc/mounts) keep working.
  • umdns (mDNS responder): CVE-2026-55492 (Moderate, CVSS 6.5): an unauthenticated attacker on the local network segment could flood the daemon with unique mDNS records; the unbounded cache exhausted the heap and took the whole device into out-of-memory. Fixed by bounding the cache size and clamping hostile TTLs.
    GHSA-jg8f-fhfw-jg46
  • ead (Emergency Access Daemon): CVE-2026-55490 (Moderate): an integer underflow in handle_send_a() allowed an unauthenticated attacker on the local segment to crash the daemon with a single crafted packet.
    GHSA-9558-77jp-g3fw
  • hostapd / wpa_supplicant: the fixes from upstream hostap security advisory 2026-1 were applied. Missing validation of multi-link (MLO / IEEE 802.11be) information in received Management frames could terminate the process or corrupt a small amount of memory; the frames need neither authentication nor user interaction.
    https://w1.fi/security/2026-1/missing-ml-parsing-validation.txt
    https://github.com/openwrt/openwrt/security/advisories/GHSA-3hj7-gj5w-h68m
  • dropbear (SSH): security fixes from upstream 2026.90 were backported:
    • CVE-2019-6111: a malicious server could make the scp client overwrite unexpected local files (missing OpenSSH patch). Note the accompanying upstream behaviour change: scp -r is now rejected when the target directory already exists.
    • CVE-2026-35385: scp did not clear setuid/setgid bits on received files.
    • An authenticated user could bypass an authorized_keys forced_command option when dropbear runs with -t; authorized_keys is now opened non-blocking (local denial of service via special files); and a close() on a file descriptor obtained from an out-of-bounds read was fixed.
  • musl libc: backport of the upstream fixes for CVE-2026-6042 (algorithmic-complexity denial of service in iconv) and CVE-2026-40200 (stack corruption in qsort with sufficiently large inputs).
  • OpenSSL: update to 3.0.21, fixing multiple security vulnerabilities (CVE-2026-45447, CVE-2026-34182, CVE-2026-45445, CVE-2026-7383, CVE-2026-9076, CVE-2026-34180, CVE-2026-42766, CVE-2026-42770, CVE-2026-45446).
  • Linux kernel: update to 6.6.144, pulling in the upstream 6.6.142, 6.6.143 and 6.6.144 stable releases, which fix multiple security vulnerabilities.
  • dnsmasq: update to 2.93, which carries the security fixes that were backported into 2.90 in the previous release (CVE-2026-2291, CVE-2026-4890, CVE-2026-4891, CVE-2026-4892, CVE-2026-4893 and CVE-2026-5172) plus further upstream fixes.

In addition, the packages feed shipped with this release moved a number of
optional packages to newer upstream versions that contain security fixes, among
them curl (8.12.1 to 8.19.0), expat (2.7.4 to 2.8.2), BIND (9.20.23 to 9.20.26),
PHP 8 (8.3.29 to 8.3.32), Tor (0.4.8.22 to 0.4.9.10), unbound (1.24.2 to 1.25.1),
lighttpd (1.4.82 to 1.4.85), haproxy (3.0.19 to 3.0.25) and rsync (3.4.2 to 3.4.3).
collectd also received a fix for a use-after-free in the ping plugin. These
packages are not part of the default images β€” you have to update the installed
packages on your device to receive them.

Beyond the issues listed above, this release fixes a number of further security
and robustness problems in odhcpd, odhcp6c, rpcd and uhttpd for which no CVE
number or dedicated advisory was assigned. We strongly recommend upgrading to
the latest OpenWrt release and installing all available package updates.

Device support

No new devices were added in this security maintenance release.

Device fixes:

  • airoha: update the PCS driver to a newer proposed upstream version (EN7581 Ethernet SerDes)
  • ipq806x: Extreme Networks AP3935 - disable PHY hibernation on LAN1, which otherwise stayed dead when no cable was connected at power-on

WiFi fixes and improvements

  • mac80211: update the backported wireless stack and drivers from 6.12.61 to 6.12.96, containing many upstream fixes for ath10k, ath11k, rtw88, rtlwifi and iwlwifi, among them:
    • ath10k: skip WMI and beacon transmission when the device is wedged
    • ath11k: fix a warning on unbind and fix peer resolution on the RX path
    • rtw88: fix memory leaks on USB write failures
    • mac80211/nl80211: reject oversized EMA RNR lists and fix multi-link element defragmentation
  • hostapd / wpa_supplicant: multi-link (MLO) parsing validation fixes, see the security section above
  • wireless-regdb: update to 2026.05.30

Network and service improvements

  • odhcpd received many DHCPv6/DHCPv4 correctness and robustness fixes on top of the security fixes listed above, among them bounded nested relay recursion, correct handling of DHCPv4 Pad/End option encoding, fixed reallocation error handling and a memory leak on reload
  • odhcp6c: several fixes to DHCPv6 option parsing, RFC 6603 prefix-exclude handling, Reconfigure message validation and script invocation
  • rpcd: fixes for a use-after-free in the async exec reply path, a double close of exec pipe descriptors, an integer overflow in the UCI apply timeout and several memory leaks
  • umdns: update to a current version with the cache limits mentioned above

Other changes

  • busybox: the shell command history is now saved again. To avoid flash wear, it is written only when a shell session exits and it is stored in /tmp, so it is lost on reboot. The location can be changed in /etc/profile.d/busybox-history-file.sh.

Core components update

  • Linux kernel: update from 6.6.141 to 6.6.144
  • OpenSSL: update from 3.0.20 to 3.0.21 (multiple security fixes, see above)
  • dnsmasq: update from 2.90 to 2.93
  • mac80211: update from 6.12.61 to 6.12.96
  • wireless-regdb: update from 2026.03.18 to 2026.05.30
  • ca-certificates: update from 20260223 to 20260601 (refreshed root CA bundle)

Upgrading to 24.10

Sysupgrade can be used to upgrade a device from 23.05 to 24.10, and configuration will be preserved in most cases.

For for upgrades inside the OpenWrt 24.10 stable series for example from a OpenWrt 24.10 release candidate Attended Sysupgrade is supported in addition which allows preserving the installed packages too.

  • Sysupgrade from 22.03 to 24.10 is not officially supported.

  • There is no configuration migration path for users of the ipq806x target for Qualcomm Atheros IPQ806X SoCs because it switched to DSA. You have to upgrade without saving the configuration.
    ''Image version mismatch. image 1.1 device 1.0 Please wipe config during upgrade (force required) or reinstall. Config cannot be migrated from swconfig to DSA Image check failed''

  • User of the Linksys E8450 aka. Belkin RT3200 running OpenWrt 23.05 or earlier will need to run installer version v1.1.3 or later in order to reorganize the UBI layout for the 24.10 release. A detailed description is in the OpenWrt wiki. Updating without using the installer will break the device. Sysupgrade will show a warning before doing an incompatible upgrade.

  • Users of the Xiaomi AX3200 aka. Redmi AX6S running OpenWrt 23.05 or earlier have to follow a special upgrade procedure described in the wiki. This will increase the flash memory available for OpenWrt. Updating without following the guide in the wiki break the device. Sysupgrade will show a warning before doing an incompatible upgrade.

  • Users of Zyxel GS1900 series switches running OpenWrt 23.05 or earlier have to perform a new factory install with the initramfs image due to a changed partition layout. Sysupgrade will show a warning before doing an incompatible upgrade and is not possible. After upgrading, the config file /etc/config/system should not be restored from a backup, as this will overwrite the new compat_version value.

  • Users of scp from the dropbear package: recursive copies (scp -r) into an already existing target directory are now rejected. This is an intentional upstream change that comes with the fix for CVE-2019-6111. Use rsync or copy into a non-existing directory instead.

Known issues

  • LEDs for Airoha AN8855 are not yet supported. Devices like the Xiaomi AX3000T with an Airoha switch will have their switch LEDs powered off. This will not be addressed in the OpenWrt 24.10 series any more, it is fixed in OpenWrt 25.12.
  • 5GHz WiFi is non-functional on certain devices with ath10k chipsets. Affected models include the Phicomm K2T, TP-Link Archer C60 v3 and possibly others. For details, see issue #14541.

Full release notes and upgrade instructions are available at
https://openwrt.org/releases/24.10/notes-24.10.8

In particular, make sure to read the regressions and known issues before upgrading:
https://openwrt.org/releases/24.10/notes-24.10.8#known_issues

For a detailed list of all changes since 24.10.7, refer to
https://openwrt.org/releases/24.10/changelog-24.10.8

To download the 24.10.8 images, navigate to:
https://downloads.openwrt.org/releases/24.10.8/targets/
Use OpenWrt Firmware Selector to download:
https://firmware-selector.openwrt.org?version=24.10.8

As always, a big thank you goes to all our active package maintainers, testers, documenters and supporters.

Have fun!

The OpenWrt Community


To stay informed of new OpenWrt releases and security advisories, there
are new channels available:

  •  

v25.12.5

Hi,

The OpenWrt community is proud to announce the fifth service release of the OpenWrt 25.12 stable series.

Download firmware images using the OpenWrt Firmware Selector:

Download firmware images directly from our download servers:

Main changes between OpenWrt 25.12.4 and OpenWrt 25.12.5

Only the main changes are listed below. See the full changelog for details.

Security fixes

This release fixes several remotely triggerable vulnerabilities in core network services that are enabled by default. Updating is strongly recommended.

  • odhcpd (DHCPv6/DHCPv4/RA server, enabled by default): multiple vulnerabilities reachable by a network-adjacent attacker were fixed by updating odhcpd:
    • CVE-2026-53921 (Critical): stack buffer overflow in the DHCPv6 IA reply serialization, triggerable with crafted DHCPv6 REQUEST packets. GHSA-7fwx-hhrg-3496
    • CVE-2026-53918 (High): use-after-free in the DHCPv6 IA handler. GHSA-44ff-jcwh-wgc2
    • CVE-2026-53920 (High): stack memory disclosure via a truncated DHCPv6 IA_NA/IA_PD option. GHSA-p769-5v73-pc4f
    • CVE-2026-53922 (Moderate): pre-auth denial of service via a size_t underflow in DHCPv6 IA handling. GHSA-7hcw-g2jh-pqv5
    • CVE-2026-55606 (Moderate): stack buffer overread caused by a DUID length endianness mismatch. GHSA-x8x4-7gvf-gp45
    • No CVE assigned (Moderate, CVSS 5.4): the NDP relay accepted IPv6 Neighbor Solicitations with a hop limit other than 255 (RFC 4861 violation), letting an off-link attacker spoof NS packets through the relay (neighbor-cache poisoning, traffic redirection or DoS). Only relevant when the NDP relay is enabled. https://github.com/openwrt/odhcpd/security/advisories/GHSA-qvg7-9jf5-wgjc
  • odhcpd / LuCI stored XSS (Critical): an unauthenticated DHCPv6 client could inject lease-file lines through a crafted FQDN hostname, resulting in stored cross-site scripting on the LuCI DHCPv6 leases status page. Fixed by escaping client hostnames in the lease state file. GHSA-hhmc-92hw-535f
  • uhttpd (web server): three HTTP request smuggling issues on keep-alive connections were fixed:
  • cgi-io: ACL bypass / arbitrary file read (Moderate): a path-traversal flaw in the cgi-download handler let an authenticated user with wildcard read permission read any root-readable file (e.g. /etc/shadow). GHSA-jw5r-xhf5-2xcq
  • LuCI (web interface): a set of issues in LuCI core modules and applications were fixed. Most let a logged-in user with limited (delegated) permissions escalate to root command execution; a few are stored XSS issues reachable by clients on the network. The privilege-escalation issues only apply if the affected app is installed and the account/ACL in question exists:
    • luci-app-tailscale-community (Critical, CVSS 9.9): command injection allowing delegated users to run commands as root via tailscale.do_login. GHSA-xwc5-mx58-rh35
    • luci-app-advanced-reboot (High): CVE-2026-55897 β€” a read ACL exposes /bin/sh via file.exec, allowing delegated users to run commands as root. GHSA-vj96-f37g-37f6
    • luci-app-adblock-fast (High): CVE-2026-55159 β€” delegated users can reach root command execution via newline-separated cron entries. GHSA-ggpf-xrph-wg5v
    • luci-app-samba4 (High): a read ACL allows authenticated root command execution via the smbd file.exec permission. GHSA-vx64-mmp7-h36c
    • luci-app-travelmate (High): a delegated UCI write can execute the travelmate auto-login command as root. GHSA-p35r-3323-6g7g
    • luci-app-upnp (High): stored XSS β€” an unauthenticated LAN client can inject JavaScript via a UPnP port-mapping description. GHSA-8v49-6387-7f89
    • luci-mod-network / luci-mod-status (High): stored XSS via a DHCPv6 lease hostname (FQDN) shown in the status tables. GHSA-686p-p8p9-x6fh
    • luci-app-banip (High): a crafted LuCI login username can inject an arbitrary IP into banIP's log parser, causing the wrong address to be blocked. GHSA-r6hx-4f83-vp8m
  • ead (Emergency Access Daemon): CVE-2026-55490 (Moderate): an integer underflow in handle_send_a() allowed a pre-auth denial of service. GHSA-9558-77jp-g3fw
  • Linux kernel: update to 6.12.94, pulling in the upstream 6.12.88 through 6.12.94 stable releases, which fix multiple security vulnerabilities, such as CVE-2026-43500.
  • OpenSSL: update to 3.5.7, fixing multiple security vulnerabilities (CVE-2026-7383, CVE-2026-9076, CVE-2026-34180, CVE-2026-34181, CVE-2026-34182, CVE-2026-34183, CVE-2026-42764, CVE-2026-42766, CVE-2026-42767, CVE-2026-42768, CVE-2026-42769, CVE-2026-42770, CVE-2026-45445, CVE-2026-45446, CVE-2026-45447).
  • musl libc: backport upstream fixes for CVE-2026-6042 and CVE-2026-40200.
  • dropbear (SSH): backport security fixes from upstream 2026.90 and 2026.91, including CVE-2019-6111 (a malicious server could trick the scp client into overwriting arbitrary local files) and CVE-2026-35385.

Beyond the issues listed above, this release fixes a number of further security problems for which no CVE number or dedicated advisory was assigned. We strongly recommend upgrading to the latest OpenWrt release and installing all available package updates.

Device support

New devices supported in 25.12.5:

  • ipq40xx: Linksys MR9000
  • mediatek (filogic): GL.iNET GL-MT3600BE
  • mediatek (filogic): Huasifei WH3000R (NAND)
  • mediatek (filogic): JioRouter AX6000 (JIDU6101)
  • mediatek (filogic): netis EAP930 V1
  • mediatek (filogic): netis MEX605
  • mediatek (filogic): TP-Link F65 v1
  • mediatek (filogic): Zbtlink ZBT-Z8106AX-S
  • mvebu: Zyxel NAS326
  • ramips (mt76x8): Cudy WR300 v1
  • ramips (mt7621): I-O DATA WN-AX2033GR2

New image variants for already supported devices:

  • mediatek (filogic): Qihoo 360T7 - add UBI layout image
  • mediatek (filogic): Creatlentem CLT-R30B1 - add all-in-UBI layout image
  • mediatek (filogic): Bazis AX3000WM - also recognized under its alternative name WD-R3000N-G2A

Device fixes:

  • ath79: MikroTik - build AG71XX_LEGACY as a module, fixing AR8216/AR8236/AR8316 switch bring-up on boot on some MikroTik devices (#23739)
  • mediatek: do not let devfreq power off the CPU (stability fix)
  • mediatek (filogic): Wavlink WL-WN536AX6 rev A - several fixes (correct 5 GHz MAC address, MAC-address nvmem layout, NAND bad-block management, SPI drive strength, network LED)
  • mediatek (filogic): Qihoo 360T7 - fix DDR3 rate
  • mediatek: Acer Predator W6X - add LED boot status support
  • ramips: PAX1800 Lite - fix label MAC device and avoid attaching both UBI partitions on boot
  • ramips (mt76x8): Cudy LT300 v3 - fix backup partition offset
  • rtl8367b: fix RTL8367S-VB VLAN multicast memory handling
  • mvebu: uDPU / eDPU - convert to dual (A/B) firmware
  • ipq806x: AP3935 - disable hibernation on LAN1
  • airoha (an7581): platform improvements and upstream networking fixes

WiFi fixes and improvements

  • wifi-scripts: fix a null dereference on 6 GHz-only radios
  • wifi-scripts: fix EAP (802.1X) station mode in the wpa_supplicant configuration generator
  • wifi-scripts: fix tracking of disabled virtual interfaces
  • hostapd: fix a misplaced radar-detected (DFS) ubus notification

Network and service improvements

  • New "network" LED trigger (lan/wan/wlan) for link and activity indication on supported devices
  • odhcpd and odhcp6c received many DHCPv6/DHCPv4 and IPv6 prefix-delegation correctness and robustness fixes, on top of the security fixes listed above, including more stable DHCPv6 IAID handling
  • More robust handling of invalid DHCP / DHCPv6 client identifiers
  • ubus, rpcd, uhttpd, umdns, uclient and fstools updated with stability and hardening fixes

Other changes

  • kmod-nf-nathelper-extra was split into individual per-protocol packages, so only the needed NAT helper modules have to be installed.
  • Matching the linker max-page-size to the target page size removes unnecessary padding, which can make many binaries - and thus the images - a bit smaller.
  • OpenWrt builds are now more reproducible.

Core component updates

  • Linux kernel: update from 6.12.87 to 6.12.94
  • OpenSSL: update from 3.5.6 to 3.5.7 (multiple security fixes, see above)
  • wireless-regdb: update from 2026.03.18 to 2026.05.30
  • dnsmasq: update from 2.91 to 2.93
  • ca-certificates: update from 20260223 to 20260601 (refreshed root CA bundle)
  • util-linux: update from 2.41.3 to 2.41.5

Upgrading to 25.12.5

Upgrading from 24.10 to 25.12 should be transparent on most devices, as most configuration data has either remained the same or will be translated correctly on first boot by the package init scripts.
For upgrades within the OpenWrt 25.12 stable series, Attended Sysupgrade is also supported, which allows preserving the installed packages.

  • Sysupgrade from 23.05 or earlier to 25.12 is not officially supported.

  • Cron log level was fixed in busybox. system.@system[0].cronloglevel should be set to 7 for normal logging. 7 is the default now. If this option is not set, the default is used and no manual action is needed. fc0c518

  • Bananapi BPI-R4: Interface eth1 was renamed to sfp-lan or lan4, and interface eth2 was renamed to sfp-wan to match the labels. You have to upgrade without saving the configuration. cd8dcfe

  • TP-Link RE355 v1, RE450 v1 and RE450 v2: The partition layout and block size changed in this release to fix configuration loss on sysupgrade. Users upgrading from OpenWrt 25.12.0 or earlier must use sysupgrade -F to force the upgrade. The image must not exceed 5.875 MB (6016 KiB).

  • Meraki MX60: Direct sysupgrade to 25.12.5 is not possible without manual preparation β€” meraki_loadaddr must be changed before upgrading, as the default value is insufficient to boot OpenWrt 25.12+. See the device wiki page for instructions.

  • Sitecom WLR-7100 (X7 AC1200): This device was moved from the ath79/generic target to the ath79/tiny target in OpenWrt 25.12.4. Users upgrading from 25.12.3 or earlier need to flash the new image from the ath79/tiny target (use sysupgrade -F).

Known issues

  • Zyxel EX5601-T0: the WAN interface was renamed from eth1 to wan β€” check and update your network configuration after upgrading.
  • Pixel 10 phones have problems connecting to WPA3-protected WiFi 6 APs. #21486
  • 802.11r Fast Transition (FT) causes connection problems with some WiFi clients when WPA3 is used. #22200
  • SQM CAKE MQ (cake_mq): throughput may be unexpectedly low on some configurations after the scheduler fixes in this release. #22344

Full release notes and upgrade instructions are available at
https://openwrt.org/releases/25.12/notes-25.12.5

In particular, make sure to read the known issues before upgrading:
https://openwrt.org/releases/25.12/notes-25.12.5#known_issues

For a detailed list of all changes, refer to
https://openwrt.org/releases/25.12/changelog-25.12.5

To download the 25.12.5 images, navigate to:
https://downloads.openwrt.org/releases/25.12.5/targets/
Use OpenWrt Firmware Selector to download:
https://firmware-selector.openwrt.org?version=25.12.5

As always, a big thank you goes to all our active package maintainers, testers, documenters and supporters.

Have fun!

The OpenWrt Community


To stay informed of new OpenWrt releases and security advisories, there
are new channels available:

  •  

v24.10.7

Hi,

The OpenWrt community is proud to announce the newest stable release of the OpenWrt 24.10 stable series.

This release fixes several security issues, including security fixes in dnsmasq and the Linux kernel. We recommend everyone to upgrade.

The OpenWrt 24.10 series is in security maintenance (only security problems are fixed), with end of life (EoL) projected for September 2026. We recommend migrating to OpenWrt 25.12 before then.

Download firmware images using the OpenWrt Firmware Selector:

Download firmware images directly from our download servers:

Main changes between OpenWrt 24.10.6 and OpenWrt 24.10.7

Only the main changes are listed below. See changelog-24.10.7 for the full changelog.

Security fixes

Linux kernel:

  • CVE-2026-43284 ("Dirty Frag"): local privilege escalation through the IPsec ESP code path. This only affects devices that use IPsec, i.e. that have kmod-ipsec / the esp4 or esp6 kernel modules loaded. Fixed by the Linux kernel update to 6.6.138.
  • CVE-2026-31431 ("Copy Fail"): in earlier releases this only affected users of the starfive target and users who had installed kmod-crypto-user. Fixed by the Linux kernel update to 6.6.137.

dnsmasq:

TLS/crypto libraries:

  • openssl: update to 3.0.20, fixing multiple security vulnerabilities
  • mbedtls: update to 3.6.6, fixing multiple security vulnerabilities
  • wolfssl: update to 5.9.1, fixing multiple security vulnerabilities

Device support

  • airoha: an7581: enable USB support
  • airoha: EN7581: fix PCIe initialization and add x2 lane (x2 link) support
  • airoha: add U-Boot support for EN7581/AN7583 boards
  • bcm53xx: align image names with the device-tree compatible (affects image selection in the Firmware Selector)
  • qualcommax: ipq807x: Linksys MX5300: fix MAC address labelling
  • ramips: mt7621: Xiaomi Mi Router AC2100: fix MAC address labelling

Various fixes and improvements

  • airoha: an7581: fix kernel panic in the I2S audio driver
  • airoha: fix Ethernet hardware offload on EN7581 (backported upstream airoha_eth patches, offload with GDM2 present)
  • lantiq: fix refcount and memory leak in the MTD partition parser
  • wifi-scripts: fix MAC address check in the mac80211 setup script

Core components update

  • Linux kernel: update from 6.6.127 to 6.6.141
  • ca-certificates: update from 20250419 to 20260223
  • mbedtls: update from 3.6.5 to 3.6.6
  • openssl: update from 3.0.19 to 3.0.20
  • wireless-regdb: update from 2026.02.04 to 2026.03.18
  • wolfssl: update from 5.7.6 to 5.9.1

Upgrading to 24.10

Sysupgrade can be used to upgrade a device from 23.05 to 24.10, and configuration will be preserved in most cases.

For for upgrades inside the OpenWrt 24.10 stable series for example from a OpenWrt 24.10 release candidate Attended Sysupgrade is supported in addition which allows preserving the installed packages too.

  • Sysupgrade from 22.03 to 24.10 is not officially supported.

  • There is no configuration migration path for users of the ipq806x target for Qualcomm Atheros IPQ806X SoCs because it switched to DSA. You have to upgrade without saving the configuration.
    ''Image version mismatch. image 1.1 device 1.0 Please wipe config during upgrade (force required) or reinstall. Config cannot be migrated from swconfig to DSA Image check failed''

  • User of the Linksys E8450 aka. Belkin RT3200 running OpenWrt 23.05 or earlier will need to run installer version v1.1.3 or later in order to reorganize the UBI layout for the 24.10 release. A detailed description is in the OpenWrt wiki. Updating without using the installer will break the device. Sysupgrade will show a warning before doing an incompatible upgrade.

  • Users of the Xiaomi AX3200 aka. Redmi AX6S running OpenWrt 23.05 or earlier have to follow a special upgrade procedure described in the wiki. This will increase the flash memory available for OpenWrt. Updating without following the guide in the wiki break the device. Sysupgrade will show a warning before doing an incompatible upgrade.

  • Users of Zyxel GS1900 series switches running OpenWrt 23.05 or earlier have to perform a new factory install with the initramfs image due to a changed partition layout. Sysupgrade will show a warning before doing an incompatible upgrade and is not possible. After upgrading, the config file /etc/config/system should not be restored from a backup, as this will overwrite the new compat_version value.

Known issues

  • LEDs for Airoha AN8855 are not yet supported. Devices like the Xiaomi AX3000T with an Airoha switch will have their switch LEDs powered off. This issue will be addressed in an upcoming OpenWrt SNAPSHOT and the OpenWrt 24.10 minor release.
  • 5GHz WiFi is non-functional on certain devices with ath10k chipsets. Affected models include the Phicomm K2T, TP-Link Archer C60 v3 and possibly others. For details, see issue #14541.

Full release notes and upgrade instructions are available at
https://openwrt.org/releases/24.10/notes-24.10.7

In particular, make sure to read the regressions and known issues before upgrading:
https://openwrt.org/releases/24.10/notes-24.10.7#known_issues

For a detailed list of all changes since 24.10.6, refer to
https://openwrt.org/releases/24.10/changelog-24.10.7

To download the 24.10.7 images, navigate to:
https://downloads.openwrt.org/releases/24.10.7/targets/
Use OpenWrt Firmware Selector to download:
https://firmware-selector.openwrt.org?version=24.10.7

As always, a big thank you goes to all our active package maintainers, testers, documenters and supporters.

Have fun!

The OpenWrt Community


To stay informed of new OpenWrt releases and security advisories, there
are new channels available:

  •  

v25.12.4

Hi,

The OpenWrt community is proud to announce the fourth service release of the OpenWrt 25.12 stable series.

Download firmware images using the OpenWrt Firmware Selector:

Download firmware images directly from our download servers:

Main changes between OpenWrt 25.12.3 and OpenWrt 25.12.4

Only the main changes are listed below. See the full changelog for details.

Security fixes

  • dnsmasq: backport six upstream CVE-fix patches to dnsmasq 2.91:
  • Linux kernel: CVE-2026-43284 ("Dirty Frag") β€” local privilege escalation via the IPsec ESP path. Only relevant on devices with kmod-ipsec / esp4/esp6 loaded. Fixed via the 6.12.87 kernel update.

Device support

New devices supported in 25.12.4:

  • ath79: MikroTik RouterBOARD 960PGS (hEX PoE / PowerBox Pro)
  • mediatek: filogic: Cudy WR3000E v1: add ubootmod variant
  • mediatek: filogic: Cudy WR3000H v1: add ubootmod variant
  • mediatek: filogic: Cudy WR3000P v1: add ubootmod variant
  • mediatek: filogic: Cudy WR3000S v1: add ubootmod variant

Device fixes:

  • ath79: Sitecom WLR-7100 (X7 AC1200): fix MAC address assignment, wire up 5 GHz WLAN LED, and move to the tiny target to free ~800 KiB of flash
  • ipq40xx: Pakedge WR-1: restore lost band label on the WLAN LEDs
  • mediatek: filogic: Cudy WR3000E/H/P/S v1 and WBR3000UAX v1 (ubootmod NAND builds): disable NMBM, which was mistakenly enabled and prevented the NAND from being used correctly
  • microchipsw: fix LAN8814 QSGMII soft reset

WiFi fixes and improvements

  • wifi-scripts: fix basic_rate mapping in the wpa_supplicant ucode generator
  • mac80211: update backports package to 6.18.26 (general stability improvements)

Core component updates

  • Linux kernel: update from 6.12.85 to 6.12.87
  • mac80211: update from 6.18.7 to 6.18.26

Upgrading to 25.12.4

Upgrading from 24.10 to 25.12 should be transparent on most devices, as most configuration data has either remained the same or will be translated correctly on first boot by the package init scripts.
For upgrades within the OpenWrt 25.12 stable series, Attended Sysupgrade is also supported, which allows preserving the installed packages.

  • Sysupgrade from 23.05 or earlier to 25.12 is not officially supported.

  • Cron log level was fixed in busybox. system.@system[0].cronloglevel should be set to 7 for normal logging. 7 is the default now. If this option is not set, the default is used and no manual action is needed. fc0c518

  • Bananapi BPI-R4: Interface eth1 was renamed to sfp-lan or lan4, and interface eth2 was renamed to sfp-wan to match the labels. You have to upgrade without saving the configuration. cd8dcfe

  • TP-Link RE355 v1, RE450 v1 and RE450 v2: The partition layout and block size changed in this release to fix configuration loss on sysupgrade. Users upgrading from OpenWrt 25.12.0 or earlier must use sysupgrade -F to force the upgrade. The image must not exceed 5.875 MB (6016 KiB).

  • Meraki MX60: Direct sysupgrade to 25.12.4 is not possible without manual preparation β€” meraki_loadaddr must be changed before upgrading, as the default value is insufficient to boot OpenWrt 25.12+. See the device wiki page for instructions.

Known issues

  • Zyxel EX5601-T0: the WAN interface was renamed from eth1 to wan β€” check and update your network configuration after upgrading.
  • Pixel 10 phones have problems connecting to WPA3-protected WiFi 6 APs. #21486
  • 802.11r Fast Transition (FT) causes connection problems with some WiFi clients when WPA3 is used. #22200
  • SQM CAKE MQ (cake_mq): throughput may be unexpectedly low on some configurations after the scheduler fixes in this release. #22344

Full release notes and upgrade instructions are available at
https://openwrt.org/releases/25.12/notes-25.12.4

In particular, make sure to read the known issues before upgrading:
https://openwrt.org/releases/25.12/notes-25.12.4#known_issues

For a detailed list of all changes, refer to
https://openwrt.org/releases/25.12/changelog-25.12.4

To download the 25.12.4 images, navigate to:
https://downloads.openwrt.org/releases/25.12.4/targets/
Use OpenWrt Firmware Selector to download:
https://firmware-selector.openwrt.org?version=25.12.4

As always, a big thank you goes to all our active package maintainers, testers, documenters and supporters.

Have fun!

The OpenWrt Community


To stay informed of new OpenWrt releases and security advisories, there
are new channels available:

  •  

v25.12.3

Hi,

The OpenWrt community is proud to announce the third service release of the OpenWrt 25.12 stable series.

Download firmware images using the OpenWrt Firmware Selector:

Download firmware images directly from our download servers:

Main changes between OpenWrt 25.12.2 and OpenWrt 25.12.3

Only the main changes are listed below. See the full changelog for details.

Security fixes

  • Linux kernel: fixes CVE-2026-31431 ("Copy Fail"). In earlier releases this only affected users on the starfive target and users who had installed kmod-crypto-user.
  • mbedtls: update to 3.6.6 (multiple CVE fixes)
  • OpenSSL: update to 3.5.6 (multiple CVE fixes)
  • wolfSSL: update to 5.9.1 (multiple CVE fixes)

Device support

New devices supported in 25.12.3:

  • mediatek: filogic: ASUS RT-AX52 PRO
  • mediatek: filogic: D-Link AQUILA PRO AI E30
  • mediatek: filogic: Huasifei WH3000 Pro (NAND variant)
  • mediatek: filogic: Keenetic KAP-630 / Netcraze NAP-630
  • mediatek: filogic: Zbtlink ZBT-Z8106AX-T
  • mediatek: filogic: Zyxel WX5600-T0
  • ramips: mt7621: EDUP EP-RT2983
  • ramips: mt76x8: Cudy LT300 v3
  • x86: DFI ADN553
  • x86: DFI ASL553

Device fixes:

  • ath79: Netgear WNDAP360: multiple fixes restoring proper operation (sysupgrade, kernel loader, ethernet, LED, serial baud rate and U-Boot environment)
  • ath79: Extreme Networks WS-AP3805i: fix U-Boot environment configuration
  • ath79: Mikrotik: fix included device packages
  • ipq50xx: Linksys MX5500: add label MAC device assignment
  • lantiq: Netgear DGN3500: fix U-Boot environment size β€” device was broken on 25.12 (#22692)
  • mediatek: filogic: Bananapi BPI-R4: add device tree overlay for the BE14 WiFi 7 module β€” fixes very low WiFi TX power on this module (#17489)
  • mediatek: filogic: Keenetic KN-1812: various Ethernet PHY device tree fixes (PHY reset, interrupt support, MDIO drive strength, partition naming, xsphy node)
  • mediatek: filogic: Netgear EAX17: fix rootfs hash in FIT node for per-device rootfs builds
  • mediatek: filogic: CMCC RAX3000M: add Airoha AN8855 switch support (#21230)
  • mediatek: filogic: Zbtlink ZBT-Z8103AX-D: enable NMBM on the SPI-NAND flash
  • mvebu: ClearFog Base/Pro: fix switch kernel module
  • qualcommax: ipq50xx: Xiaomi AX6000: enable PCIe1 for QCA9887
  • qualcommax: ipq807x: Linksys MX5300: add label MAC assignment
  • ramips: Yuncore CPE200: fix EEPROM size
  • ramips: mt7621: fix reset hang
  • ramips: Wavlink WL-WN575A3: fix EEPROM size for 5 GHz WiFi
  • ramips: Xiaomi Mi Router 4C: fix WAN LED GPIO (#18578)

WiFi fixes and improvements

  • wifi-scripts: fix incorrect erp_domain and fils_cache_id values generated by the ucode-based config script (#21768)
  • wifi-scripts: add missing bridge_isolate and network_vlan fields to the ucode schema (#22620)
  • wifi-scripts: add missing iface and other fields to the ucode station/vlan schema (#22165)
  • wifi-scripts: add EHT (WiFi 7) rates to set_fixed_freq

Networking and system fixes

  • mbedtls: backport upstream patches to fix TLS 1.2 client issues β€” fixes a regression that broke DDNS updates and other TLS 1.2 client connections; the regression was introduced in mbedtls package updates shipped after the 25.12.2 release (#22874)
  • base-files: sysupgrade: fix -u option (skip default configuration) which was broken with apk
  • base-files: sysupgrade: fix -f (custom backup) when the path contains spaces
  • base-files: sysupgrade: update backup exclusion list
  • base-files: use DISKSEQ instead of MAJOR/MINOR for stable disk identification (MAJOR/MINOR are not sequential)
  • lantiq: fix mtdparsers refcount and memory leak
  • uqmi / umbim: introduce devpath option for selecting cellular modems by USB device path
  • kernel: add kmod-vsock and kmod-vsock-virtio for VM guests (vsock communication)

Core component updates

  • Linux kernel: update from 6.12.74 to 6.12.85
  • ca-certificates: update from 20250419 to 20260223
  • linux-firmware: update from 20251125 to 20260221
  • mbedtls: update from 3.6.5 to 3.6.6 (security fixes)
  • OpenSSL: update from 3.5.5 to 3.5.6 (security fixes)
  • wireless-regdb: update from 2026.02.04 to 2026.03.18
  • wolfSSL: update from 5.8.4 to 5.9.1 (security fixes)
  • xdp-tools: update from 1.4.3 to 1.6.3

Upgrading to 25.12.3

Upgrading from 24.10 to 25.12 should be transparent on most devices, as most configuration data has either remained the same or will be translated correctly on first boot by the package init scripts.
For upgrades within the OpenWrt 25.12 stable series, Attended Sysupgrade is also supported, which allows preserving the installed packages.

  • Sysupgrade from 23.05 or earlier to 25.12 is not officially supported.

  • Cron log level was fixed in busybox. system.@system[0].cronloglevel should be set to 7 for normal logging. 7 is the default now. If this option is not set, the default is used and no manual action is needed. fc0c518

  • Bananapi BPI-R4: Interface eth1 was renamed to sfp-lan or lan4, and interface eth2 was renamed to sfp-wan to match the labels. You have to upgrade without saving the configuration. cd8dcfe

  • TP-Link RE355 v1, RE450 v1 and RE450 v2: The partition layout and block size changed in this release to fix configuration loss on sysupgrade. Users upgrading from OpenWrt 25.12.0 or earlier must use sysupgrade -F to force the upgrade. The image must not exceed 5.875 MB (6016 KiB).

  • Meraki MX60: Direct sysupgrade to 25.12.3 is not possible without manual preparation β€” meraki_loadaddr must be changed before upgrading, as the default value is insufficient to boot OpenWrt 25.12+. See the device wiki page for instructions.

Known issues

  • Zyxel EX5601-T0: the WAN interface was renamed from eth1 to wan β€” check and update your network configuration after upgrading.
  • Pixel 10 phones have problems connecting to WPA3-protected WiFi 6 APs. #21486
  • 802.11r Fast Transition (FT) causes connection problems with some WiFi clients when WPA3 is used. #22200
  • SQM CAKE MQ (cake_mq): throughput may be unexpectedly low on some configurations after the scheduler fixes in this release. #22344

Full release notes and upgrade instructions are available at
https://openwrt.org/releases/25.12/notes-25.12.3

In particular, make sure to read the known issues before upgrading:
https://openwrt.org/releases/25.12/notes-25.12.3#known_issues

For a detailed list of all changes, refer to
https://openwrt.org/releases/25.12/changelog-25.12.3

To download the 25.12.3 images, navigate to:
https://downloads.openwrt.org/releases/25.12.3/targets/
Use OpenWrt Firmware Selector to download:
https://firmware-selector.openwrt.org?version=25.12.3

As always, a big thank you goes to all our active package maintainers, testers, documenters and supporters.

Have fun!

The OpenWrt Community


To stay informed of new OpenWrt releases and security advisories, there
are new channels available:

  •  

v25.12.2

Hi,

The OpenWrt community is proud to announce the second service release of the OpenWrt 25.12 stable series.

Download firmware images using the OpenWrt Firmware Selector:

Download firmware images directly from our download servers:

Main changes between OpenWrt 25.12.1 and OpenWrt 25.12.2

Only the main changes are listed below. See the full changelog for details.

Device support

  • airoha: rename kernel module kmod-pwm-an7581 to kmod-pwm-airoha β€” users with this module explicitly installed need to reinstall under the new name
  • apm821xx: fix U-Boot environment definitions for NETGEAR WNDR4700, Western Digital MyBookLive, Meraki MR24 and Meraki MX60; fix PCIe boot failure on Meraki MX60
  • ath79: fix initramfs boot for Huawei AP5030DN and AP6010DN
  • ath79: fix VLAN CPU port tagging on 2-CPU-port devices (affects several dual-CPU switch configurations)
  • ath79: remove incorrectly included WiFi packages from Mikrotik RB750r2 (device has no WiFi hardware)
  • ipq40xx: fix ART partition name for Linksys Velop WHW03 V1 β€” restores correct WiFi calibration data access
  • ipq40xx: fix MAC address reading for Linksys devices using eMMC-based NVMEM
  • lantiq: xrx200: fix failsafe mode on BT HomeHub 5A β€” LAN ports 1 & 2 now work correctly in failsafe (#22480)
  • mediatek: Bananapi BPI-R4: fix SFP+ electric module support β€” modules that stopped working after a snapshot upgrade are now functional again (#19878)
  • ramips: fix kernel decompress error that bricked ELECOM WRC-X1800GS on 25.12.0 (#22270)
  • ramips: fix initramfs kernel load address for TP-Link EAP615-Wall v1
  • ramips: fix MAC address assignment for Xiaomi Mi AC2100
  • realtek: fix D-Link fan control script

WiFi fixes and improvements

  • wifi-scripts: fix 160 MHz channel width configuration β€” hostapd was not correctly configured for 160 MHz, preventing its use (#22481)
  • wifi-scripts: fix SU beamformee antenna count β€” incorrect count was passed to the driver
  • hostapd: fix memory leak in Radio Resource Management (RRM) ubus interface
  • mac80211: ath12k: add thermal sensor support for QCA/IPQ devices
  • mac80211: ath9k: fix GPIO mask handling from device tree
  • mt76: fix severe WiFi latency regression (up to multiple seconds) on 2.4 GHz introduced in 25.12.1 β€” affected many MediaTek devices including OpenWrt One, Zyxel EX5601, ASUS RT-AX53U, Xiaomi AX3000T/AX6000, Cudy WR3000/X6, GL Flint 2 and others (#22491)
  • mt76: multiple further stability fixes for MediaTek WiFi chipsets (MT7615/MT7915/MT7996/MT7992/MT792x):
    • add per-link beacon monitoring for MLO (Multi-Link Operation)
    • fix MT7996/MT7992 link handling during MLO station add/remove
    • fix scan work requeue race with spinlock

Upgrading to 25.12.2

Upgrading from 24.10 to 25.12 should be transparent on most devices, as most configuration data has either remained the same or will be translated correctly on first boot by the package init scripts.
For upgrades within the OpenWrt 25.12 stable series, Attended Sysupgrade is also supported, which allows preserving the installed packages.

  • Sysupgrade from 23.05 or earlier to 25.12 is not officially supported.

  • Cron log level was fixed in busybox. system.@system[0].cronloglevel should be set to 7 for normal logging. 7 is the default now. If this option is not set, the default is used and no manual action is needed. fc0c518

  • Bananapi BPI-R4: Interface eth1 was renamed to sfp-lan or lan4, and interface eth2 was renamed to sfp-wan to match the labels. You have to upgrade without saving the configuration. cd8dcfe

  • TP-Link RE355 v1, RE450 v1 and RE450 v2: The partition layout and block size changed in this release to fix configuration loss on sysupgrade. Users upgrading from OpenWrt 25.12.0 or earlier must use sysupgrade -F to force the upgrade. The image must not exceed 5.875 MB (6016 KiB).

  • Meraki MX60: Direct sysupgrade to 25.12.2 is not possible without manual preparation β€” meraki_loadaddr must be changed before upgrading, as the default value is insufficient to boot OpenWrt 25.12+. See the device wiki page for instructions.

Known issues

  • Zyxel EX5601-T0: the WAN interface was renamed from eth1 to wan β€” check and update your network configuration after upgrading.
  • Pixel 10 phones have problems connecting to WPA3-protected WiFi 6 APs. #21486
  • 802.11r Fast Transition (FT) causes connection problems with some WiFi clients when WPA3 is used. #22200
  • SQM CAKE MQ (cake_mq): throughput may be unexpectedly low on some configurations after the scheduler fixes in this release. #22344

Full release notes and upgrade instructions are available at
https://openwrt.org/releases/25.12/notes-25.12.2

In particular, make sure to read the known issues before upgrading:
https://openwrt.org/releases/25.12/notes-25.12.2#known_issues

For a detailed list of all changes, refer to
https://openwrt.org/releases/25.12/changelog-25.12.2

To download the 25.12.2 images, navigate to:
https://downloads.openwrt.org/releases/25.12.2/targets/
Use OpenWrt Firmware Selector to download:
https://firmware-selector.openwrt.org?version=25.12.2

As always, a big thank you goes to all our active package maintainers, testers, documenters and supporters.

Have fun!

The OpenWrt Community


To stay informed of new OpenWrt releases and security advisories, there
are new channels available:

  •  

v24.10.6

Hi,

The OpenWrt community is proud to announce the newest stable release of the OpenWrt 24.10 stable series.

Download firmware images using the OpenWrt Firmware Selector:

Download firmware images directly from our download servers:

Main changes between OpenWrt 24.10.5 and OpenWrt 24.10.6

Only the main changes are listed below. See changelog-24.10.6 for the full changelog.

Security fixes

OpenWrt components (Trail of Bits audit, February 2026):

  • CVE-2026-30871: Stack buffer overflow in umdns DNS PTR query handling (HIGH)
  • CVE-2026-30872: Stack buffer overflow in umdns IPv6 reverse DNS lookup (HIGH)
  • CVE-2026-30873: Memory leak in jsonpath when processing strings, labels, and regexp tokens (LOW)
  • CVE-2026-30874: Command execution via PATH environment variable filter bypass in procd (LOW)

LuCI:

  • CVE-2026-32721: Possible XSS attack via malicious SSID in LuCI WiFi scan modal (MEDIUM)

OpenSSL:

  • openssl: update to 3.0.19, fixing multiple security vulnerabilities

Device support

  • airoha: an7581: fix switch port and LED functionality
  • ath79: CF-EW71 v2: fix MAC address assignment
  • imx: Gateworks Venice GW72xx-2x, GW73xx-2x, GW75xx-0x, GW75xx-2x: add sysupgrade support
  • ipq40xx: ASUS Lyra: fix reading of WiFi calibration data
  • lantiq: fix GPIO expander clock, restoring correct LED and GPIO behaviour on affected devices
  • mediatek: Banana Pi BPi-R3: fix PWM fan speed control β€” medium cooling level now works correctly
  • mediatek: Cudy AP3000 v1, Cudy WR3000H: fix Ethernet connectivity on units with a Motorcomm PHY
  • mediatek: Cudy M3000, ramips: Cudy AP1300 Outdoor: fix incorrect Ethernet port assignment
  • mediatek: Cudy WR3000P: enable USB 3.0 support in default firmware image
  • mediatek: GL-MT2500: fix sysupgrade compatibility from earlier releases
  • mt7620: fix potential crash on MT7620-based devices
  • ramips: mt76x8: fix boot counter tracking
  • realtek: GS1900-24E: fix switch reliability

Various fixes and improvements

  • imx: cortexa53: fix memory allocation for DMA-intensive operations
  • jsonpath: fix memory leak (CVE-2026-30873)
  • mac80211: ath11k: fix crash caused by unsupported 11ax EDCA parameters
  • mac80211: ath9k: fix WiFi hang β€” chip is now automatically reset on inactivity
  • mt76: mt76x02: fix WiFi traffic stall after interface reconfiguration
  • procd: fix security issues (CVE-2026-30874) and other improvements
  • umdns: fix security issues (CVE-2026-30871, CVE-2026-30872)

Core components update

  • Linux kernel: update from 6.6.119 to 6.6.127
  • openssl: update from 3.0.18 to 3.0.19
  • procd: update from 2024-12-22 to 2026-03-14
  • umdns: update from 2025-02-10 to 2026-02-06
  • wireless-regdb: update from 2025.10.07 to 2026.02.04

OpenWrt 24.10 end of life

With the release of OpenWrt 25.12 stable series, the OpenWrt 24.10 stable series will go end of life in 6 months. We will not provide security updates for OpenWrt 24.10 after September 2026. We encourage everyone to upgrade to OpenWrt 25.12 before September 2026.

Upgrading to 24.10

Sysupgrade can be used to upgrade a device from 23.05 to 24.10, and configuration will be preserved in most cases.

For for upgrades inside the OpenWrt 24.10 stable series for example from a OpenWrt 24.10 release candidate Attended Sysupgrade is supported in addition which allows preserving the installed packages too.

  • Sysupgrade from 22.03 to 24.10 is not officially supported.

  • There is no configuration migration path for users of the ipq806x target for Qualcomm Atheros IPQ806X SoCs because it switched to DSA. You have to upgrade without saving the configuration.
    ''Image version mismatch. image 1.1 device 1.0 Please wipe config during upgrade (force required) or reinstall. Config cannot be migrated from swconfig to DSA Image check failed''

  • User of the Linksys E8450 aka. Belkin RT3200 running OpenWrt 23.05 or earlier will need to run installer version v1.1.3 or later in order to reorganize the UBI layout for the 24.10 release. A detailed description is in the OpenWrt wiki. Updating without using the installer will break the device. Sysupgrade will show a warning before doing an incompatible upgrade.

  • Users of the Xiaomi AX3200 aka. Redmi AX6S running OpenWrt 23.05 or earlier have to follow a special upgrade procedure described in the wiki. This will increase the flash memory available for OpenWrt. Updating without following the guide in the wiki break the device. Sysupgrade will show a warning before doing an incompatible upgrade.

  • Users of Zyxel GS1900 series switches running OpenWrt 23.05 or earlier have to perform a new factory install with the initramfs image due to a changed partition layout. Sysupgrade will show a warning before doing an incompatible upgrade and is not possible. After upgrading, the config file /etc/config/system should not be restored from a backup, as this will overwrite the new compat_version value.

Known issues

  • LEDs for Airoha AN8855 are not yet supported. Devices like the Xiaomi AX3000T with an Airoha switch will have their switch LEDs powered off. This issue will be addressed in an upcoming OpenWrt SNAPSHOT and the OpenWrt 24.10 minor release.
  • 5GHz WiFi is non-functional on certain devices with ath10k chipsets. Affected models include the Phicomm K2T, TP-Link Archer C60 v3 and possibly others. For details, see issue #14541.

Full release notes and upgrade instructions are available at
https://openwrt.org/releases/24.10/notes-24.10.6

In particular, make sure to read the regressions and known issues before upgrading:
https://openwrt.org/releases/24.10/notes-24.10.6#known_issues

For a detailed list of all changes since 24.10.5, refer to
https://openwrt.org/releases/24.10/changelog-24.10.6

To download the 24.10.6 images, navigate to:
https://downloads.openwrt.org/releases/24.10.6/targets/
Use OpenWrt Firmware Selector to download:
https://firmware-selector.openwrt.org?version=24.10.6

As always, a big thank you goes to all our active package maintainers, testers, documenters and supporters.

Have fun!

The OpenWrt Community


To stay informed of new OpenWrt releases and security advisories, there
are new channels available:

  •  

v25.12.1

Hi,

The OpenWrt community is proud to announce the first service release of the OpenWrt 25.12 stable series.

Download firmware images using the OpenWrt Firmware Selector:

Download firmware images directly from our download servers:

Main changes between OpenWrt 25.12.0 and OpenWrt 25.12.1

Only the main changes are listed below. See the full changelog for details.

Security fixes

OpenWrt components (Trail of Bits audit, February 2026):

  • CVE-2026-30871: Stack buffer overflow in umdns DNS PTR query handling (HIGH)
  • CVE-2026-30872: Stack buffer overflow in umdns IPv6 reverse DNS lookup (HIGH)
  • CVE-2026-30873: Memory leak in jsonpath when processing strings, labels, and regexp tokens (LOW)
  • CVE-2026-30874: Command execution via PATH environment variable filter bypass in procd (LOW)

LuCI:

  • CVE-2026-32721: Possible XSS attack via malicious SSID in LuCI WiFi scan modal (HIGH)

Additional hardening from the same Trail of Bits audit (no CVE assigned):

  • odhcpd: fix stack buffer overflow in DHCPv6 Identity Association logging
  • procd: fix out-of-bounds write in cgroup path building and cgroup rule application

Device support

  • airoha: fix EN7581 PCIe initialization and add x2 (2-lane) link support β€” improves PCIe reliability and unlocks full bandwidth for affected devices
  • ath79: TP-Link RE355 v1, RE450 v1/v2: fix partition alignment to prevent configuration loss on sysupgrade
  • ipq40xx: Devolo Magic 2 WiFi next: enable device support
  • ipq40xx: re-enable MeshPoint.One target
  • ipq806x: AP3935: fix U-Boot NVMEM layout
  • lantiq: fix GPIO expander clock (gpio-stp-xway) β€” restores correct LED and GPIO behaviour on affected devices
  • lantiq: fix missing WAN MAC address assignment on some devices
  • mediatek: Cudy M3000: add support for hardware variant with Motorcomm YT8821 PHY (previously only the Realtek PHY variant was supported)
  • mediatek: TP-Link BE450: fix 10GbE PHY reset timing that caused intermittent boot stalls, add missing WLAN toggle button, fix reported memory size
  • microchipsw: Novarq Tactical 1000: fix swapped SFP I2C buses for ports 1 and 3 β€” fixes SFP EEPROM read failures
  • ramips: Keenetic KN-1910: fix sysupgrade functionality
  • realtek: RTL838x-based switches: fix non-functional reboot
  • treewide: Linksys devices: fix MAC address assignment

WiFi fixes and improvements

  • mac80211: fix crash triggered by Channel Switch Announcement (CSA) when AP VLAN interfaces are in use
  • mt76: add MT7990 firmware support (new MediaTek WiFi 7 chipset)
  • mt76: mt7915: fix power save mode handling
  • mt76: mt7921/MT7902: add MT7902e MCU and DMA layout support
  • mt76: mt7996/mt7992: fix crash in transmit path, fix out-of-bounds access during hardware restart, improve MLO/CSA and radar detection support
  • wifi-scripts: fix incorrect VHT160 capability advertisement β€” was incorrectly set on non-160 MHz AP configurations, degrading station upload speed (#22435)
  • wifi-scripts: fix malformed wpa_supplicant config when 802.1X EAP credentials (identity, password, certificates) contain spaces (#22212)

Web interface (LuCI) and system fixes

  • luci-mod-network: fix XSS vulnerability in WiFi scan modal (CVE-2026-32721)
  • ustream-ssl (OpenSSL variant): fix use-after-free crash causing uhttpd (the LuCI web server) to crash under high load (#19349)

Networking and system fixes

  • firewall4: set as the preferred firewall package over the legacy firewall package
  • iptables: prefer the nftables-backed variants (iptables-nft, ip6tables-nft) when iptables is pulled in as a dependency
  • kernel: CAKE QoS scheduler fixes β€” avoid unnecessary synchronization overhead when running without a rate limit, fix DiffServ rate scaling
  • kernel: SFP: improve Huawei MA5671a module support β€” module is now accessible even when no fiber is connected
  • odhcpd: fix segfault when disabling a DHCP interface, fix DHCPv4 lease tree corruption, fix truncated field in DHCPv6 lease queries, fix DNS search list padding
  • ppp: fix potential memory safety issue (undefined behavior in memcpy with overlapping buffers); remove the MRU limit patch for PPPoE connections (ppp-project/ppp#573)

Package manager (apk)

  • apk: update to version 3.0.5 with several OpenWrt-specific bug fixes
  • apk: add --force-reinstall option to reinstall already-installed packages without requiring a version change

Core component updates

  • apk: update from 3.0.2 to 3.0.5
  • jsonfilter: update from 2025-10-04 to 2026-03-16 (fixes CVE-2026-30873)
  • libubox: update from 2026-02-13 to 2026-03-13 (ABI version stabilized for 25.12 stable series)
  • Linux kernel: update from 6.12.71 to 6.12.74
  • odhcpd: update from 2026-01-19 to 2026-03-16
  • omcproxy: update from 2025-10-04 to 2026-03-07
  • procd: update from 2026-02-20 to 2026-03-14 (fixes CVE-2026-30874)
  • umdns: update from 2025-10-04 to 2026-02-06 (fixes CVE-2026-30871, CVE-2026-30872)
  • ustream-ssl: update from 2025-10-03 to 2026-03-01

Upgrading to 25.12.1

Upgrading from 24.10 to 25.12 should be transparent on most devices, as most configuration data has either remained the same or will be translated correctly on first boot by the package init scripts.
For upgrades within the OpenWrt 25.12 stable series, Attended Sysupgrade is also supported, which allows preserving the installed packages.

  • Sysupgrade from 23.05 or earlier to 25.12 is not officially supported.

  • Cron log level was fixed in busybox. system.@system[0].cronloglevel should be set to 7 for normal logging. 7 is the default now. If this option is not set, the default is used and no manual action is needed. fc0c518

  • Bananapi BPI-R4: Interface eth1 was renamed to sfp-lan or lan4, and interface eth2 was renamed to sfp-wan to match the labels. You have to upgrade without saving the configuration. cd8dcfe

  • TP-Link RE355 v1, RE450 v1 and RE450 v2: The partition layout and block size changed in this release to fix configuration loss on sysupgrade. Users upgrading from OpenWrt 25.12.0 or earlier must use sysupgrade -F to force the upgrade. The image must not exceed 5.875 MB (6016 KiB).

Known issues

  • Zyxel EX5601-T0: the WAN interface was renamed from eth1 to wan β€” check and update your network configuration after upgrading.
  • Pixel 10 phones have problems connecting to WPA3-protected WiFi 6 APs. #21486
  • 802.11r Fast Transition (FT) causes connection problems with some WiFi clients when WPA3 is used. #22200
  • SQM CAKE MQ (cake_mq): throughput may be unexpectedly low on some configurations after the scheduler fixes in this release. #22344
  • 160 MHz channel width cannot be configured. #22481

Full release notes and upgrade instructions are available at
https://openwrt.org/releases/25.12/notes-25.12.1

In particular, make sure to read the known issues before upgrading:
https://openwrt.org/releases/25.12/notes-25.12.1#known_issues

For a detailed list of all changes, refer to
https://openwrt.org/releases/25.12/changelog-25.12.1

To download the 25.12.1 images, navigate to:
https://downloads.openwrt.org/releases/25.12.1/targets/
Use OpenWrt Firmware Selector to download:
https://firmware-selector.openwrt.org?version=25.12.1

As always, a big thank you goes to all our active package maintainers, testers, documenters and supporters.

Have fun!

The OpenWrt Community


To stay informed of new OpenWrt releases and security advisories, there
are new channels available:

  •  
❌