Repository navigation
Releases
MtkWlanNative 0.4.17
The kext stops assuming an MT7925. With MtkWlan 0.13.0 it asks the driver what the chip is and reports that to macOS. On an MT7925 macOS sees exactly what it saw with 0.4.16, so there is no hurry to update; the change matters for other MT792x chips later.
- The hardware name in System Information is "MediaTek" plus the chip name from the driver.
- The stream count in the HT and VHT maps, the band of each supported channel and the band of the current channel come from the driver.
- With an older MtkWlan (0.12.x and before) the kext assumes what it did before. That path was booted once after the release, by holding the kext to the older API with
mtknativeops=5against MtkWlan 0.13.0: same channel list, name and link. A real 0.12.x driver under it was not booted, so update both kexts together. - New properties
MtkNativeCoreOpsandMtkNativeChip; boot-argmtknativeops=Nstops at an older API version, for tests. - Not yet: 6 GHz channels and a 160 MHz link are not shown. No driver offers either today.
Same macOS builds as 0.4.16: 26.7.1 (25G241), 26.7.2 (25G332), 26.7.3 (25G342) and the 26.7.3 developer beta (25G416).
Booted on 25G416 on a Legion 5 15IAX10 with MtkWlan 0.13.0 and boot-args mtkfe=native mtknativeif=1: MtkNativeCoreOps 6, the supported channel list and the hardware name identical to 0.4.16, macOS joined the saved network at boot, wdutil info shows 5g44/80, 11ac, 866 Mbps.
Both kexts in one download: mt7925-wifi-bundle-0.13.0+0.4.17.zip.
sha256 of MtkWlanNative.kext/Contents/MacOS/MtkWlanNative: 8113c3a8dd676cc45d61a1ca4b4fdd59aabd7268bffa45b2cbb0c7da1bf5d28d
MtkWlanNative 0.4.16
Adds the macOS 26.7.3 developer beta (25G416) to the builds the kext loads on. No code change from 0.4.15.
25G416 has a newer kernel (xnu-12377.161.15.702.13~1) than 26.7.2 and the 26.7.3 release, which share one. The kext matches a build by its kernel version, so 0.4.15 stayed out on the beta: MtkWlan came up with its Ethernet front end and macOS joined nothing. If you are on 26.7.1 (25G241), 26.7.2 (25G332) or the 26.7.3 release (25G342), 0.4.15 already works and you don't need this.
The class sizes, vtables and request slots of 25G416 are the same as before, so the headers in abi/25G416/ differ from 25G332's only in the build name.
Booted on 25G416 on a Legion 5 15IAX10 with MtkWlan 0.12.1 and boot-args mtkfe=native mtknativeif=1: the native interface came up, macOS joined the saved network at boot, wdutil info shows 5g44/80, 11ac, 866 Mbps.
If a future macOS build is not on the list yet, sudo mtkwifi join brings your saved network back on the Ethernet front end.
Both kexts in one download: mt7925-wifi-bundle-0.12.1+0.4.16.zip.
sha256 of MtkWlanNative.kext/Contents/MacOS/MtkWlanNative: 719768fc296468e472e632426805842ade12811200a12fd31d82dceb2bd4adfa
MtkWlanNative 0.4.15
macOS now gets the link quality of the Wi-Fi link. Before this release State:/Network/Interface/en1/LinkQuality was never set, so apsd treated the link as bad and Apple push never connected over Wi-Fi. That kept iMessage, FaceTime and Handoff from working on this card. 0.4.15 reports it through setLQM once a second.
Also in this release:
- Every scan result now carries its network's real width, built from the HT and VHT Operation elements, which fixes #1.
- The country code is the access point's Country element, where it used to be XZ.
- The extended BSS info now has HT and VHT maps.
Booted on 26.7.2 (25G332) on the Legion 5 with MtkWlan 0.12.1:
LinkQuality : 100is set for en1.- apsd logs
isBadLQ? NOand received a push. wdutil infoshows Country Code US and 5g108/80.- A scan lists every network at its 80 MHz width.
Full notes are in CHANGELOG.md.
MtkWlanNative.kext sha256 58be03d84c5fa520b67738278aa3dac71654e57accbdb9d618d0e0a8f600801d, built for ABI 25G241 and 25G332 (macOS 26.7.1 and 26.7.2).
MtkWlanNative 0.4.14
Adds macOS 26.7.2 (25G332). Its IO80211 and IOSkywalk class sizes, vtables and request slots are identical to 25G241's (tools/kcabi compare, verdict unchanged), so the same binary serves both builds; abi/25G332/ differs from abi/25G241/ only in the build name. The kext still refuses any build it does not list, and MtkWlan then keeps its Ethernet port.
Booted on 26.7.2 (25G332) on the Legion 5 with MtkWlan 0.12.1: the native interface came up at boot and joined the saved network on its own. Full notes in CHANGELOG.md.
MtkWlanNative.kext sha256 da575c6fbb215bbd8e8f6076f47f877ccffebe8d3a4487d5a007944df6894ce2, built for ABI 25G241 and 25G332 (macOS 26.7.1 and 26.7.2).
MtkWlanNative 0.4.13
The Wi-Fi details in macOS are real now (#1). Needs MtkWlan 0.12.1 for the rate fields; older cores fall back to the old answers.
wdutil info on the author's Legion 5 (VHT80 access point, channel 100):
PHY Mode : 11ac
MCS Index : 9
Guard Interval : 400
NSS : 2
Channel : 5g100/80
Tx Rate : 866.0 Mbps
0.4.11 showed 20 MHz and a fixed 54 Mbps.
- getMCS, getMCS_VHT and getGUARD_INTERVAL answered, with the layouts AppleBCMWLANCore uses on 25G241; the current channel carries its width and DFS flag.
- The country code macOS sets goes to the core.
- A private Wi-Fi address the core refuses is tried again every 2 s instead of once, so a network should no longer look dead until Private Wi-Fi Address is turned off.
- Up to 128 networks in the Wi-Fi menu.
Thanks to f0xeri's qwz-macos for showing which requests Tahoe makes before it fills these fields. Full notes in CHANGELOG.md.
MtkWlanNative.kext sha256 ae75e20aba3c6949fa770613a612d9fb203a7b42ff1bb633a547d03911675f9f, built for ABI 25G241 (macOS 26.7.1).
MtkWlanNative 0.4.11
Faster upload: the Tx queues restart on the next 2 ms tick after the core frees a slot, instead of waiting for the 10 ms control poll that capped upload near 190 Mbit/s. Tx completion also moves its pending list once per tick instead of once per packet.
Tested on the author's laptop (macOS 26.7.1 25G241) with MtkWlan 0.11.3: about 410 Mbit/s of local UDP on VHT 80 MHz 2x2, gateway ping 3-4 ms. The release binary is the tested one (sha256 starts a69d78f4f576).
MtkWlanNative 0.4.10
Claims the MtkWlan core at the end of probe (needs MtkWlan 0.11.1), so a slow Apple interface start can no longer let the Ethernet front end win and leave the Wi-Fi menu empty until the next reboot. Every place start gives up now declines, so the fallback still comes at once when the front end cannot run. Debug boot-arg mtknativedelay=<ms> (max 60000) holds the interface start back for testing.
macOS 26.7.1 (25G241) only. Tested on the author's laptop with a forced 25 s delay: bound after 24.2 s, no fallback, lease, Wi-Fi menu. The release binary is the tested one (sha256 starts b5002eeb2b48).
MtkWlanNative 0.4.9
First stable release of the native Wi-Fi front end for the MediaTek MT7925 on macOS Tahoe 26.7.1 (25G241). With MtkWlan 0.11.0 and boot-args mtkfe=native mtknativeif=1: the Wi-Fi menu lists networks, macOS runs the scans and the joins, saves the network, auto-joins at boot, applies a private address per network, DHCP and a real default route; the link held for ten quiet minutes with zero leaves on the author's laptop. Since 0.4.5: the join lands on the access point macOS chose (0.4.6), CoreCapture pipes started after the core binding (0.4.4), beacon counter and link quality update events for the Family's missed-beacons check (0.4.7 to 0.4.9). Open networks tested; WPA2-PSK untested on air; no roaming, no sleep, no AWDL. Binary sha256 starts de1aff051348. The README says how to report results from another MediaTek card.
MtkWlanNative 0.4.5
First public build of the native front end. Needs MtkWlan 0.11.0 and macOS 26.7.1 (25G241); boot-args mtkfe=native mtknativeif=1. 0.4.4 passed the full macOS-driven join on the author's laptop (auto-join at boot, DHCP, real default route); 0.4.5 adds the candidate-BSSID fix for the leave/rejoin loop and is marked pre-release until that boot test is in. Binary sha256 starts 33824bcef337. See the README for what works, what does not, and how to report results from another MediaTek card.