EMWaver: The Complete History — and Why It's Back
On July 21, 2026 we retired EMWaver. Two days later we are un-retiring it — smaller, sharper, and built to last. This post is two things at once: the complete history of a hardware platform that lived three years, changed its architecture four times, produced eleven-plus board designs, and taught us most of what we know about shipping across the hardware/software boundary — and the story of why it is coming back, focused on the two things it was always best at.
Nothing here is deleted. Every era below happened, and the record stands. What changed is the thesis. EMWaver's maintenance load never came from the radios or the firmware — it came from a general-purpose script engine trying to be an operating system for all of electronics. We are removing that engine and keeping the parts that were quietly excellent: a sub-GHz radio and an infrared blaster, wired to a browser through a relay that already works. This is the story so far, and why it is coming back — focused.
What EMWaver was
In its final form, EMWaver was a cloud-connected hardware exploration platform built around one device: the EMWaver Air, an ESP32-S3 board with a CC1101 sub-GHz radio, IR transmit and receive, USB-C, Wi-Fi, and expansion headers. The Air dialed an outbound secure WebSocket to emwaver.ai, and your browser became the runtime: a JavaScript + JSX script engine (the .emw format), live control panels for radio, GPIO, SPI, I2C, UART, ADC, PWM and RFID work, and an AI agent that could drive the hardware for you. No drivers, no apps, no inbound network holes — plug the board in, open a URL, control real electronics.

Era 1 — A ten-dollar Flipper (2023)
EMWaver did not start as EMWaver. The first commit landed on April 28, 2023 — “first working code interface between CC1101 and stm32” — for a project then called the Sub-1GHz Android transceiver. The thesis was pure hacker economics:
“The goal of this device is to emulate all functionality of the Flipper Zero Sub-1GHz block, on a build that costs less than $10 to manufacture.”
Two STM32 boards came out of that era — V1.0 on the STM32F103 and V1.1 on the STM32F042 — designed to plug directly into an Android phone over USB, with a native Android app doing the capture and retransmit UI. It was one person recruiting collaborators through a Discord handle pasted into the README. Then, in November 2023, the project went quiet: a sixteen-month dormancy in the middle of the git log, the gap between a student project and a company.

Era 2 — The ESP32 rebirth (2025)
When work resumed in April 2025, the commit message was humble for what it kicked off: “This project was previously built on STM32 platform. This will be an attempt to port it.” The port to the ESP32-S3 reset everything. The project took the EMWaver name, got a logo and a documentation site, and grew past the Flipper framing into a general electronics exploration board: sub-GHz radio, IR, 13.56 MHz RFID, sixteen GPIOs, USB HID — reachable over USB and now BLE. This era also produced the idea that outlived every architecture around it: .emw scripts — small JavaScript programs (“wavelets”) that could both drive the hardware and render their own UI panels.
Era 3 — Five platforms (Dec 2025 – May 2026)
The biggest build-out of the project's life: native apps for iOS and macOS in SwiftUI, Android in Kotlin, Windows, and a Rust + GTK4 Linux port. Each one carried a local script runtime, talking to the board over USB, BLE, or Wi-Fi. Desktop apps exposed a local MCP server so AI agents could call run_script, gpio_read, and spi_transfer as tools. Cloud sign-in and script sync arrived. App Store, Play Store, DMG and Windows-installer release machinery got built. The commit graph tells you how hard this was pushed: 441 commits in December, 848 in February, 909 in May.

It worked. It shipped as a public open-source preview in May 2026. And it was also the version that taught us the brutal arithmetic of the approach: five UI layers, five script runtimes, five release pipelines — for one person's company whose actual mission was model research.
Era 4 — One board, one URL (June 2026)
On June 20, 2026, a single commit replaced the entire thesis:
“Replace the open-source, local-first, five-platform thesis with the new closed-source, cloud-connected platform: a single EMWaver Air board controlled through one web app at emwaver.ai over an outbound-wss relay, with a single canonical .emw script engine. Native apps are frozen, not deleted.”
The next day's log reads like an obituary for the previous six months: nuke: remove native app workspaces · nuke: remove native release automation · nuke: remove retired firmware workspaces · nuke: remove legacy firmware payloads. Five apps across five operating systems collapsed into one board and one URL in a single day's commit — and the demolition took one more. What remained was genuinely elegant: the browser as the only runtime, the relay pairing device to browser, OTA firmware with A/B partitions, and eighteen canonical scripts covering everything from blink to a full signal sampler.

