WebSDR is an open-source TypeScript monorepo that provides libraries and tools for building web applications that work with Software Defined Radios (SDR) using WebUSB and related browser/node tooling.
Currently supported SDR devices:
- Wavelet uSDR β can be connected via the Development Board or the USB adapter.
- Wavelet xSDR β can be connected via the Development Board or the USB adapter.
- LimeSDR Mini v2 β tested with v2.2; should also work with v2.3 and v2.4.
WebSDR contains utilities, UI components, backend modules, and small test apps to make it easier to build browser-based SDR applications and tooling. The primary goal is to enable interaction with SDR devices connected over USB from web applications (via WebUSB), and to provide supporting building blocks for dashboards, demos, and server-side microservices.
Core capabilities include:
- WebUSB device management (requesting devices, selecting devices in UI components).
- A small Vue 3 component library for dashboards and controls (dropdowns, lists, inputs, log viewers).
- NestJS modules for microservices (authentication, API scaffolding) useful for backend parts of an SDR web platform.
- Utility modules: circular buffers, data conversion helpers, string utilities, time helpers and promise helpers used across frontend and backend.
Top-level structure (important folders):
packages/
ββ core/ # Shared domain types, utilities, constants
ββ frontend-core/ # Front-end utilities and WebUSB adapters
ββ vue3-components/ # Reusable Vue 3 UI components and styles
ββ nestjs-microservice/ # NestJS modules (auth, API helpers, microservice wiring)
test-apps/ # Small example/test applications and scripts
Brief package descriptions:
packages/coreβ Core shared library with domain types, utilities, constants and radio-related helpers.packages/frontend-coreβ Front-end core utilities, WebUSB adapters, and services used by client apps.packages/vue3-componentsβ Vue 3 component library (examples:SdrInput,Dropdown,List,LogArea). Built with Vite; ships TypeScript types and styles.packages/nestjs-microserviceβ NestJS integration and helper modules; main entry isWebSDRModule(configurable via environment variables such asWEBSDR_*).test-appsβ Small scripts and demo pages used to test low-level functionality (e.g.,usb-test.ts).
Install dependencies for the workspace:
npm installBuild the packages:
npm run buildRun tests (runs workspace tests):
npm run testRun all tests
npm run test:allRun all tests and watch for changes
npm run test:watchRun coverage check
npm run test:coverageExample test apps live in test-apps. To run them:
cd test-apps
npm install
npm run test:usb # runs the USB test script (requires appropriate permissions/flags)Note: WebUSB requires HTTPS or localhost and browser support. Running tests that access USB devices may require additional browser flags or permissions.
packages/nestjs-microservicereads configuration from environment variables (prefixed withWEBSDR_in places). See the module entry and code for exact variable names.
WebSDR is MIT licensed