finds.dev

open-sdr/openwifi

open-source IEEE 802.11 WiFi baseband FPGA (chip) design: driver, software

View on GitHub

★ 4,854CAGPL-3.0updated Oct 2026

// the take

openwifi is a full open-source 802.11a/g/n PHY and MAC implemented in FPGA plus a Linux mac80211 driver, turning a Zynq+AD9361 SDR board into a real WiFi NIC. It's aimed at wireless researchers doing protocol experiments, CSI/sensing work, or packet-level fuzzing, not at anyone who just wants a WiFi card.

The low MAC (DCF/CSMA-CA, SIFS/DIFS timing) actually runs in FPGA hardware with 10us SIFS, which is the part most SDR WiFi projects fake in software and get wrong. Because it registers as a real mac80211 device, standard Linux tools (iw, hostapd, wpa_supplicant, iwconfig) work against it unmodified. It exposes things commercial chips never do: real-time CSI extraction, 802.11 packet injection/fuzzing, and CSI-based radar/sensing on the same hardware. Board support is wide, covering ZC706/ZCU102 reference boards down to cheap antsdr/Pluto-based variants.

Useful modern features (802.11ax, OFDMA, RFSoC, wider bandwidths) are explicitly withheld behind a paid subscription; the open repo is capped at 11a/g/n and 20MHz. The quick-start itself warns that the Viterbi decoder halts after about two hours because it runs under a Xilinx evaluation license, requiring a reload or power-cycle unless you buy a Vivado license for the boards that need one. It's OFDM-only with no 802.11b compatibility, so connecting ordinary client devices needs a patched wpa_supplicant and careful hostapd config to suppress 11b rates. This isn't a library you drop in — getting anything running means Vivado/Vitis toolchains, device-tree and kernel patching, and building SD card images, which is a real bring-up project on its own.

We read the README, the directory tree and a key source file in October 2026. Nobody pays to be listed. How we judge →

// at a glance

Stars
4,854
Forks
826
Language
C
License
AGPL-3.0
Last commit
22 Oct 2026

// nearby

If openwifi isn't quite it.

All repos →