Skip to content

Repository files navigation

WiFi Analyzer

A native macOS Wi-Fi scanner in the style of WiFi Explorer. SwiftUI + CoreWLAN, built without Xcode via Swift Package Manager.

Build & run

./build.sh
open "WiFi Analyzer.app"

On first launch macOS will ask for Location permission — grant it. Modern macOS redacts network names (SSIDs) and BSSIDs from Wi-Fi scans unless the app has Location access, so without it every network shows as hidden.

Features

  • Live scan (~every 4 s; the actual cadence is throttled by macOS) with a sortable table: BSSID, name, vendor, signal %, channel, width, band, mode (b/g/n/ac/ax/be), Wi-Fi generation, roaming support, and security.
  • AP grouping ("Group APs" toggle) — collapses the virtual BSSIDs a single physical radio broadcasts (the per-SSID MAC scheme used by Meraki, UniFi, eero, …) into one disclosure row with a BSS count, so an enterprise AP is one line instead of eight.
  • Roaming (k/v/r) column — which fast-roaming standards each BSS advertises: k (Neighbor Report / RRM), v (BSS Transition), r (Fast Transition).
  • Filter bar: All / 2.4 GHz / 5 GHz, Open / Secure, and free-text search.
  • Network Details — signal quality, SNR, max PHY rate estimate, security and encryption derived from the beacon's RSN element.
  • Signal Strength — 5-minute signal history chart for all networks, with the selected network highlighted.
  • Spectrum 2.4 / 5 GHz — channel-occupancy trapezoids per BSS (ISM + UNII-1…4 sections). Click a trapezoid to select that network (synced with the table) and dim the rest; overlapping shapes resolve to the smallest one under the cursor, and clicking empty space clears the selection.
  • Waterfall — spectrogram of the last ~10 minutes: one row per scan (newest at top), thermal color = strongest signal occupying each 2.5 MHz slice, with the selected network's channel span outlined down the time axis. Click a column to select the strongest network on that frequency; click empty space to clear. Spots intermittent interferers and channel changes.
  • Advanced Details — decoded 802.11 information elements from the raw beacon (rates, country, BSS load, HT/VHT capabilities, RSN ciphers/AKMs, Mobility Domain, RNR, vendor-specific, and more).
  • Roaming — session log of the Mac's own association changes: connects, roams between BSSIDs, SSID switches, and drops, each with the channel/band transition, signal at handoff, dwell time on the previous AP, and whether the target offered 802.11r. For diagnosing sticky-client and mesh handoff issues.
  • Export — File ▸ Export Scan as CSV (⌘E) or JSON (⇧⌘E): the current scan with raw dBm, SNR, roaming flags, and BSS-load utilization, for site-survey documentation.
  • Site Report — File ▸ Export Site Report as PDF (⌘R) or self-contained HTML (⇧⌘R): a client-ready survey document with summary stat tiles, rule-based findings (congestion, missing 802.11r, open/legacy security, DFS usage, channel recommendations), the networks-by-AP inventory, per-channel analysis with spectrum figure, SSID roaming audit, association log, and waterfall figure. Fully deterministic — no AI, works offline.
  • Utilization column — QBSS channel utilization straight from beacons, and a View ▸ Show Signal in dBm toggle for raw dBm instead of percentages.

Vendor names (OUI database)

A built-in table covers common vendors (eero, Ubiquiti, TP-Link, Meraki, Aruba, Ruckus, Apple, …). For full coverage, use File ▸ Download Vendor Database (IEEE OUI) — it fetches the ~6.5 MB registry (~40k prefixes) into Application Support and reloads the lookup immediately. No rebuild needed; it persists across launches.

(You can also drop an IEEE oui.txt into Resources/ before ./build.sh to bundle it with the app.)

Known limitations

  • macOS throttles background scan frequency; samples may arrive slower than 4 s.
  • Location permission is required for SSIDs/BSSIDs (see above).
  • Max Rate is an estimate from advertised capabilities (streams × width × PHY), not a measurement.
  • 6 GHz networks appear in the table but the spectrum view only draws the 2.4 and 5 GHz bands.
  • Roam detection is sampled at the scan interval, so a roam and an immediate roam-back inside one ~4 s window could be missed. Roaming reflects only the Mac's own interface, not other clients.

About

Native macOS WiFi analyzer built with SwiftUI and CoreWLAN — spectrum view, waterfall spectrogram, roam tracking, and client-ready site reports.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages