Esp32sim Emulates WiFi on Chips Where Espressif's QEMU Fork Has None
Software / news
Esp32sim Emulates WiFi on Chips Where Espressif's QEMU Fork Has None
The Rust emulator runs unmodified ESP32-S3, C3 and C6 firmware in a browser tab, and its README concedes that its own hardware comparison is not cycle-by-cycle agreement.

Esp32sim, an MIT-licensed emulator written in Rust, lists WiFi on the ESP32-S3 and ESP32-C3, two chips for which Espressif's own QEMU documentation marks WiFi and Bluetooth as unsupported. The project's README says it boots the real mask ROM, the real second-stage bootloader and an unmodified application image, and that a build compiled to WebAssembly runs in a browser worker.
It reached Hacker News as a Show HN post with 111 points. The repository shows 133 stars, 12 forks and 1,469 commits. Copyright is held by Joakim Eriksson, Alice and Mattia Fiumara, according to the README. This account rests on the README, the issue tracker and Espressif's documentation. The emulator was not run.
Which chips esp32sim covers, and where the QEMU fork stops
The README describes "instruction-level emulation of four ESP32 SoCs, across both of Espressif's CPU architectures": the Xtensa-based S3 and classic ESP32, and the RISC-V C3 and C6. Espressif's QEMU documentation lists ESP32, ESP32-S3 and ESP32-C3, and states that Espressif does not provide support for QEMU. The repository itself is described only as a "fork of QEMU with Espressif patches" under GPL-2.0.
| Chip | esp32sim status (README) | Espressif QEMU WiFi |
|---|---|---|
| ESP32-S3 | Mature; two Xtensa LX7 cores at 240 MHz | Not supported |
| ESP32-C3 | Draft; one RISC-V core at 160 MHz | Not supported |
| ESP32-C6 | Draft; one RISC-V core at 160 MHz | Chip not listed |
| ESP32 (classic) | GPIO, UART and timers | Not supported |
The QEMU page also lists USB, I2C, I2S and the GPIO matrix as missing on all three of its chips. Its substitute for networking is an OpenCores Ethernet controller, which the page calls "not a real hardware peripheral."
How the WiFi emulation works
Esp32sim runs the unmodified Espressif WiFi blob against a virtual access point. On the S3 the README lists WPA2, DHCP, DNS, NTP and NAT. With --net nat, the default, guest TCP and UDP traffic leaves through ordinary host sockets, so no root access or tun device is needed.
The browser build has no NAT, because browsers have no raw sockets. On the C3 and C6 the README lists scan, WPA2, DHCP and NAT for one station only, and the C6 needs --stub bb_init=0 for radio runs because the PHY's baseband calibration expects analog hardware.
What the accuracy figures do and do not show
The README reports decoder checks of 977,000 instructions on the S3, 161,000 on the C3 and 126,000 on the C6, all with zero mismatches. Against real hardware, 205 of 208 console lines matched on the C3 and 203 of 204 on the C6. The S3 was compared by JTAG lock-step: 3,000 steps from reset on the Atech board with no divergences.
The README then says the comparison "is not uninterrupted cycle-by-cycle agreement", because it normalises window exceptions and resynchronises delay loops. It adds that continuous integration runs sampled corpora and golden outputs, not the full listings.

Speed is the other limit. The S3 runs at roughly 150 to 240 million instructions a second, according to the README, and on the Pocket Synth firmware it reaches about 70 million where 240 million is needed, so a full display redraw lags about 0.3 seconds. The C3 and C6 use a plain interpreter without a JIT.
Six open issues, one about a reboot
The issue tracker lists six open issues. Issue 220, filed Oct. 11, 2026, reports that the Xtensa CCOUNT cycle counter is not cleared on a guest reboot, so the second boot's early log timestamps continue from the first. Issues 214 and 215, both filed Oct. 9, ask for ESP8266 and ESP32-P4 support, the chip in the photograph above. Issue 189, filed Oct. 5, opens the discussion on full BLE emulation, starting with the C3.
For anyone testing firmware that joins a network, the gap is concrete: the README's network stack exists, and Espressif's documented alternative is Ethernet. Bluetooth remains absent from both until issue 189 produces code. The related Llmspeed simulator and the Eufy HomeBase 2 teardown cover the other end of the same problem, which is what firmware does on hardware nobody has in front of them.
Sources
More in Software
- 01Sphinx, a Git Hook, Quizzes Developers on Agent-Written Code Before a Push Goes ThroughThe MIT-licensed 0.1 release sets a global Git hooks path, can block a push for 25 minutes and sends the diff to a reviewer model of the user's choice.
- 02Microsoft and CMU Start PRAISE, a Certificate for Early-Career Engineers Working With AIJunior Microsoft engineers take four CMU courses over two semesters with senior mentors, but neither announcement gives a cohort size, a cost or an eligibility rule.
- 03Lean 4.35 Adds Cross-Checking With a Claude-Written Kernel Proven ConsistentThe lake check command reruns a project through five kernels after an OpenAI model got four kernel soundness bugs to accept a proof of False this summer.
- 04CLI-Anything Reaches 54,400 Stars; GUI Agents Led CLI Agents 59.1% to 48.2% in One StudyThe HKUDS project generates command-line wrappers for desktop software, and the only comparison available shows its approach catching up only after skills were expanded.