Platform hub

GNU Radio

The free signal-processing framework most SDR work starts in. Flowgraphs in Python or C++, a graphical editor, drivers for most radios, and a 4.0 rewrite at release-candidate stage.

OrganisationGNU Radio project, a technical project of LF Charities, Inc. (a Delaware non-profit) under a charter adopted on 1 October 2026
Websitewww.gnuradio.org/
LicensingGNU Radio 3.10 under GPL-3.0-or-later; GNU Radio 4.0 core repositories under MIT and its Studio under GPL-3.0; VOLK 3.x under LGPL-3.0-or-later; radioconda installer code under BSD-3-Clause
PricingFree to download; no paid editions
Updated15 Nov 2026

Products and offerings #

NameKindPositioning
GNU Radio 3.10frameworkStable release line, 3.10.12.0 published 20 February 2025, with Python bindings through pybind11
GNU Radio 4.0frameworkC++23 rewrite in split repositories; 4.0.0-RC3 published 22 September 2026 as a pre-release
GNU Radio CompanionsoftwareGraphical flowgraph editor that generates a runnable program from a block diagram
VOLKlibraryVector-optimised kernel library used by GNU Radio blocks; v3.3.0 released 8 February 2026
radioconda
Release 2025.03.14; macOS and Windows installers
softwareConda-based installer bundling GNU Radio with UHD, libiio, bladeRF, HackRF, Lime Suite, RTL-SDR and Airspy drivers

Who they are

This hub is for anyone who processes radio samples on a computer. GNU Radio is a free framework of signal-processing blocks that you connect into flowgraphs, and it talks to most widely used SDRs through UHD, libiio and SoapySDR. Its governance changed in 2026. The project adopted a technical charter on 1 October 2026 that makes it a project of LF Charities, a Linux Foundation non-profit, with a Technical Steering Committee replacing the old General Assembly. On 22 September 2026 the Linux Foundation announced that GNU Radio would join the OCUDU Ecosystem Foundation, which also hosts the 5G code that grew out of srsRAN. GRCon26 took place in Raleigh, North Carolina, from 21 to 24 September 2026, hosted by AERPAW at North Carolina State University.

Tooling and APIs

What you install. The stable line is 3.10. The latest release, 3.10.12.0, came out on 20 February 2025. The README recommends binary packages and says PyBOMBS is no longer recommended. Linux distributions package it. On macOS and Windows the easiest route is radioconda, which bundles GNU Radio with device drivers and tools such as gqrx and inspectrum, and ships macOS (Arm and Intel) and Windows installers. conda-forge also carries 3.10.12.0 for macOS on Apple Silicon and for Windows. Homebrew has 3.10.12.0. MacPorts was still at 3.8.5.0 when we checked, so avoid it.

Licensing at the time of writing. GNU Radio 3.10 is GPL-3.0-or-later. GPL obligations can reach code that links against it, so check before you ship a closed product. The 4.0 core repositories are under the MIT licence, which is more permissive. VOLK is LGPL-3.0-or-later.

Language bindings. Blocks are written in C++ and exposed to Python through pybind11, which replaced SWIG in 3.9. You can build flowgraphs in GNU Radio Companion, in plain Python, or in C++. gr_modtool scaffolds out-of-tree modules, and CGRAN lists third-party ones.

Radio support. The 3.10 tree includes gr-uhd for USRPs, gr-iio for Analog Devices radios such as the ADALM-Pluto, and gr-soapy for anything with a SoapySDR module, which covers the HackRF One, RTL-SDR and many more. gr-zeromq moves samples between processes or machines. See the NI and Ettus hub, the Analog Devices hub and the open-source ecosystem hub.

A first check. This headless flowgraph runs offline without a radio. It generates a 1 kHz complex tone at 32 kHz sample rate, stops after 4096 samples and checks the spectral peak. The first GNU Radio lesson goes further.

# gnuradio
import numpy as np
from gnuradio import gr, blocks, analog

samp_rate = 32_000  # Hz
tb = gr.top_block()
tone = analog.sig_source_c(samp_rate, analog.GR_COS_WAVE, 1_000, 1.0, 0)
head = blocks.head(gr.sizeof_gr_complex, 4_096)
sink = blocks.vector_sink_c()
tb.connect(tone, head, sink)
tb.run()

x = np.array(sink.data(), dtype=np.complex64)
spectrum = np.abs(np.fft.fft(x))
peak_hz = np.fft.fftfreq(x.size, 1 / samp_rate)[np.argmax(spectrum)]
print(f"GNU Radio {gr.version()}: {x.size} samples, peak at {peak_hz:.0f} Hz")

In our environment it prints GNU Radio 3.10.12.0: 4096 samples, peak at 1000 Hz.

Pain points. Mixing a system Python with a separately installed GNU Radio breaks imports. Keep GNU Radio and its drivers in one environment. GUI blocks need Qt, which is a common source of install trouble on headless servers.

Migration notes

  • 3.10 to 4.0. GNU Radio 4.0 is a rewrite, not an upgrade. It needs a C++23 compiler (GCC 14 or a current Clang), and its build notes warn that the Apple Clang from the Command Line Tools can be too old. We found no migration guide from 3.10. Keep production flowgraphs on 3.10 until 4.0 leaves release-candidate stage.
  • 3.8 and older. SWIG bindings were replaced by pybind11 in 3.9. Out-of-tree modules written for 3.8 need new bindings, which the 3.10 gr_modtool can generate.
  • Files. The File Sink writes raw samples with no header. Record the sample rate, centre frequency and data type next to the file, or use SigMF. See recording and reading IQ.
  • From MATLAB or NumPy. blocks.vector_source_c and blocks.vector_sink_c move NumPy arrays in and out of a flowgraph, so you can test one block against a reference script.

Watch for

  • Release cadence. No 3.10 release has appeared since February 2025, while 4.0 is still a release candidate. Check the project news before planning a long-lived product on either.
  • GPL. The 3.10 licence applies to code linked against it. Talk to your legal team before distributing a closed product built on it.
  • Stale installers. Old tutorials point at PyBOMBS and at MacPorts. Prefer radioconda, conda-forge or your distribution’s packages.