🆕 What's new in v3.0.0 "Resonance"
RF Swift v3.0.0 “Resonance”
RF Swift v3.0.0 rebases the whole image collection on Ubuntu 26.04 “Resolute”, rebuilds the CLI on the new Moby SDK, and adds a set of images that take RF Swift beyond the radio layer and into full engagement territory.
📦 New base: Ubuntu Noble → Resolute (26.04)
Every official image now builds on ubuntu:26.04. The published repository moved accordingly:
| Repository | |
|---|---|
| Before (v2.x) | penthertz/rfswift_noble |
| Now (v3.0.0) | penthertz/rfswift_resolute |
rfswift run -i penthertz/rfswift_resolute:sdr_fullThe CLI defaults to the new repository, and warns you when a container is still running an image from the legacy noble repository.
Why this was real work
Resolute is not a cosmetic bump. The toolchain moved under everything at once:
- GCC 15 promotes K&R-style C to hard errors, so a lot of RF software from the 2000s simply stopped compiling
- CMake 4 dropped compatibility with
cmake_minimum_required(VERSION < 3.5), which most GNU Radio out-of-tree modules still declare - Boost 1.90 removed the deprecated
io_contextAPIs several SDR projects still call - Python 3.14 and Java 25 became the defaults, breaking pinned toolchains and native extensions
Rather than freezing on an old base, we patched what was broken and maintain the forks publicly:
gr-osmosdr_resolute · gr-gsm_resolute · gr-fosphor_resolute · gr-dvbs2_resolute · gr-nordic_resolute · gr-grnet_resolute · gr-pdu_utils_resolute · gr-sandia_utils_resolute · gr-fhss_utils_resolute · gr-timing_utils_resolute · srsRAN_4G_resolute · yate_resolute
OpenBTS and OpenBTS-UMTS are legacy C++ that GCC 15 rejects outright; both are maintained on the resolute branches of the PentHertz/OpenBTS and PentHertz/OpenBTS-UMTS forks, with porting still in progress.
The result: 50+ GNU Radio out-of-tree modules still build on 26.04.
/var/lib/db/rfswift_build_report.tsv inside each image, so you can see exactly what landed in your build and reinstall anything missing with rfswift install.⚙️ Rebuilt CLI
rfswift now drives containers through the new Moby SDK (github.com/moby/moby/api + github.com/moby/moby/client) instead of the legacy Docker Go client, and every Go dependency is current.
Engine choice is still yours and is auto-detected at startup, or forced with --engine:
- Docker: the default on Linux and Windows
- Podman: rootless and daemonless (guide)
- Lima: how RF Swift gets real USB passthrough for SDR dongles on macOS, plus an optional GPU VM (
rfswift engine lima)
📡 Telecom: 5G SA now runs on OCUDU
The 5G SA CU/DU stack installed in the telecom_5G images is now OCUDU instead of srsRAN Project. It still provides the gnb binary and builds into /telecom/5G/ocudu, so existing configurations carry over, and srsran5GSA_soft_install is kept as an alias.
srsRAN 4G is unaffected and remains the 4G / 5G-NSA stack, from the srsRAN_4G_resolute fork.
2G to 5G, still one pull. See Telecommunications for the full inventory.
⚡ GNU Radio 4, testable in seconds
Curious about GNU Radio 4 but not willing to wreck the GNU Radio 3.10 environment you actually work in? There is now a dedicated image:
rfswift run -i penthertz/rfswift_resolute:sdr_gnuradio4GR4 (4.0.0-RC2) is built from source into /opt/gnuradio4 with its own Python 3.12 virtual environment for the embedded interpreter, in parallel with the apt GNU Radio 3.10 that stays the image default. No building from source yourself, no VM, no disturbing your existing flowgraphs.
🧰 New images for full engagements
Radio work rarely stops at the radio. Three new images cover what comes after:
| Image | What it’s for | Highlights |
|---|---|---|
ad |
Active Directory engagements | Impacket, NetExec, Responder, BloodHound.py, Certipy, bloodyAD, certsync, mitm6, kerbrute, lsassy, ldapdomaindump, sprayhound, DonPAPI, SharpLAPS, pyGoldenGMSA, skewrun |
android |
Mobile assessment | adb/fastboot, apktool, smali, apksigner, scrcpy, dex2jar, Frida, objection, androguard, drozer, MobSF |
osint |
Recon and open-source intelligence | theHarvester, Sherlock, maigret, holehe, GHunt, toutatis, instaloader, Sublist3r, h8mail, censys, subfinder, SpiderFoot, recon-ng, FinalRecon |
All three build on all supported architectures. See Included Tools for the complete per-image tables.
🔧 New tools in existing images
- Reversing gained a proper SAST/DAST set. Trivy (vulnerabilities, misconfigurations, secrets, SBOM) and Sighthound (tree-sitter taint-flow scanner with SARIF output) join Semgrep, Joern, cppcheck, honggfuzz, AFL and the Clang static analyzer
- Bluetooth gained Caeruleus (single-binary BLE assessment workflow with JSON output) and BlueSploit, alongside the WhisperPair exploit for CVE-2025-36911
- SDR gained FISSURE in an isolated venv that reuses the image’s existing GNU Radio/SoapySDR stack, plus HydraSDR support (
gr-hydrasdr,hydrasdr_433) - Network gained Sniffnet, NetWatch, Hetty, HExHTTP, SSRFmap, GraphQLmap, betterleaks, SecLists and more
- Hardware gained the Sipeed SLogic PulseView build, plus
findus(PicoGlitcher) andrd6006support
🏗️ Multi-architecture
Everything above ships on x86_64, ARM64 and RISC-V64, with the exception of sdr_gnuradio4 (amd64 and arm64 for now) and the GPU-accelerated SDR variants (amd64 only).
Upgrading from v2.x
-
Update the CLI:
rfswift updateor reinstall with the one-liner from Getting Started.
-
Pull the new images. Your
noblecontainers keep working, but new pulls should targetpenthertz/rfswift_resolute:rfswift images pull -i sdr_full -
Recreate long-lived containers rather than upgrading in place if you rely on tools that were rebuilt against the new toolchain:
rfswift upgrade -c my_container -i penthertz/rfswift_resolute:sdr_full \ -r /root/captures,/root/scriptsThe
-rflag preserves the directories you list. Seerfswift upgrade. -
Check the build report in the new image if a tool you depend on seems absent:
cat /var/lib/db/rfswift_build_report.tsv