Description: Python library for controlling Icom transceivers over LAN

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, power, meters, PTT, CW keying, VFO, split
- Audio streaming — RX/TX with jitter buffer and full-duplex support
- Network discovery — find radios on your LAN automatically
- CLI tool — `icom-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
- 401 tests — 88% code coverage

## 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).