wifi-heatmapper measures Wi-Fi signal strength and network throughput where you stand, and draws heat maps of the results on your floor plan. Walk around with a laptop, click where you are, and see which rooms have a weak signal, where a mesh node or extender would help, and whether a slow connection is really the Wi-Fi's fault.
Runs on macOS, Windows and Linux (and in Docker on Linux).
Everything stays on your computer: surveys are plain JSON files in data/surveys/.
Green is good. The scale runs green, turquoise, blue for acceptable signal, then yellow and red where it gets poor.
You need Node.js 20 or newer (node --version).
git clone https://github.com/hnykda/wifi-heatmapper.git
cd wifi-heatmapper
npm install
npm run devOpen http://localhost:3000 and:
- Settings. Pick the built-in floor plan or upload your own (a photo of a sketch is fine, see the FAQ). On macOS and Linux enter your sudo password: the OS needs it to read the signal. It is never saved.
- Floor plan. Stand somewhere, click that spot. Signal strength (and throughput, if you set up iperf3) is measured and a coloured dot appears. Do this in every room, twice in big ones.
- Heat maps. Adjust the radius until the spots merge. Download the map.
- Survey points. Check, switch off or delete individual measurements, or export everything as CSV.
Linux needs iw and nmcli installed and on PATH.
Signal strength alone tells you where the Wi-Fi is weak. Throughput tells you how fast it actually is.
- Install
iperf3on the laptop (iperf3 --versionshould work). Note: tools callediperforiperf2are different and incompatible. - Install
iperf3on another computer on your network, wired if possible (a desktop, a Raspberry Pi, a NAS), and start it withiperf3 -s. - In Settings, enter that computer's address as the iperf3 server.
Each measurement then also runs TCP and UDP tests in both directions. The commands can be changed under Settings if you need other options.
npm run dev:mockMock mode fakes the measurements so you can explore the app, or work on it, on any machine without sudo, iperf3 or even a Wi-Fi card. The header shows a "Mock data" badge while it is on.
The container has to reach the host's Wi-Fi adapter, which is only possible on Linux. On macOS and Windows run the app directly.
docker build -t wifi-heatmapper .
docker run --net=host --privileged \
-v ./datas:/app/data \
-v /var/run/dbus:/var/run/dbus \
wifi-heatmapperSurveys and floor plans are kept in ./datas on the host. NetworkManager
inside the container talks to the host over D-Bus, hence the second mount.
No sudo password is needed in Docker.
- User interface, tab by tab
- Theory of operation: which commands run on each OS, how the heat map is computed
- FAQ: floor plans,
<redacted>SSIDs on macOS, and more - Changelog
Open an issue. Include the details from the About dialog (the "i" button in the header) and, if you can, a log:
LOG_LEVEL=2 npm run dev | tee out.logPull requests are welcome. Read CONTRIBUTING.md for the setup, the test suites and what a PR needs. Every PR needs evidence it was tested: automated tests, or a screenshot and a note on which OS you tried it.
Inspired by python-wifi-survey-heatmap. @hnykda started this version to get heat maps on a Mac with a browser UI; @richb-hanover built the four-tab interface and much of the platform support. The heat map renderer uses WebGL inverse-distance weighting contributed in #35.
An early screen recording shows the original single-page version (with the opposite colour scheme).

