OpenWrt 25.12.0-rc3 - Release Candidate

Hi,

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

Download firmware images using the OpenWrt Firmware Selector:

Download firmware images directly from our download servers:

Please test this version

This is not the final version, this is a test version. Please report problems and bugs in our issue tracker.

Highlights in OpenWrt 25.12

OpenWrt 25.12.0-rc3 incorporates over 4300 commits since branching the previous OpenWrt 24.10 release and has been under development for over one year.

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

General changes

The hardware requirements did not change significantly, most devices supported by OpenWrt 24.10 should also work with OpenWrt 25.12.

Switch package manager from opkg to apk

OpenWrt has transitioned from the traditional opkg package manager to apk (Alpine Package Keeper).

This change brings several advantages:

  • apk is still maintained, the OpenWrt opkg fork was not maintained any more.

apk supports most features of opkg. Only very few package names changed. The command line arguments of apk are different from the command line arguments of opkg.

For users migrating existing systems, an official opkg to apk cheatsheet is available to ease the transition and map common workflows.

Integration of attended sysupgrade

The attended sysupgrade LuCI application is now installed by default.

ASU allows devices to:

  • Upgrade to new OpenWrt firmware versions
  • Automatically rebuild firmware images with all currently installed packages
  • Preserve system configuration during upgrades

This dramatically simplifies upgrades: with just a few clicks in LuCI and a short wait, a custom firmware image is built and installed without manual intervention.

Shell history is preserved

Shell command history is now preserved across sessions by storing it in a RAM-backed filesystem.

Benefits:

  • Command history is no longer lost between logins
  • No unnecessary writes to flash storage by default

For users who prefer persistent history storage, this behavior can be changed by editing: /etc/profile.d/busybox-history-file.sh

:warning: Note: Storing history on flash will increase write cycles and may impact flash endurance over time.

Integration of video feed

The OpenWrt video feed with Qt5 and UI applications is integrated by default.

Wi-Fi scripts in ucode

The wifi scripts were rewritten in ucode.

Target changes

  • Extend realtek target with support for more switch SoCs like 10G Ethernet switches.
  • Extend qualcommax target with support for ipq50xx and ipq60xx SoCs.
  • Added siflower target for Siflower SF21A6826/SF21H8898 SoCs
  • Added sunxi/arm926ejs subtarget for Allwinner F1C100/200s SoCs

Many new devices added

OpenWrt 25.12 supports over 2180 devices. Support for over 160 new devices was added in addition to the device support by OpenWrt 24.10.

Core components update

Core components have the following versions in 25.12.0-rc3:

  • Updated toolchain:
    • musl libc 1.2.5
    • glibc 2.41
    • gcc 14.3.0
    • binutils 2.44
  • Updated Linux kernel
    • 6.12.66 for all targets
  • main packages:
    • cfg80211/mac80211 from kernel 6.18.0
    • hostapd master snapshot from August 2025
    • dnsmasq 2.91
    • dropbear 2025.89
    • busybox 1.37.0

In addition to the listed applications, many others were also updated.

Upgrading to 25.12

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.

  • Sysupgrade from 23.05 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.

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

Scratch installs/upgrades

If you wish to start from scratch (always the safest, but also the most work), simply download the pre-built image from the downloads site or from the Firmware Selector to your device. Make sure to create and save a backup, then install the image using sysupgrade -n /tmp/firmware.bin or the LuCI Backup/Flash Firmware, being sure to set "Keep settings and retain the current configuration" to its off position. Restore or reconstruct your configuration using the contents of the backup as a template.

Attended Sysupgrade options

Attended Sysupgrade (ASU) allows you to build a custom image that retains all of your installed packages and their configuration transparently. You need to use one of the three ASU clients that interface with the ASU server to produce this custom image:

  • Firmware Selector - an online builder that requires you to manually supply it with the packages you wish to have installed. This package list is sent to the ASU server, and a new custom device image is created containing those packages. You may then download and install the image in LuCI Backup/Flash Firmware, but for this you would enable "Keep settings..."
  • Luci Attended Sysupgrade - the web interface to the ASU server. This tool allows you to choose a new OpenWrt version, then collects the names of the packages on your device and sends them up to the ASU server. LuCI ASU then downloads the created image directly to your device and allows you to install it, without having to do any of the bookkeeping tasks involved with using the Firmware Selector.
  • owut - a command line package that does the same job as LuCI ASU, but provides more diagnostics and better visibility into what's happening at the various steps before and during the build process.

Both the LuCI ASU app and owut are optional packages in 24.10, so if you have not installed them, they won't be there by default. Use either the LuCI Package Manager to install them, or you can do it from the command line with opkg:

$ opkg update
$ opkg install luci-app-attendedsysupgrade
$ opkg install owut

Note that you can install one or the other, or both together, they are completely independent packages.