The hardware registry
Eleven-plus boards were designed, revised, manufactured, or prototyped across the three years. For the record — because a registry of the versions that didn't survive is exactly the kind of history that normally disappears — here is the family, in rough chronological order:
| Board | Controller | Radio / peripherals | Era |
|---|---|---|---|
| Sub-1GHz V1.0 | STM32F103 | CC1101 433 MHz | 2023 · the $10 Flipper thesis |
| Sub-1GHz V1.1 | STM32F042 | CC1101 433 MHz | 2023 · transmit-focused revision |
| EMWaver Core | STM32F042G6U6 | IR, GPIO — compact USB stick | 2025 · single-purpose Wavers |
| GPIO Waver (V0/V1) | STM32F042G6U6 | GPIO / SPI / UART / I2C | 2025 · single-purpose Wavers |
| Infrared Waver (V0/V1) | STM32F042G6U6 | IR RX + IR LED | 2025 · single-purpose Wavers |
| ISM Waver | STM32F042G6U6 | CC1101, 315 + 433 MHz | 2025 · single-purpose Wavers |
| RFID Waver | MFRC522 add-on | 13.56 MHz RFID | 2025 · rides the GPIO Waver |
| EMWaver Link | STM32F042G6U6 | E07/CC1101-class 433 MHz, IR | 2025–26 |
| EMWaver Shield | ESP32-S3 DevKit carrier | RFM69HW 433 MHz, IR, 44-pin header | 2025–26 · the tinkerer's board |
| EMWaver Carrier | ESP32-S3 DevKit carrier | CC1101 module, IR | 2026 |
| EMWaver Air | ESP32-S3-MINI-1-N8 | E07/CC1101 433 MHz, IR RX/TX, expansion | 2026 · the final board |
Behind those are the prototypes that never even earned a repo of their own — a BLE dongle, a duplex radio module, the first “EMW1” — plus the earlier 433Screen-SignalHacker project that seeded the whole line. The Air's design files (schematic, Gerbers, BOM, printable dock case) are dated March 2026; a pair of assembled units cost about sixty dollars.
Why we stopped — and what we changed
Not because it failed technically. The final architecture did what it was designed to do, and the last month of commits was polish, not firefighting. We stopped because of what EMWaver cost to keep alive relative to what Continual MI is actually for.
Continual MI exists to advance machine intelligence: efficient model architectures, small open models, and eventually true continual learning. Everything else — the products, the services — exists to fund that. Monte Lua funds it while being purely digital: it ships in minutes, generates interesting data, and serves as a living benchmark for our models. Enterprise agent work funds it directly. EMWaver, however much we loved it, funded nothing — it was free — while carrying the heaviest maintenance load in the company. So on July 21 we turned it off. That was the right call for what EMWaver had become.
But retiring something forces you to name exactly what was expensive — and when we did, the honest answer surprised us. The radios were never the problem. The CC1101 sub-GHz block and the IR front end were the most stable, best-loved parts of the whole system; the firmware and the outbound-WSS relay had settled into something we barely touched. The maintenance monster was one thing: the general-purpose .emw JavaScript + JSX script engine — a runtime that tried to be an operating system for all of electronics, with a live control panel for every bus and an AI agent to drive them. Everything general is expensive to keep correct, and this was as general as it gets.
So instead of leaving EMWaver off, we are removing the engine — not the product. No more .emw scripts, no general-purpose bus panels, no on-device AI agent, and no Stripe store bolted to the side. In their place, two hardcoded, purpose-built workspaces for the two things the hardware always did excellently: Sub-GHz capture and replay, Flipper-style, and infrared remote control. The relay stays. The firmware stays. The device protocol stays. Accounts and sign-in stay. What leaves is the surface area that made a one-person company bleed.
Narrowing also unlocks something the general version never had: depth. An infrared workspace that only does infrared can ship a real remote database — IRDB, the community archive of tens of thousands of captured remotes, decoded and regenerated through IrpTransmogrifier so the Air can reproduce a protocol it has never physically seen. A sub-GHz workspace that only does sub-GHz can build a proper signal library instead of a scratchpad. Specialization is not a smaller product. It is a deeper one.

