WIFILTWeb interface for Icom LAN Transceivers
Firmware installer — version 20260913 •
GitHub
The whole road, before you start
Installing is step zero, and it is the only step that differs between the three platforms below. Everything after it happens on the device's own SETUP page, in this order — each step only needs what the device cannot work out for itself.
- 0 Install WIFILT
- 1 Network
- 2 Identity
- 3 Radio
- 4 Transmit check
- 5 This browser
Where will it run?
One source, several forms. Open the one that is yours — the others stay folded away.
A radio already on your network — an IC-705, IC-7610 or
IC-7300 MK2 with Network Control switched on — needs no
hardware at all. The program on your computer reaches it over IP, and it is the same
software as the firmware, version 20260913.
The interface board adds what a computer cannot do: the CI-V serial bus, for radios that have no network port; FSK/RTTY keying and the band decoder on its GPIO pins; the switched 13.8 V output and the status LED. And it runs on its own, day and night, with no computer switched on.
ESP32 interface board flash over USB • runs on its own 24/7 • CI-V, keying, band decoder
Required hardware
- Processor
- Original Espressif ESP32 (Xtensa LX6), compatible with the ESP32 Dev Module target.
- Flash memory
- 4 MB minimum, configured for DIO mode at 80 MHz.
- RAM
- Standard ESP32 internal SRAM (520 KB). External PSRAM is not required.
- Flash layout
- No OTA: 1.375 MB application and 2.56 MB LittleFS web assets, plus a separate 128 kB configuration partition the installer never writes.
This firmware image targets the original ESP32. It is not compatible with ESP32-C3, ESP32-S2, ESP32-S3, or other ESP32 chip families.
Flash firmware via USB
Open this page in Google Chrome or Microsoft Edge (Web Serial is not supported in Firefox or Safari). Connect the ESP32 to your computer via USB.
Is this a new device, or one that is already working? This page cannot tell, and the answer decides one checkbox further on.
Your configuration survives this — do not tick "Erase device". The installer asks Do you want to erase the device before installing WIFILT? with the box already unticked. That is the answer you want: leaving it alone writes the firmware and the web pages only.
- Leave "Erase device" unticked
- The normal update. WiFi networks and passwords, callsign and locator, radio
connections and credentials, LOG and JS8 settings,
every TX audio gain calibration, CW and frequency memories, MSG BOX
and band decoder rows all stay — they live in NVS and in the
configuration partition at
0x170000, and the installer writes neither. - Tick it only to start clean
- It erases the whole chip: everything above goes, including the WiFi credentials that let you reach the device at all. Use it for a board that will not boot, or when you are deliberately starting over — then restore from a backup file.
- Not affected either way
- Your QSO log. It is stored in your browser, not on the device, so flashing cannot touch it.
Coming from a release older than 20260808? Those builds kept the configuration inside the web-asset filesystem that this flash replaces, so it is lost whichever way you answer. Save a backup first and restore it afterwards: download it now, or open your device's address and use SETUP → Download config. This page cannot fetch it for you — it is served over HTTPS and your device over HTTP, so the browser blocks the request.
One thing a backup file never carries: the MSG BOX. Stored messages cannot be exported, so anything still waiting there is lost by an erase — read or forward it first.
- After connecting, select the correct
CP210x/CH340/JTAGserial device. - Choose Install WIFILT.
- The next screen asks Do you want to erase the device before installing WIFILT? — the Erase device box starts unticked. Leave it that way unless you mean to wipe the whole chip, then press Next.
Answer the question above to continue.
Reach the board after flashing
Updated a working device without erasing it? It keeps its WiFi credentials, rejoins your network on its own and is back at the same address as before. Nothing below applies — the steps are for a device that has no WiFi yet: brand new, or just erased.
-
Join the device's own WiFi. On its first boot it creates the network
WIFILT-AP, passwordremoteqth. Scan this with a phone to join without typing either:If the camera app does not offer to join, pick
WIFILT-APfrom the WiFi list and type the password. - Open
http://192.168.4.1. The setup page appears; some phones open it by themselves. - Erased the device, or came from a release older than 20260808? Restore your backup first — Upload config at the bottom of the setup page — before setting anything by hand. Anything you type before restoring will be overwritten by the file.
- Enter your WiFi network and password, then save. The device joins your network while its hotspot is still running and shows the address it was given, with a QR code. Scan or write it down: the hotspot closes when it restarts.
- Reconnect your phone or computer to your normal WiFi and open that address. From there, connecting the radio is the same on every platform.
Lost the address? Try http://wifilt.local/, look in your router's DHCP client
list, or open the serial console above at 9600 baud and press
Reset Device to read it from the boot log.
The button above flashes: bootloader, partition table, boot_app0, firmware, web assets.
It does not write the configuration partition at 0x170000, which is what
lets your settings survive an update.
For manual flashing there is wifilt-20260913-full.bin at offset 0x0
with esptool.py. That one erases everything — it is a whole-chip
image, so it overwrites the WiFi credentials in NVS and the configuration partition
as well. Use it to recover a board that will not boot, not to update a working one.
M5Stack Atom Lite flash over USB-C • runs on its own 24/7 • bare module, same web UI
Required hardware
- Board
- M5Stack Atom Lite (ESP32-PICO-D4).
- Flash memory
- 4 MB, built into the PICO-D4 module — nothing to configure.
- RAM
- Standard ESP32 internal SRAM (520 KB). External PSRAM is not required.
- Flash layout
- Identical to the box: No OTA, 1.375 MB application and 2.56 MB LittleFS web assets, plus a separate 128 kB configuration partition the installer never writes.
This image targets the M5Stack Atom Lite (ESP32-PICO-D4) specifically — the only Atom variant this project has tested. The Atom S3 family (AtomS3, AtomS3 Lite/U) uses a different chip (ESP32-S3) and cannot run it; other classic Atom boards (Matrix, Echo, U) share the same PICO-D4 but have not been tried. It runs as a bare module: no CI-V serial port, FSK/RTTY keying, band decoder outputs or switched 13.8 V — only the built-in SK6812 RGB status LED.
Flash firmware via USB
Open this page in Google Chrome or Microsoft Edge (Web Serial is not supported in Firefox or Safari). Connect the Atom Lite to your computer via its USB-C socket.
Is this a new device, or one that is already working? This page cannot tell, and the answer decides one checkbox further on.
Your configuration survives this — do not tick "Erase device". The installer asks Do you want to erase the device before installing WIFILT? with the box already unticked. That is the answer you want: leaving it alone writes the firmware and the web pages only.
- Leave "Erase device" unticked
- The normal update. WiFi networks and passwords, callsign and locator, radio
connections and credentials, LOG and JS8 settings,
every TX audio gain calibration, CW and frequency memories and MSG
BOX all stay — they live in NVS and in the
configuration partition at
0x170000, and the installer writes neither. - Tick it only to start clean
- It erases the whole chip: everything above goes, including the WiFi credentials that let you reach the device at all. Use it for a board that will not boot, or when you are deliberately starting over — then restore from a backup file.
- Not affected either way
- Your QSO log. It is stored in your browser, not on the device, so flashing cannot touch it.
Coming from a release older than 20260808? Those builds kept the configuration inside the web-asset filesystem that this flash replaces, so it is lost whichever way you answer. Save a backup first and restore it afterwards: download it now, or open your device's address and use SETUP → Download config. This page cannot fetch it for you — it is served over HTTPS and your device over HTTP, so the browser blocks the request.
One thing a backup file never carries: the MSG BOX. Stored messages cannot be exported, so anything still waiting there is lost by an erase — read or forward it first.
- After connecting, select the correct
CP210x/CH340/JTAGserial device. - Choose Install WIFILT.
- The next screen asks Do you want to erase the device before installing WIFILT? — the Erase device box starts unticked. Leave it that way unless you mean to wipe the whole chip, then press Next.
Answer the question above to continue.
Reach the board after flashing
Updated a working device without erasing it? It keeps its WiFi credentials, rejoins your network on its own and is back at the same address as before. Nothing below applies — the steps are for a device that has no WiFi yet: brand new, or just erased.
-
Join the device's own WiFi. On its first boot it creates the network
WIFILT-AP, passwordremoteqth. Scan this with a phone to join without typing either:If the camera app does not offer to join, pick
WIFILT-APfrom the WiFi list and type the password. - Open
http://192.168.4.1. The setup page appears; some phones open it by themselves. - Erased the device, or came from a release older than 20260808? Restore your backup first — Upload config at the bottom of the setup page — before setting anything by hand. Anything you type before restoring will be overwritten by the file.
- Enter your WiFi network and password, then save. The device joins your network while its hotspot is still running and shows the address it was given, with a QR code. Scan or write it down: the hotspot closes when it restarts.
- Reconnect your phone or computer to your normal WiFi and open that address. From there, connecting the radio is the same on every platform.
Lost the address? Try http://wifilt.local/, look in your router's DHCP client
list, or open the serial console above at 9600 baud and press
Reset Device to read it from the boot log.
The button above flashes: bootloader, partition table, boot_app0, firmware, web assets.
It does not write the configuration partition at 0x170000, which is what
lets your settings survive an update.
For manual flashing there is wifilt-20260913-m5atom-full.bin at offset 0x0
with esptool.py. That one erases everything — it is a whole-chip
image, so it overwrites the WiFi credentials in NVS and the configuration partition
as well. Use it to recover a board that will not boot, not to update a working one.
Linux PC radio on the network • no hardware • tar.gz, 3.3 MB
wifilt-20260913-linux-x86_64.tar.gz • Linux x86-64, 3.3 MB • SHA256SUMS
tar xzf wifilt-20260913-linux-x86_64.tar.gz
cd wifilt-linux-x86_64
sudo ./install.sh
The installer copies the program to /opt/wifilt and grants it permission to
use port 80. That permission is not optional: ports 80, 82 and 83 are all privileged,
and port 83 carries the audio, so without it JS8, RTTY, WSPR and Mercury cannot work.
It installs a service but deliberately does not enable it — starting a transmitter's
control interface at boot should be your decision.
Then start it, as yourself — not with sudo:
/opt/wifilt/start-wifilt.sh
That opens the browser for you. If you would rather have the service:
sudo systemctl start wifilt for this boot, or
sudo systemctl enable --now wifilt for every boot. To run it without
installing at all: sudo ./wifilt from the unpacked folder.
This download also carries local-trx — the bridge that lets WIFILT run a transceiver which is not a networked Icom (a Kenwood, a Yaesu, an older Icom) from this computer's sound card and two USB serial adapters. It is installed alongside and starts switched off, doing nothing at all until its own setup page is used. See Not a networked Icom? below.
Raspberry Pi (64-bit) radio on the network • no hardware • tar.gz, 7.6 MB
wifilt-20260913-linux-arm64.tar.gz • Linux ARM64 (aarch64), 7.6 MB • SHA256SUMS
Needs a 64-bit Raspberry Pi OS (aarch64) — Pi 3, 4, 5 or newer. The 32-bit (armhf) Raspberry Pi OS cannot run this build.
tar xzf wifilt-20260913-linux-arm64.tar.gz
cd wifilt-linux-arm64
sudo ./install.sh
The installer copies the program to /opt/wifilt and grants it permission to
use port 80. That permission is not optional: ports 80, 82 and 83 are all privileged,
and port 83 carries the audio, so without it JS8, RTTY, WSPR and Mercury cannot work.
It installs a service but deliberately does not enable it — starting a transmitter's
control interface at boot should be your decision.
Then start it, as yourself — not with sudo:
/opt/wifilt/start-wifilt.sh
That opens the browser for you. If you would rather have the service:
sudo systemctl start wifilt for this boot, or
sudo systemctl enable --now wifilt for every boot. A Pi left running
headless is exactly the case the service is for.
This download also carries local-trx — the bridge that lets WIFILT run a transceiver which is not a networked Icom (a Kenwood, a Yaesu, an older Icom) from this computer's sound card and two USB serial adapters. It is installed alongside and starts switched off, doing nothing at all until its own setup page is used. See Not a networked Icom? below.
Windows PC radio on the network • no hardware • zip, 8.5 MB
wifilt-20260913-windows-x64.zip • Windows x64, 8.5 MB • SHA256SUMS
Unpack the ZIP anywhere and run start-wifilt.bat — it starts the
program and opens the browser. (wifilt.exe on its own works too.) There is
nothing to install and no runtime to add. Windows will ask once whether to allow it
through the firewall — say yes, or other devices on your network will not reach it.
Because the file is not code-signed, SmartScreen may warn on first run; choose
More info → Run anyway. Verify the download against
SHA256SUMS if you would rather not take that on trust.
This download also carries local-trx — the bridge that lets WIFILT run a transceiver which is not a networked Icom (a Kenwood, a Yaesu, an older Icom) from this computer's sound card and two USB serial adapters. It is installed alongside and starts switched off, doing nothing at all until its own setup page is used. See Not a networked Icom? below.
Connect your radio
Whichever of the four you installed, this part is the same — including the address: http://wifilt.local. That the board and the computer answer to the same name is not a coincidence: your browser stores the QSO log per address, so keeping the name identical is what lets a log started on the board carry on unchanged on a computer.
- Switch on Network Control in the radio. In the radio's own menu,
set
Network Controlto ON and invent a network user name and password there. - Open SETUP → Radio and set TRX1 to
ICOM-LAN, then enter the radio's address and the user name and password you just invented. - Press Test & identify radio. The radio reports its own model back, and from then on power limits, menu paths and setup guidance follow whichever transceiver actually answered.
The rest of the road above — identity, the transmit check, this browser's own settings — the SETUP page walks you through step by step. It works out on its own what is already done and asks only for what is missing.
Not a networked Icom?
The three steps above assume a transceiver with Network Control of its own. If yours has none — a Kenwood, a Yaesu, an Icom older than the networked models, anything hamlib knows — the desktop downloads carry a second program that stands in for one. local-trx pretends to be a networked Icom and translates each request into whatever this computer is actually wired to. Nothing in WIFILT itself changes; you point it at the bridge exactly as you would at a radio.
You need three connections, and the last two are separate adapters:
- the computer's sound card, to the rig's audio in and out;
- a CAT adapter on the rig's control port — frequency, mode, meters;
- a second serial adapter, its DTR and RTS lines to the rig's KEY and PTT jacks. CW, RTTY and PTT always go this way, never over CAT: not every CAT dialect can send Morse, and a key jack works on every rig.
- Start both programs.
/opt/wifilt/start-wifilt.shon Linux and Raspberry Pi,start-wifilt.baton Windows. Both pages open by themselves. - Set up local-trx on http://localhost:8765. It ships opening no port, no serial adapter and no audio device at all. The page asks for the audio devices, the CAT port and rig model, and the keying port with its DTR/RTS assignment — each with a test button beside it, so you can prove the wiring before going on the air. Switch it from Configure to Run and press Save; saving restarts local-trx itself, because nothing is applied while it runs.
- Point WIFILT at it. In SETUP → Radio, set TRX1 to
ICOM-LANand tick LOCAL-TRX. On this same computer that fills in the address and the rest for you; if WIFILT is on the ESP32 box instead, type this computer's LAN address by hand.
What you give up is only what is reached by model-specific Icom commands — the network MOD-level gain calibration, GPS position, the radio's own waterfall. The logbook, the DX cluster, JS8, RTTY, WSPR, Mercury and the ordinary transmit-gain calibration all work. The full description is SOFTWARE.md § 1.6.
Icom is a registered trademark of Icom Incorporated. WIFILT is an independent software project and is not affiliated with, endorsed by, or sponsored by Icom Incorporated.