Upgrades with Firmware Selector

The Firmware Selector does an excellent job of searching through the thousands of available device configurations and getting you to the right place. But, some devices have several variants and possibly different image formats, so if you're unsure about which one you need or which device you're dealing with or anything else, go to the |Firmware Selector support thread and ask away.

Upgrades with LuCI Attended Sysupgrade

The LuCI web interface should be fairly self explanatory. Since you have fairly limited options there that should be pretty obvious, but if anything is unclear or you're unsure about something, go to the LuCI Attended Sysupgrade support thread and ask.

Upgrades with owut

If you choose to use owut, the fact that it's a command line program means you'll need a little more explanation regarding best practices. In any situation, it's always safe to do a check to see what's going on.

$ owut check --verbose --version-to 25.12
... a lot of output ...

This check should show you all the details of what this upgrade entails with regards to the packages available, and will point out any issues with package versions and so on.

Assuming the results of the check look good, you can simply do an upgrade next.

$ owut upgrade --verbose --version-to 25.12
... even more output ...

If you are unsure of anything you see in the check, during the upgrade, or simply have questions, jump on over to the owut support thread on the forum and ask.

Known issues

  • Users of Zyxel EX5601-T0 devices need to check their WAN interfaces as port was renamed from eth1 to wan.
  • Microchip LAN969x devices are missing the network driver, so no network ports work.

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

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

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

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

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:

17 Likes

Pixel 10 still does not connect when using

option encryption 'sae'

and

option encryption 'sae-mixed'.

Pixel 8 and Pixel tablets are fine. I tried to watch

adb logcat | findstr /i "wi-fi" on my Win device, and

logread -f

and both were quiet. This is on a fresh flash of an OpenWRT ONE router. I have posted on Github as well, apologies if this is a dupe. Password was triple checked. This was also on issue on rc2.

Thanks.

ASU upgrades have been tested and all tests ran seamlessly for tested devices and profiles. If you encounter issues with ASU upgrades, please report them on the respective client threads:

There is currently an issue with LuCI's System -> Overview page, see OpenWrt 25.12.0-rc2 - Release Candidate - #200 by aLiArLa for the details and the subsequent 3-4 posts for fixes. This should go away in a day or less.

EDIT
The fix is in, just upgrade that evil package (note that use of apk upgrade is generally dangerous, but it is safe for this package this one time):

apk update
apk upgrade luci-app-attendedsysupgrade

11 Likes

Upgraded a Netgear R7450 using Luci attended sysupgrade rc2 to rc3. Working well with Xfinity cable, thank you!

Asus BT8 updates fine. Known issues remain.

This release made it clear where the /62 addresses were coming from in RC2 and in this release there is a new page for Prefix Delegation for delegating to routers under the LAN DHCP settings. This defaults to the /62s and its off by default, so no more odd addresses.

What I still don’t understand is why Linux machines are assigned such addresses but then don’t seemingly take them up. I think as before I just don’t understand something about how this is meant to work and where I should see these addresses when assigned and what they can then assign from. What has been done resolves the issue I had in RC2 anyway and this feature defaults off instead of on so should no longer show up for those not doing their own internal prefix delegation.

2 Likes

mediatek/filogic image builder has no profiles in make info in rc3. rc2 seems OK. Are other image builders the same? :eyes:

As there is nothing in the changelog that mentions a fix for simultaneous AP+STA usage (e.g., for a WDS repeater), I won't test this RC.

1 Like

targets / ramips / mt7621 /

Details for package luci-app-samba4

  • Version: 26.021.80161~766b3b0

  • Size: ~5.38 KiB installed

  • Dependencies:

    • luci-base (749.90 KiB) Installed

    • ~skip~

    • samba4-server Not available

It seems to be absent from all MIPS targets, but is present in I386 and ARM.

It works for me, do you by any chance have spaces in the path to the directory where imagebuilder is extracted to?

It has profiles quite normally, I think.

 2001  wget https://downloads.openwrt.org/releases/25.12.0-rc3/targets/mediatek/filogic/openwrt-imagebuilder-25.12.0-rc3-mediatek-filogic.Linux-x86_64.tar.zst
 2002  tar -xvf openwrt-imagebuilder-25.12.0-rc3-mediatek-filogic.Linux-x86_64.tar.zst 
 2003  cd openwrt-imagebuilder-25.12.0-rc3-mediatek-filogic.Linux-x86_64/

