WebSDR-style server written from scratch in C. Browser-based waterfall and audio streaming for SDR receivers.
Built on the DSP and waterfall foundation originally written by PA3FWM for WebSDR, rewritten and extended as a new standalone project.
Beta. Needs testing, bug reports, and community work before it can be considered stable. Use at your own risk.
- Forum: https://forum.sdr-list.xyz/ (shared with PhantomSDR Plus, NovaSDR, and other SDR projects)
- GitHub: https://github.com/Steven9101/VertexSDR
- Bugs and issues: https://github.com/Steven9101/VertexSDR/issues
- Private contact: magicint02@gmail.com
If this is useful to you, donations help keep it going:
https://www.paypal.com/paypalme/magicint1337
Install dependencies:
sudo apt install build-essential libfftw3-dev libpng-dev libasound2-dev libssl-dev xxdBuild and run:
make
./vertexsdrFor GPU (Vulkan) acceleration (recommended for sample rates above 4 MHz):
sudo apt install libvulkan-dev glslang-tools spirv-tools
make USE_VULKAN=1
./vertexsdrOpen http://localhost:8901 in a browser.
- WebSDR-style browser receiver with live waterfall and audio
- ALSA, RTL-SDR (via rtl_tcp), TCP SDR relay, and stdin input
- FFTW CPU backend and Vulkan/VkFFT GPU backend
- AM, SSB, CW, FM demodulation with AM synchronous mode
- IQ balance correction, per-frequency EQ, noise blanker
- Multi-band, config reload, logbook, chatbox
All build variants produce vertexsdr:
make # CPU only
make USE_VULKAN=1 # GPU accelerationThe binary reads websdr.cfg from the current directory, or takes a path as argument:
./vertexsdr
./vertexsdr /etc/websdr.cfgEdit websdr.cfg. Key settings:
maxusers 100
tcpport 8901
fftbackend fftw
public pub2
band HF
device !rtlsdr 127.0.0.1:1234
samplerate 2048000
centerfreq 10100
gain 30
Device forms:
- ALSA:
device hw:0,0 - RTL-SDR via rtl_tcp:
device !rtlsdr 127.0.0.1:1234 - TCP SDR relay:
device !tcpsdr 127.0.0.1:1234 - stdin:
device !stdinwithstdinformat cu8(or cs16le, f32le, etc.)
See docs/configuration.md for all options.
Start rtl_tcp in one terminal:
rtl_tcp -a 127.0.0.1 -p 1234 -f 10100000 -s 2048000 -g 30In websdr.cfg:
band HF
device !rtlsdr 127.0.0.1:1234
samplerate 2048000
centerfreq 10100
gain 30
Then run ./vertexsdr.
Using rx_sdr from rx_tools to pipe samples directly:
rx_sdr -f 10100000 -s 2048000 -g 30 - | ./vertexsdrIn websdr.cfg:
band HF
device !stdin
stdinformat cu8
samplerate 2048000
centerfreq 10100
gain 30
VertexSDR registers your server on both websdr.org and sdr-list.xyz automatically when configured. Each band gets registered as a separate receiver with its own frequency range.
Add to websdr.cfg:
orgserver websdr.org
myhost your.hostname.com
hostname your.hostname.com
If your server is behind NAT or a reverse proxy, set hostname to the public address. Both directories receive the same multi-receiver data.
RX888 works well with the Vulkan/VkFFT path for wideband use. Not all sample rates are validated. See docs/sample-rates-and-hardware.md before trying unusual rates.
- RTL-SDR via rtl_tcp at 2.048 MHz (cu8 IQ) - working
- stdin at 2.048 MHz (cu8/cs16le IQ) - working
- Installation and Build
- Configuration Reference
- Sample Rates and Hardware
- Operations and Deployment
- Band Switching
- Raspberry Pi / ARM
- stdin Pipelines
Bug reports, testing on real hardware, DSP fixes, documentation, and UI work are all needed. Open an issue or PR on GitHub.
VertexSDR is original code. Not a port, fork, decompilation, or reuse of the WebSDR codebase. Written from scratch using the SDR and DSP knowledge built up through PhantomSDR Plus and NovaSDR.
LGPL 3.0. See COPYING.
