Important
GNU Radio 4.0 (GR4) is currently in a maturing beta state as it approaches its first stable release. It is suitable for evaluation, experimentation, and early development. GNU Radio 3.x remains the current stable release series for users who require the existing production-supported GNU Radio platform.
- GNU Radio 3.x stable release series: https://github.com/gnuradio/gnuradio
- Report GR4 issues here: https://github.com/gnuradio/gnuradio4/issues
- Report GNU Radio 3.x issues here: https://github.com/gnuradio/gnuradio/issues
GNU Radio is a free & open-source signal processing runtime and signal processing software development toolkit. Originally developed for use with software-defined radios and for simulating wireless communications, it's robust capabilities have led to adoption in hobbyist, academic, and commercial environments. GNU Radio has found use in software-defined radio, digital communications, nuclear physics, high- energy particle physics, astrophysics, radio astronomy and more!
GNU Radio 4.0 uses modern C++ (C++23), and is tested for
- CMake (>= 3.25),
- GCC (>=13.3, better: >=14.2)
- Clang (>=18, recommended), and
- Emscripten (5.0.2).
To build:
git clone https://github.com/gnuradio/gnuradio4.git
cd gnuradio4
# (Optional) If you experience excessive gcc memory usage during builds (needs sudo):
sudo ./enableZRAM.sh
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=RelWithAssert -DGR_ENABLE_BLOCK_REGISTRY=ON ..
cmake --build . -- -j$(nproc)Cleaning up zram if used:
sudo swapoff /dev/zram0
echo 1 | sudo tee /sys/block/zram0/resetGR_ENABLE_BLOCK_REGISTRY(default: ON): enables a runtime registry of blocks. Turning this off gives fully static builds.EMBEDDED(default: OFF): reduces code size and runtime features for constrained systems. Also implicitly enabled by-DCMAKE_BUILD_TYPE=MinSizeRel.WARNINGS_AS_ERRORS(default: ON): treats all compiler warnings as errors (-Werror).TIMETRACE(default: OFF): activates Clang’s-ftime-tracefor per-file compilation timing.ADDRESS_SANITIZER(default: OFF): enables AddressSanitizer (can’t be combined with the other sanitiser options).UB_SANITIZER(default: OFF): enables 'Undefined Behavior' checks.THREAD_SANITIZER(default: OFF): enables threading checks (N.B. strong impact on performance).
cmake -B build -S . \
-DCMAKE_BUILD_TYPE=RelWithAssert \
-DGR_ENABLE_BLOCK_REGISTRY=ON \
-DWARNINGS_AS_ERRORS=ON \
-DTIMETRACE=OFF \
-DADDRESS_SANITIZER=OFF \
-DUB_SANITIZER=OFF \
-DTHREAD_SANITIZER=OFF
cmake --build build -- -j$(nproc)Feel free to tweak these flags based on your needs (embedded targets, debugging, sanitising, etc.).
For more details, see DEVELOPMENT.md or comments in the CMakeLists.txt file that
describe how to set up a local development environment.
- GNU Radio Website
- GNU Radio Wiki
- Github issue tracker for bug reports and feature requests
- View the GNU Radio Mailing List Archive
- Subscribe to the GNU Radio Mailing List
- GNU Radio Chatroom on Matrix
- Specifically for discussions related to GNU Radio 4.0 join the #architecture channel
GNU Radio 4.0 is a major modernization of the GNU Radio runtime, block model, and application architecture. It preserves the core GNU Radio workflow - building signal-processing systems from reusable blocks and flowgraphs - while introducing a cleaner C++ foundation, stronger typing, improved performance, and more flexible runtime behavior.
-
Familiar GNU Radio Workflow: Blocks and flowgraphs remain central to GNU Radio. Applications can still be built graphically, from Python, or directly in C++, while the underlying architecture has been simplified and modernized.
-
Modern C++ Block Development: GNU Radio 4 uses modern C++ language features and design patterns to make block development more direct, type-safe, and maintainable.
-
Stronger Data Type Support: GR4 supports fundamental numeric types such as integers, floats, and complex values, while also enabling structured, user-defined, and application-specific data types.
-
High-Performance Runtime: The runtime is designed for efficient signal processing using lock-free buffers, compile-time optimization, and SIMD support
-
Flexible Scheduling Model: GR4 introduces a more flexible scheduling architecture, allowing different schedulers to optimize for throughput, latency, parallelism, or application-specific execution requirements.
-
Recursive Flowgraphs and Feedback: Flowgraphs can represent recursive directed graphs, enabling feedback loops and more expressive system architectures.
-
Broader Execution Targets: GR4 is designed with portability in mind, targeting CPUs today while leaving room for hardware accelerators and heterogeneous architectures
-
From Research to Deployment: GNU Radio 4 aims to serve the full SDR lifecycle: experimentation, education, prototyping, test systems, and operational research or industrial deployments.
Unless otherwise noted: SPDX-License-Identifier: MIT
All code contributions to GNU Radio core and runtime will be integrated into a library under the MIT, ensuring it remains free/libre (FLOSS) for both personal and commercial use, without further constraints on either. GNU Radio also allows for individual block libraries to be licensed as GPLv3.
For details on these distinctions and how to contribute, please consult: CONTRIBUTING.md
Copyright (C) The GNU Radio Authors
Copyright (C) Contributors to the GNU Radio Project
Copyright (C) FAIR - Facility for Antiproton & Ion Research, Darmstadt, Germany
The GNU Radio project appreciates the contributions from GSI/FAIR in the co-development of GNU Radio 4.0. Their dedicated efforts have played a key role in enhancing the capabilities of our open-source SDR technology. We would like to recognize the following contributors for their roles in redesigning the core that has evolved into GR 4.0:
Thanks goes to these wonderful people (emoji key):
