The first time many new radio amateurs encounter CAT control is not while reading a transceiver manual, but while trying to make WSJT-X stop shouting at them. The waterfall is alive, FT8 signals are decoding, the USB audio device appears in the sound settings, the radio is connected, and yet the frequency display in the software stubbornly refuses to follow the VFO. Or perhaps the opposite happens: WSJT-X controls the radio perfectly until a logbook, contest logger, panadapter, DX cluster tool, or rotator program opens the same COM port and everything collapses into a familiar Windows error about a port already being in use. At that moment, the beginner discovers that modern ham radio is not just RF, antennas, feed lines, and propagation. It is also a stack of small control systems, serial-port conventions, command dialects, operating-system locks, middleware engines, and sometimes entire network daemons pretending to be a local radio.
That is why CAT vs CI-V vs Hamlib vs OmniRig is such a useful beginner radio topic. These four names are often spoken as if they belong to the same category, but they do not. CAT is the broad idea: computer-aided transceiver control, the practice of letting software read and command a radio. CI-V is Icom’s particular radio-control protocol and electrical/control architecture, originally tied to a simple serial bus and now often carried through USB interfaces. Hamlib is not a radio protocol in the same sense; it is an open-source software library and toolset that hides many manufacturer-specific CAT dialects behind a common API, with utilities such as rigctl and the network daemon rigctld. OmniRig is different again: a Windows COM/OLE-based CAT control engine, famous for letting multiple Windows ham applications share rig state through a common interface and for describing radios with INI files rather than requiring every application developer to write every radio driver from scratch.
The confusion matters because the failure modes look deceptively similar. A wrong CI-V address, an incorrect baud rate, a locked serial port, a stale OmniRig INI file, a Hamlib backend mismatch, a USB driver creating two different virtual COM ports, or a TCP CAT relay pointed at the wrong host may all produce the same surface symptom: “CAT control failed.” Underneath, however, each failure belongs to a different layer. One problem may be on the wire between computer and radio. Another may be in a manufacturer command dialect. Another may be in a software abstraction layer. Another may be a resource-sharing issue inside the operating system. Understanding those layers is the difference between randomly changing settings and actually diagnosing a station.
For digital-mode operators, contesters, satellite users, and remote-station builders, rig control has become as central as audio routing. A typical station might run WSJT-X or JTDX for weak-signal modes, N1MM Logger+ or another contest logger for event operation, a general logbook such as Log4OM or DXLab, an SDR display, a spotting client, and perhaps a remote-control front end. Each program wants to know the current frequency. Some want to set the mode. Some want to key PTT. Some want split operation. Some want to change VFOs at precise times, such as when WSJT-X transmits on an odd/even FT8 sequence or when a contest logger jumps to a multiplier from a band map. The more software is involved, the less CAT feels like a convenience feature and the more it becomes the station’s nervous system.
The Serial Ghost Inside the Modern Shack
The strange thing about modern CAT control is how much of it still behaves like 1980s serial computing, even when the radio has a USB-C connector, Ethernet, Wi-Fi, a color touchscreen, and an internal SDR architecture. Many radios expose themselves to the computer as one or more virtual COM ports. The operator sees “COM3” or /dev/ttyUSB0, chooses a baud rate, sets data bits and stop bits, maybe toggles RTS or DTR, and hopes the program can talk to the rig. Electrically, the path may be USB all the way into an embedded controller. Logically, however, the software still treats it as an asynchronous serial line. Commands are sent as short byte sequences or ASCII strings, responses return in the same style, and timing still matters.
This inheritance is not accidental. Amateur transceiver control grew up around RS-232, TTL-level serial interfaces, accessory connectors, and vendor-specific control boxes long before USB became universal. Early CAT systems were built to solve practical operating problems: reading the radio frequency into logging software, switching bands from a computer, automating memories, controlling receivers in measurement systems, or integrating radios into contest stations. Manufacturers created their own command languages because there was no single amateur-radio CAT standard. Kenwood’s command style became influential, Yaesu developed its own CAT variants across generations, Icom built CI-V, Ten-Tec had its conventions, and later SDR and remote-radio systems added network APIs of their own. The result is not one protocol but a family of related practices.
At the lowest level, CAT is usually a command-response relationship. Software asks the radio for a value or sends a command to change a setting. A frequency query might return a VFO value. A mode command might switch USB to LSB, CW, AM, FM, RTTY, or a digital sideband mode. A PTT command might put the transmitter on air. More advanced radios expose filter widths, preamp state, attenuator state, antenna selection, split configuration, keyer memories, AGC behavior, RF gain, noise blanker settings, meter values, and spectrum data. But even when the command set is large, the essential behavior remains transactional. A computer does not “become” the radio. It sends structured instructions and interprets structured replies.
This is where the first practical compromise appears. CAT is not always real-time in the way a software engineer might expect from a modern control bus. Many ham programs poll the radio at intervals: every 100 milliseconds, every half-second, every second, or even less often. Poll too slowly and the software display lags behind the operator’s tuning knob. Poll too aggressively and older radios may become sluggish, drop replies, or collide with other control traffic. Some radios are happy at high baud rates with frequent queries; others were designed when 4,800 or 9,600 baud was ordinary and when the operator expected a logging program to ask for frequency occasionally rather than hammer the radio like a telemetry device. This is why CAT settings often include a “poll interval,” and why changing it can transform an unreliable station into a stable one.
The operating system adds another constraint that beginners often discover the hard way: a serial port is normally exclusive. On Windows, macOS, and Linux, once an application opens a COM port or tty device, other applications generally cannot open it at the same time. That exclusivity protects data integrity, but it collides with the way ham operators actually work. WSJT-X may hold the rig-control port, while the logbook also wants frequency and mode, and the contest logger wants to send band changes. Without a sharing mechanism, only one application wins. Everyone else sees a locked port, a failed CAT test, or a silent rig. This is the practical origin of virtual COM splitters, OmniRig sharing, Hamlib rigctld, DXLab Commander relays, TCP CAT bridges, and other middleware patterns.
A virtual COM port is not a protocol; it is an illusion presented to software. One end looks like a serial port to an application, while the other end may connect to a real serial device, another virtual port, a network socket, or a program acting as a relay. Virtual COM pairs are common in Windows ham installations because many older programs only understand serial ports. If a logging program can speak only to COM ports, but the actual radio is behind a TCP server or another CAT engine, a virtual serial layer can bridge the gap. This is powerful, but it also creates a debugging trap. By the time a command reaches the radio, it may have passed through two virtual ports, a splitter, a relay daemon, and a USB driver. When it fails, the word “COM” on the screen does not mean the station is simple.
CAT Is the Umbrella, CI-V Is a Dialect with a Bus Mentality
To understand CAT vs CI-V, it helps to separate the general from the specific. CAT, short for computer-aided transceiver or computer-aided tuning depending on context and manufacturer history, is the umbrella term radio amateurs use for software control of a rig. It does not specify the exact bytes, addressing model, framing, voltage levels, connector, or command vocabulary. Asking whether a radio “supports CAT” is like asking whether a printer “supports computer printing.” The answer may be yes, but the details determine whether your software can actually speak to it.
CI-V is one of those details. Icom’s Communications Interface V is used for remote control of Icom transceivers and receivers, and modern Icom reference material describes it as a way for external controllers to send commands to connected radios and receive responses from them. Technically, CI-V is more than a brand name for CAT; it has a recognizable packet structure and addressing concept. A CI-V message typically includes preamble bytes, a destination address, a source address, a command, optional data, and an end marker. That addressing is why Icom users encounter settings such as “CI-V address,” “CI-V transceive,” and sometimes “CI-V USB port” behavior. In a simple station, the computer talks to one radio. In the original spirit of the design, however, multiple CI-V devices could exist on a bus, each identified by an address.
That bus mentality gives CI-V a different flavor from many point-to-point CAT implementations. Older Icom CI-V interfaces used a single-wire open-collector style bus at TTL levels, often requiring a level converter between the radio and an RS-232 computer port. This allowed multiple devices to share the CI-V line, but it also meant electrical behavior mattered. Pull-up resistors, interface design, cable capacitance, and signal inversion were not abstract concerns; they determined whether the bus behaved cleanly. Modern Icom radios often hide much of that behind USB, but the logical protocol still carries the old design heritage. The operator may plug in one USB cable and see virtual serial devices, yet the software is still sending CI-V commands with addresses and command bytes.
CI-V addressing is one of the most common beginner traps because it looks like a small setting but acts like a postal address. If WSJT-X, JTDX, Hamlib, OmniRig, or a logging program sends a command to the wrong CI-V address, the radio may simply ignore it. Some software can auto-detect an Icom address, some relies on default model settings, and some requires manual configuration. Operators who buy a used radio, update firmware, change “CI-V address” to avoid a conflict, or use software configured for a similar but not identical Icom model may discover that the radio is perfectly connected but logically invisible. The computer is speaking CI-V, but to the wrong destination.
Baud rate is the second old problem that refuses to die. CI-V can run at various serial speeds depending on radio model and settings. Auto-baud features help, but they can also obscure what is happening. A rig may be set to “Auto,” the software to 19,200 baud, the USB bridge to a default rate, and a virtual COM relay to another value that may or may not matter depending on where the conversion occurs. In a clean setup, baud rate, stop bits, parity, CI-V address, and handshake options agree from end to end. In a messy setup, one program may work because it happens to use the right defaults, while another fails even though it appears to target the same port. The beginner concludes that one application is “better,” when the real issue is that the applications are making different assumptions.
CI-V also illustrates why “CAT cable” is not a precise phrase. With an older Icom, the CAT interface might be a CI-V level converter attached to a remote jack. With a more recent Icom, it might be a USB serial device created by the radio’s internal USB interface. With an Ethernet-capable or server-connected station, CI-V-like control may be transported indirectly through software. The commands remain Icom control commands, but the physical route changes. That distinction becomes important when adding an amplifier, tuner, panadapter, or second software client. Are you sharing an electrical CI-V bus, a USB serial port, a Hamlib network server, or a virtual COM abstraction? Each has different locking, latency, and reliability behavior.
The engineering strength of CI-V is that it is compact, mature, and deeply embedded in Icom’s ecosystem. It has served generations of radios and remains familiar to software authors. The weakness is that its historical simplicity can become ambiguity in modern stations. A beginner sees “Icom IC-7300” in a software menu and expects plug-and-play certainty. In practice, the same model may be controlled directly over a USB serial port, indirectly through Hamlib, through OmniRig, through a network relay, or through a logging program acting as a CAT server. The protocol is only one layer. The path to that protocol is often the real configuration problem.
Hamlib: The Translation Layer That Became Infrastructure
Hamlib exists because no developer of ham-radio software wants to write and maintain hundreds of separate rig-control implementations. A digital-mode program should not need to know every detail of every Icom, Yaesu, Kenwood, Elecraft, Ten-Tec, FlexRadio, Xiegu, or SDR transceiver command set. It wants to ask simple questions: what frequency is VFO A on, what mode is active, can the radio transmit, can split be enabled, can the VFO be changed? Hamlib answers by providing a common rig-control API and a large set of backends for different radios. WSJT-X documentation explicitly notes that Hamlib is essential to its radio-control features and that WSJT-X releases include a stable Hamlib version with the application.
This is why Hamlib is often mistaken for a protocol. In everyday shack conversation, someone may say “use Hamlib” in the same breath as “use CI-V,” but the two are not equivalent. CI-V is what many Icom radios speak. Hamlib is software that can speak CI-V, Kenwood-style CAT, Yaesu CAT, and many other dialects on behalf of an application. When WSJT-X is configured to control an IC-7300 through Hamlib, WSJT-X is not speaking CI-V directly from its own handwritten Icom driver. It is using Hamlib’s abstraction, and Hamlib is generating the appropriate CI-V traffic for the selected radio backend. That abstraction is the source of Hamlib’s power and also its occasional frustration.
The power is obvious. A program that integrates Hamlib can support a large number of radios without becoming a radio-driver project. It can run on Linux, Windows, and macOS, and it can participate in the open-source maintenance cycle where users and developers improve backends as radios evolve. Hamlib also provides command-line utilities that are invaluable for testing. rigctl can query or control a radio outside a full application, which makes it a diagnostic scalpel: if rigctl can read the frequency but WSJT-X cannot, the problem may be in the application configuration rather than the radio cable. If rigctl fails too, the problem is closer to the radio, serial device, permissions, baud rate, or backend choice.
The frustration comes from the same abstraction. A Hamlib “radio model” is not always a perfect representation of a particular rig’s firmware, menu configuration, or optional interface behavior. Some radios emulate another manufacturer’s command set. Some expose only a subset of functions. Some have firmware differences across production years. Some require delays between commands. Some have oddities around split operation, VFO selection, or digital modes. Hamlib tries to normalize those differences, but normalization is never free. When a program says “set mode to USB-D,” what should happen on a radio whose command set has USB but no explicit USB-D? When a digital program wants fake-it split, should it command VFO B, RIT, XIT, or audio offset behavior? The answer depends on radio architecture, backend maturity, and application expectations.
Hamlib’s rigctld is where the story becomes especially important for modern multi-program stations. The Hamlib documentation describes rigctld as a TCP rig-control daemon that allows clients to interact with rig control through a network socket; the Hamlib network-control material frames it as part of a TCP-based family of daemons for rigs, rotators, and amplifiers. In plain language, rigctld is a small server that opens the real radio connection once, then lets other software talk to it over TCP. Instead of WSJT-X, a logger, and a spotter all fighting over COM3, rigctld can hold COM3 and expose a shared network endpoint such as localhost port 4532. Applications that understand Hamlib NET rigctl connect to that endpoint and send commands to the daemon.
That single-owner architecture is elegant because it maps neatly to the serial-port locking problem. The operating system still allows only one process to own the serial device, but that one process is now a broker rather than an end-user application. It becomes the station’s CAT switchboard. On Linux, this pattern feels natural because network services and device daemons are part of the culture. On Windows, it can initially feel more foreign, especially to operators accustomed to choosing COM ports from dropdown menus. But the principle is the same as many other control systems: isolate the hardware-facing process, then let clients use a more flexible transport.
The network aspect of rigctld also makes Hamlib useful beyond one desktop computer. A radio connected to a shack PC can be controlled by software on another machine if the network is configured appropriately. A Raspberry Pi near the rig can expose control to a laptop. A remote station can forward rig commands over a VPN. This does not magically solve all remote-operation problems—audio, latency, authentication, safety interlocks, power control, and RF feedback still matter—but it changes CAT from a local serial assumption into a network service. That shift is one of the quiet architectural changes in amateur radio. The radio is no longer necessarily “attached” to the same computer that displays the waterfall.
There are trade-offs. A TCP CAT layer introduces another component that can fail, be misconfigured, or remain running after the operator forgets about it. Firewalls can block it. Multiple clients can issue conflicting commands. One program may poll aggressively while another expects stable state. A contest logger may change bands while WSJT-X believes it is about to transmit. rigctld is a broker, not a station manager with full semantic awareness of operator intent. It serializes and routes commands, but it does not necessarily know which application should have priority during a transmit sequence or whether a frequency change is accidental. Good station design still requires deciding which program is authoritative for each task.
Hamlib is also important because it has become part of the vocabulary of software interoperability. WSJT-X can act as a client to several external radio-control systems, including Hamlib’s rig-control server, OmniRig, and DX Lab Suite Commander, according to its user documentation.

Top comments (0)