Show HN: wfb-link, a userspace WiFiBroadcast radio stack for macOS(github.com)
github.com
Show HN: wfb-link, a userspace WiFiBroadcast radio stack for macOS
https://github.com/arc-edge/wfb-link/
3 comments
Super cool approach. What ended up being the hardest part of bypassing macOS’s lack of monitor mode—was it USB throughput constraints or getting reliable timing for TX/RX?
Reliable timing across TX/RX was by far the biggest hurdle. Raw USB access and overall throughput really hasn't been as big of an issue as I thought it would be.
This is very cool. I'm excited to see where this goes.
macOS doesn't expose the monitor-mode / packet-injection path that WFB systems normally rely on. I really didn't like the idea of needing a separate linux box just to talk WFB to other edge devices, like drones. This talks to the ALFA AWUS036ACH as a USB peripheral directly, initializes the RTL8812AU, submits raw 802.11 WFB frames over bulk OUT, receives frames over bulk IN, and bridges them to WFB-NG’s distributor/aggregator UDP protocols.
Basically, this is what's working (you can see more detail in the readme):
- native macOS userspace RTL8812AU bring-up
- TX/RX of WFB datagrams
- production-ish service runtime
- macOS utun bridge helper (if you need an IP-based link)
- RF diagnostics, telemetry, LED heartbeat, TDD airtime controls
There's a GitHub alpha release with arm64 macOS binaries
This is definitely still alpha. The direct-radio path is currently macOS-focused and tested with ALFA AWUS036ACH adapters on both sides (the other side is a Raspberry Pi 5 running Bookworm). macOS 26 works through IOUSBHost as libusb is not reliable there. Linux should still use native WFB-NG + rtl88xxau monitor mode rather than this USB bridge. Long-range RF quality and calibration work are ongoing. So far, some short range profiles are showing pretty good results.
I’m sharing early because getting WFB-like radio links working from a Mac seemed unlikely when I started, and the path turned out to be more interesting than expected.
My goal is for this to be cross-platform as-needed. Next up is an attempt at Android support via USB-OTG. We'll see how that goes.