Also known as: Pothos, Pothos SDR, Pothos framework
Pothos is a graph-based data-flow framework for building signal-processing and software-defined-radio applications by wiring reusable blocks into a streaming graph, positioned as an alternative runtime to GNU Radio.1 Like GNU Radio it lets you compose a system from small units — a source, filters, a demodulator, a sink — but it uses its own scheduler, block API, and design tool, and it is the project that also produced SoapySDR.
How it works
The core abstraction is the block — an object with typed input and output ports plus a
work() method that consumes samples on its inputs and produces samples on its outputs. A
flowgraph is built by connecting one block’s output port to
another’s input port, and a runtime scheduler (part of PothosCore) decides when each
block runs, hands it buffers, and propagates back-pressure so a slow downstream block throttles
the whole chain. Buffers are passed by reference and pooled, and blocks that need it can attach
metadata “labels” to positions in the stream — closely analogous to GNU Radio’s
stream tags — for events like a retune or a burst
boundary.
Two design choices distinguish Pothos from GNU Radio. First, blocks can be written in C++ or Python and are described by a JSON block-registry entry, which the tooling reads to auto-generate GUI widgets and parameter fields. Second, the graph can be distributed: because blocks communicate through a serialization layer, a flowgraph can span multiple processes or even multiple machines, with the scheduler stitching remote blocks into the same logical graph.
Variants
Pothos is a small ecosystem of packages rather than a single binary. PothosCore is the
runtime and block API; Pothos Flow is the graphical designer where you drag blocks onto a
canvas and connect them, comparable in role to
GNU Radio Companion; toolkits add DSP primitives, an SDR
source/sink built on SoapySDR, plotting widgets, and network transport.
A gr-pothos bridge lets existing GNU Radio blocks run inside a Pothos graph, easing migration
between the two worlds. On Windows the “Pothos SDR” installer bundles the framework together
with a large collection of SDR tools and drivers.
Relevance to SDR
Pothos matters as a demonstration that GNU Radio’s block-and-flowgraph model is a general architecture, not a single implementation — the same “wire blocks into a streaming graph” idea can be built with a different scheduler, a different block API, and first-class distribution across machines. Its lasting practical contribution to the wider ecosystem is SoapySDR, which came out of the Pothos project and is now the vendor-neutral hardware layer that many unrelated applications depend on.
GopherTrunk is not built on Pothos or on any general data-flow framework; it is a purpose-built pure-Go trunking decoder with a fixed software-defined-radio pipeline rather than a user-editable graph. But the underlying pattern is the same one GT implements by hand: sources, filters, a channelizer, and demodulators connected by buffered streams, with back-pressure and overrun handling between stages. Understanding the block/scheduler model clarifies what a fixed-pipeline decoder like GT trades away (graph flexibility) in exchange for a simpler, dependency-free, statically compiled runtime.
Sources
-
PothosCore wiki — Pothosware, documentation of the Pothos block API, scheduler, Pothos Flow designer, and the framework’s relationship to SoapySDR and GNU Radio. ↩