Era 5 — The specialist returns (2026)
Four architectures asked the same question — how much of electronics can one board reach? Era 5 asks the opposite one: how well can it do just two things? The answer is a single flashed appliance. You plug in an EMWaver Air, it dials the relay, and the browser opens to exactly two workspaces — no script editor, no wavelet manager, no agent. Sub-GHz on one side, infrared on the other, each built end to end for its job. Capture a signal, see it, replay it. Point it at a remote you have never met and pull the right protocol out of a database. That is the whole product, and that is the point.

This is a software-first revival. Not one trace on the board changes, not one line of the firmware timing loop, not one byte of the device protocol. The three years of hardware recorded above are the foundation, exactly as built. All the work is in what the browser does with them — and that work is mostly subtraction: taking the general-purpose engine out, and building two things that go all the way down instead of ten things that stop halfway.
What it is now
EMWaver is an IR + Sub-GHz specialist. One board, two workspaces, and the accounts layer that ties a signal library to a person. Concretely:
Sub-GHz — capture and replay. The CC1101 workspace is the Flipper block, done properly: tune the radio, watch for a burst, record it, and send it back. Raw timing capture, register-level control of frequency, modulation, bandwidth and data rate, and a saved signal library so a capture you took last month is one click from replaying. The bounded device-side capture windows that always kept the Air honest stay exactly where they were — in firmware, off the critical path.

Infrared — remotes with a real database. The IR workspace pairs the Air's receiver and blaster with IRDB, the open community archive of tens of thousands of captured remotes, and IrpTransmogrifier, which decodes and regenerates the IR protocols themselves. Learn a button from a remote in your hand, or look one up and let the Air synthesize a protocol it has never physically seen. This is the depth the general-purpose engine could never justify building — and the reason the specialist is a bigger product than the generalist was, not a smaller one.

Signal library and accounts. Sign-in stays — the same Continual accounts that were already here — because a specialist tool earns its keep by remembering. Your captured sub-GHz signals and learned IR codes live in a library tied to your account, not scattered across .emw files. What leaves with the script engine is the on-device AI agent and the Stripe store; what stays is everything that made the device feel like yours.
Progress log
The revival is being built in the open, one focused step at a time. This is the running record — newest first.
The general-purpose .emw script engine, the on-device AI agent, and the Stripe store are being removed — the maintenance monster, gone. The new focused app shell and the device seam that keeps firmware, relay, and protocol untouched have landed. The infrared sidecar (IRDB + IrpTransmogrifier) and the Sub-GHz capture/replay workspace are in progress. Accounts and sign-in carry over unchanged. The public relaunch is deliberately held until the focused app is ready.
The videos
The videos stay up — they are the living archive, the platform actually working, in motion:
Everything behind them is preserved with full history — the platform, the board designs, the firmware, and every hardware design file down to the Gerbers and BOMs. The general-purpose .emw script engine is being retired from the product, but its source stays in the record; the radios, the firmware, and the relay it rode on are exactly the foundation the focused app is built on now. Three years of work did not become an archive — it became a starting line.
Interested in EMWaver?
If any of this is useful to you — you'd like access to the board design files, you're building something similar and want to compare notes, you're interested in licensing or reviving part of the platform, or you just have questions about three years of sub-GHz mistakes we already made so you don't have to — we'd genuinely like to hear from you.
To everyone who flashed a board, ran a wavelet, sent us a capture that made no sense, or just watched the videos and cheered: thank you — and stay close, because there is more coming. EMWaver is where Continual MI learned to build, and it is coming back as the sharpest version of itself. The mission around it — small, efficient, eventually continually-learning models — runs at full speed with Monte Lua and MGPT.
EMWaver, 2023 and on. Retired on July 21, 2026 for maintenance load; refocused two days later as an IR + Sub-GHz specialist — smaller, sharper, and built to stay.
All posts