CHIRP: free radio programming (and why not for DMR codeplug)
If you've ever punched repeater frequencies into a Baofeng by hand from the keypad, you know the pain: scrolling through menus with buttons, one digit at a time, praying you don't mix up the offset. CHIRP solves this problem once and for all. It's a free, open-source program that can read the memory of hundreds of radio models, show the channels in an ordinary table (like Excel) and write everything back with a single click. Windows, macOS and Linux are supported. But CHIRP has a hard limit: it's strong on analog, while a full DMR codeplug — contacts, talkgroups, zones, RX groups, DMR ID — it generally cannot build. Let's break down what CHIRP can really do, how to install it and get the cable working, and why DMR still needs the manufacturer's native CPS.
What CHIRP is and why it's handy
CHIRP (pronounced "chirp", project chirpmyradio.com) is a volunteer open-source effort that has been in development for more than fifteen years. The main idea: instead of keeping a dozen different proprietary programs for each radio, you install one tool that understands most mainstream transceivers. Here's why it's genuinely good:
- Free and forever. No licenses, keys or "trial periods" — it's completely free software.
- Hundreds of models. Baofeng, Quansheng, Retevis, TYT, Wouxun, Kenwood, Yaesu, Icom, Alinco, AnyTone and many more. The list grows with every build.
- Channels as a table. Receive frequency, offset, sub-tone, channel name, power, step — all editable in a single grid. You can copy rows, sort, and import from CSV.
- Transfer between radios. Read the channels from one model and you can (within the limits of its capabilities) move them to another. Handy when you have several radios for the same local "grid" of repeaters.
- Cross-platform. The same interface on Windows, macOS and Linux.
The current, up-to-date version is called CHIRP-next — it's the branch rewritten in Python 3, and that's the one you should download (the old "legacy" CHIRP hasn't been developed for a long time). Builds come out almost daily: make a fix today, a fresh build is ready tomorrow.
What CHIRP programs (and what it leaves alone)
To avoid disappointment, let's clearly split the areas of responsibility. CHIRP works confidently with the analog part of a channel:
| CHIRP can do this | What exactly |
|---|---|
| RX/TX frequencies | Receive, transmit, offset and the repeater offset direction |
| Sub-tones | CTCSS (analog tone) and DCS (digital code) on receive and transmit |
| Channel names | Alphanumeric labels in memory |
| Power and bandwidth | High/Low, narrow/wide band (NFM/FM) |
| Grid step, scan lists | Step, channel skip during scanning, basic settings |
And here's what CHIRP in most cases does not do for DMR radios — the entire digital part:
- The list of digital contacts (Digital Contacts) and talkgroups with their IDs;
- RX groups (receive groups) and binding them to channels;
- Zones — sets of channels for a location/mode;
- your own DMR ID, Color Code and time slot (TS1/TS2) on a digital channel.
On some DMR models CHIRP doesn't open digital channels at all, or it can only generate a CSV contacts template for import into the proprietary software — but that's a long way from a full codeplug. The rule is simple: analog — CHIRP, DMR digital — native CPS.
How to install CHIRP
Download strictly from the official site — chirpmyradio.com, the Download section. Third-party "driver bundles" and mirrors can slip in junk.
- Windows. Grab the installer.exe (CHIRP-next). Run it, go through the wizard — done. When updating you don't need to remove the old version; the new one installs over it.
- macOS. There is a ready-made "unified" app build for Intel and Apple Silicon. Follow the hints on the MacOS Tips page on the project site — it explains the first-launch quirks (Gatekeeper) and port access.
- Linux. Two official paths: flatpak (the simplest, self-updating) or installing the .whl file (wheel) via pipx. CHIRP-next needs a relatively recent distribution (roughly Ubuntu 22.04 and newer) — Python 3.10+ is required.
# Linux: installing CHIRP-next from the official .whl via pipx
# first the system dependencies (Ubuntu/Debian):
sudo apt install pipx python3-wxgtk4.0 python3-serial python3-requests
# then CHIRP itself — the --system-site-packages flag is mandatory,
# so that pipx sees the system wxPython:
pipx install --system-site-packages ./chirp-*.whl
pipx ensurepath # add ~/.local/bin to PATH
chirp # launch
Cable, drivers and choosing the COM port
CHIRP doesn't talk to the radio "over the air" — you need a programming cable (a USB-UART adapter with a connector for your radio). And here CHIRP is powerless to help: the port is created by the cable chip's driver, not the program itself. So the order is as follows:
- Install the cable driver before you plug it in. The chip inside is usually CH340, CP2102, FTDI or (alas) a fake Prolific PL2303. It determines which driver is needed and whether "Code 10" pops up.
- Find the COM port number. On Windows open "Device Manager" → "Ports (COM & LPT)" and note the number (for example, COM5). On Linux it's /dev/ttyUSB0.
- Specify the port in CHIRP. When reading the radio the program will ask for the port — pick that one. If the port drop-down list is empty, the driver didn't install.
Reading and writing: the working cycle
The logic is the same in all versions and follows the principle "read → edit → write". Never write to the radio without reading it first.
- Read the radio. Menu Radio → Download From Radio. CHIRP will ask for the port, manufacturer and model — choose yours. A progress bar runs, and at the end the channel table opens.
- Save a backup right away. File → Save As to a .img file. This is your rollback point if something goes wrong.
- Edit the channels. Add frequencies, names, sub-tones right in the table. You can import CSV or copy channels from another open CHIRP file.
- Write to the radio. Menu Radio → Upload To Radio. Wait for the success message.
CHIRP or native CPS: what to program with what
A short cheat sheet so you don't second-guess:
| Task | What to use |
|---|---|
| Analog FM channels, repeaters, sub-tones on any supported radio | CHIRP — fast and free |
| Transferring a channel "grid" between different radios | CHIRP (within the limits of the model's capabilities) |
| Digital DMR contacts, talkgroups, zones, RX groups, DMR ID, Color Code, time slot | The manufacturer's native CPS (TYT, AnyTone, Baofeng, Retevis…) |
| Flashing the radio itself (firmware), not the channels | The proprietary updater or alternative firmware (OpenGD77, MD380tools) |
In practice a DMR radio owner's scenario is usually hybrid: analog channels and "everyday" frequencies are convenient to push through CHIRP, while the whole digital codeplug for DMRhub — contacts, talkgroups, zones — is built with the proprietary CPS. We already have ready-made contact lists and codeplugs for popular models — no need to type in hundreds of talkgroups by hand.
Channels written — get on the air
You've built the analog in CHIRP and the digital in the native CPS. Now register with DMRhub: private calls by DMR ID, SMS and groups already work. Take our ready-made codeplug and contact list for your model, and if you want your own coverage — build a hotspot.
Sources
- CHIRP — the official project site (Home, supported models) — chirpmyradio.com
- CHIRP Download — the official download page (Windows installer, macOS .app, Linux .whl/flatpak via pipx) — chirpmyradio.com/Download
- What Is CHIRP? — an overview of the capabilities and limits (analog vs DMR/CPS) — radioranked.com
- Radio Programming with CHIRP (RMHAM University, K0SWE) — the Download/Upload working cycle, choosing the port — rmham.org (PDF)
- ChirpOnLinux — the official guide (pipx + --system-site-packages, .whl, distribution requirements) — chirpmyradio.com/ChirpOnLinux