perus@ub2510:/OpenWrt/koe/openwrt-imagebuilder-25.12.0-rc3-mediatek-filogic.Linux-x86_64$ make info | head -n 20
make: TMPDIR value /OpenWrt/koe/openwrt-imagebuilder-25.12.0-rc3-mediatek-filogic.Linux-x86_64/tmp: No such file or directory
make: using default temporary directory '/tmp'
Current Target: "mediatek/filogic"
Current Architecture: "aarch64"
Current Revision: "r32486-30527a4c34"
Default Packages: base-files ca-bundle dropbear fstools libc libgcc libustream-mbedtls logd mtd netifd uci uclient-fetch urandom-seed urngd kmod-leds-gpio kmod-gpio-button-hotplug fitblk kmod-crypto-hw-safexcel wpad-basic-mbedtls uboot-envtools procd-ujail dnsmasq firewall4 nftables kmod-nft-offload odhcp6c odhcpd-ipv6only ppp ppp-mod-pppoe apk-mbedtls
Available Profiles:

abt_asr3000:
    ABT ASR3000
    Packages: kmod-mt7915e kmod-mt7981-firmware mt7981-wo-firmware
    hasImageMetadata: 1
    SupportedDevices: abt,asr3000
acelink_ew-7886cax:
    Acelink EW-7886CAX
    Packages: kmod-mt7915e kmod-mt7986-firmware mt7986-wo-firmware
    hasImageMetadata: 1
    SupportedDevices: acelink,ew-7886cax
acer_predator-w6:
    Acer Predator Connect W6
    Packages: kmod-usb3 kmod-mt7915e kmod-mt7916-firmware kmod-mt7986-firmware mt7986-wo-firmware e2fsprogs f2fsck mkf2fs
    hasImageMetadata: 1

Yes,
according to the faillogs, it seems to fail to compile to at least some MIPS architectures. Maybe for some Kerberos compilation related reasons.

Waf: Leaving directory `/builder/shared-workdir/build/sdk/build_dir/target-mips_24kc_musl/samba-4.22.3/bin/default'
Build failed
 -> task in 'krb5' failed with exit status 1 (run with -v to display more information)
make[3]: *** [Makefile:456: /builder/shared-workdir/build/sdk/build_dir/target-mips_24kc_musl/samba-4.22.3/.built] Error 1

Asus TUF AX6000 as DAP, using DAWN, wpad-mbedtls, 160 MHz (channel 116, CH), and so on.

OpenWrt Imagebuilder worked smoothly, upgrade from 25.12.0-rc2 to 25.12.0-rc3 worked smoothly.

It seems the device is working, however, the overview page does not open, there is big red field with some error about “ui”, other views seem to work, at least the ones I briefly checked (interfaces, wireless, flash firmware). Hope that helps :blush:

So I went back to 25.12.0-rc2 which is working properly. Will wait until 25.12.0-rc4 (or 25.12.0) (or maybe it’s a package error, I may rebuild in a few days again and report back).

As a “stability” comparison I will keep the second identical DAP on 24.10.5.

Many thanks !

Cheers, Blinton.

Upgraded a NanopiR5S using Luci attended sysupgrade rc2 to rc3. Working well, thank you!

attended sysupgrade on Xiaomi Redmi Router AX6S produce error on system→overview page. Everything else seems fine.

Unexpected string
  in http://192.168.2.1/luci-static/resources/view/status/include/11_upgrades.js?v=26.023.12878~01801c0-1768954854:?
  at http://192.168.2.1/luci-static/resources/luci.js?v=26.023.12878~01801c0-1768954854:173:29
  at async Promise.all (index 1)

I also have this on a Cudy WR3000S, and strangely not on a Cudy WR3000H.

EDIT : I used owut to upgrade some packages on the WR3000H (still with rc3) and the issue appeared.

My router wasn’t able to obtain an IPV4 lease from my ISP with rc1 or rc2 installed. This is fixed now on rc3. Thank you devs!

On Xiaomi AX6000 U-Boot get the following when upgrading Luci

SyntaxError

unexpected token: string literal
  in http://192.168.1.1/luci-static/resources/view/status/include/11_upgrades.js?v=26.023.12878~01801c0-1769246438:1
  at require/compileClass/< (http://192.168.1.1/luci-static/resources/luci.js?v=26.023.12878~01801c0-1769246438:173:29)

Since I can no longer reply directly in the original thread, I’m restating the full details here:

  • Router model: Arcadyan AW1000

  • Firmware where the issue occurs: 24.12.0-rc3

  • The issue also occurs with the previously mentioned firmware versions (24.10.5 and 25.12.0-rc2).

  • In 24.10.4, the 5 GHz radio was working correctly.

I tested a completely clean installation on 24.12.0-rc3 and the other listed firmware versions.
The steps performed were:

  1. Set the correct system time.

  2. Set the router password.

  3. Change the LAN IP address.

  4. Using radio0 (5 GHz), scan for available networks.

  5. Select a network, enter the password, and apply the changes.

After a few seconds, access to the router is completely lost, and a factory reset is required to recover it.

The issue happens even with a minimal configuration and without restoring any backup.

1 Like

this problem has been around a while.
This thread for the fix