Skip to content

icom-lan

Python library for controlling Icom transceivers over LAN (UDP).

Direct connection to your radio — no wfview, hamlib, or RS-BA1 required.


  • Quick Start


    Get up and running in under 5 minutes.

    Getting Started

  • CLI Tool


    Control your radio from the terminal.

    CLI Reference

  • API Reference


    Full async Python API documentation.

    API Docs

  • Protocol Internals


    Deep dive into the Icom LAN UDP protocol.

    Protocol


Features

  • ✅ Direct UDP connection — no intermediate software
  • ✅ Full CI-V command set — frequency, mode/filter, power, meters, PTT, CW keying, VFO, split, ATT/PREAMP
  • ✅ Audio streaming — RX/TX with jitter buffer and full-duplex support
  • ✅ Network discovery — find radios on your LAN automatically
  • ✅ CLI toolicom-lan status, icom-lan freq 14.074m
  • ✅ Async + Sync API — async by default, blocking wrapper available
  • ✅ Auto-reconnect — watchdog + exponential backoff (opt-in)
  • ✅ Multi-radio presets — IC-7610, IC-705, IC-7300, IC-9700 and more
  • ✅ Zero dependencies — pure Python, stdlib only
  • ✅ Type-annotated — full py.typed support for IDE autocompletion
  • ✅ 1040+ tests — high coverage with golden protocol fixtures, TCP wire tests, and real-radio integration suite

Supported Radios

Radio Status CI-V Address
IC-7610 ✅ Tested 0x98
IC-705 Should work 0xA4
IC-7300 Should work 0x94
IC-9700 Should work 0xA2
IC-7851 Should work 0x8E
IC-R8600 Should work 0x96

Any Icom radio with LAN/WiFi control should work — the CI-V address is configurable.

Minimal Example

import asyncio
from icom_lan import IcomRadio

async def main():
    async with IcomRadio("192.168.1.100", username="user", password="pass") as radio:
        freq = await radio.get_frequency()
        print(f"{freq / 1e6:.3f} MHz")

asyncio.run(main())

License

MIT — see LICENSE.

Protocol knowledge derived from the wfview project's reverse engineering work. This is an independent clean-room implementation.

Trademark Notice

Icom™ and the Icom logo are registered trademarks of Icom Incorporated. This project is not affiliated with, endorsed by, or sponsored by Icom. Product names are used solely for identification and compatibility purposes (nominative fair use).