no-sdr v0.2.0 — First Release
The first public release of no-sdr, a multi-user WebSDR built on Node.js.
Highlights
- 7 analog demodulation modes — WFM (stereo), NFM, AM, USB, LSB, CW, Raw IQ
- Stereo FM — PLL-based 19kHz pilot detection with SNR hysteresis, L-R DSB-SC demodulation, per-channel de-emphasis
- Real-time waterfall — Canvas 2D with 5 color palettes (turbo, viridis, classic, grayscale, hot) and auto-range
- Spectrum analyzer — Peak-hold, tuning indicator, frequency labels
- 5-band parametric EQ — LOW 80Hz · L-MID 500Hz · MID 1.5kHz · H-MID 4kHz · HIGH 12kHz (all ±12dB)
- Audio controls — Stereo balance, loudness compression, squelch gate with tune bypass
- Per-user IQ extraction — Server-side NCO frequency shift + 4th-order Butterworth LPF + decimation
- 3 source types — Local USB (
rtl_sdr), remote (rtl_tcp), demo mode (signal simulator) - Profile system — Admin-managed dongle profiles with CRUD API and config persistence
- Digital mode decoders — Spawn external C binaries (dump1090, acarsdec, dumpvdl2, multimon-ng, direwolf)
- 3 UI themes — Default (cyan), CRT (phosphor green), VFD (amber)
- Multi-user — Shared waterfall broadcast, independent per-user tuning within dongle bandwidth
- Docker ready — Multi-stage Dockerfile with USB passthrough and rtl_tcp sidecar support
- Bandwidth meter — Real-time SVG sparkline with FFT rate and data throughput
Tech Stack
Node.js 22 · TypeScript 5 · Hono · SolidJS · Vite 6 · Tailwind CSS v4 · fft.js · Web Audio API
Quick Start
```bash
npm install && npm run build && npm run start:demo
```
Then open http://localhost:3000
Bundle Size
- JS: 76.10 KB (22.50 KB gzipped)
- CSS: 26.39 KB (5.72 KB gzipped)