NexRx is an ambitious open-source project that reimagines how we interact with ham radio receivers. Instead of the knobs, buttons, and menu diving that have defined radio interfaces for decades, NexRx presents a browser-based interface built around a revolutionary concept called "setboxes."
Think of it as bringing ham radio into the modern computing age - where your radio's interface is as flexible and powerful as the software on your computer, but still maintains the real-time performance demands of RF communication.
This is an overview of the project. There is much more in the ./doc
directory.
The entire project uses the MIT License, covering everything from hardware designs and PCB layouts to software source code. This isn't just another commercial radio with a fancy display - it's a community-driven platform designed to push ham radio technology forward for everyone.
Here's where NexRx gets interesting. Traditional radios force you to think in terms of physical controls - turn this knob for frequency, press that button for mode, flip this switch for antenna selection. But why should software-defined radio be limited by the metaphors of analog hardware?
NexRx introduces "setboxes" - think of them as smart presets that can inherit settings from each other, just like object-oriented programming. Instead of having separate "band" and "mode" controls, you might have a setbox called "40m-CW-Contest" that inherits basic 40-meter settings from a parent "40m" setbox, adds CW-specific parameters from a "CW" setbox, and then layers on contest-specific configurations.
graph TD
A[Global Settings] --> B[40m Band]
A --> C[CW Mode]
A --> D[Contest Setup]
B --> E[40m-CW-Contest]
C --> E
D --> E
style A fill:#e1f5fe
style E fill:#c8e6c9
This hierarchy means you can set your antenna preferences once in "Global Settings," define band-specific power levels in "40m Band," configure CW tone preferences in "CW Mode," and create contest-specific memory channels in "Contest Setup." When you activate "40m-CW-Contest," it automatically combines all these inherited settings with any overrides you've defined specifically for that configuration.
Traditional radio interfaces suffer from what we might call "control soup" - every setting lives at the same level, making it hard to organize your preferences logically. Want to use different antennas for 160m versus other bands? You'll be manually switching antennas every time you change bands. Prefer different power levels for CW versus SSB? Hope you remember to adjust that knob every time you change modes.
Setboxes solve this by letting you organize your radio's behavior hierarchically. Set up your preferences once, then let the inheritance system handle the details. The result is a radio that adapts to your operating style instead of forcing you to adapt to its limitations.
NexRx consists of three main components that work together seamlessly:
Hardware Platform: Built around an STM32H753 microcontroller running at 480MHz with a full megabyte each of flash and RAM. This isn't your typical Arduino project - we're talking serious computational power running Zephyr RTOS. The RF hardware handles general HF coverage from 1MHz to 30MHz.
Embedded Software: Written in modern C++20, this handles the real-time RF control, basic DSP processing, and serves as a web server. It presents itself to your computer as USB, so there's no driver installation or network configuration hassles.
Native Application: This is where the magic happens. Using a modern framework (TBD) this app runs on Linux, MacOS, and even Windows on 64-bit PC or ARM. It handles advanced DSP, the setbox management system, and provides rich visualizations like waterfall displays and spectrum analysis. The interface runs entirely on the PC. The NexRx hardware is essentially "headless".
The beauty of this architecture is its simplicity from the user's perspective. Plug in the USB cable, install the app, and you're ready to operate. But under the hood, you have access to computational power and interface flexibility that would be impossible with traditional radio architectures.
Inheritance Over Configuration: Rather than configuring every parameter for every situation, set up logical hierarchies and let inheritance handle the complexity. Your "DX" setbox can inherit from your "20m" setbox, which inherits from your "HF" setbox, which inherits from your global preferences.
Native Interface: No drivers to manage, no compatibility worries across different operating systems.
Community-Driven Development: The entire project is open source with permissive licensing specifically to encourage community contributions, modifications, and improvements. This is ham radio, after all - we're supposed to be experimenting and learning.
Real-Time Performance: Despite the web-based interface, NexRx maintains the real-time performance requirements of RF operation through careful architecture and efficient protocols.
NexRx isn't just another SDR project - it's an attempt to demonstrate what ham radio interfaces could become if we stopped thinking in terms of analog radio metaphors and started thinking in terms of modern software design patterns.
Imagine having complete recordings of every QSO with automatic digital mode decoding, multiple simultaneous receive frequencies with independent waterfalls, or antenna switching that automatically adapts to your operating patterns. These capabilities become natural extensions of the setbox paradigm rather than complex features bolted onto traditional radio designs.
The goal is to create a platform that grows with you as an operator, adapts to your preferences, and provides the kind of deep configurability that makes ham radio uniquely satisfying - but without the traditional complexity that makes advanced features intimidating to explore.
To create the Gemini MCP server I use for Kicad collaboration, you
have to add something like the following to your
~/.gemini/settings.json file:
{
...
"mcpServers": {
"NexRxMCP": {
"command": "/home/yourusername/NexRx/.venv/bin/python3",
"args": ["/home/yourusername/NexRx/tools/mcp-server.py"],
"trust": true
}
}
}