BrowSDR
{{ i + 1 }}
MHz
RX OOB {{ vfoBookmarkLabel(i) }}
{{ labelFreq(0) }}
{{ labelFreq(0.25) }}
{{ labelFreq(0.5) }}
{{ labelFreq(0.75) }}
{{ labelFreq(1) }}
DSP Stats {{ fps }} FPS
USB: {{ dspStats.usbFps }} cb/s | Chunk: {{ dspStats.chunkSize }} B
DSP: {{ dspStats.dspAvgMs }}ms avg / {{ dspStats.dspMaxMs }}ms max
Audio: {{ dspStats.audioFps }} calls/s | {{ dspStats.audioRate }} samp/s
Msgs: {{ dspStats.msgRate }} /s | Input: {{ (dspStats.inputRate/1e6).toFixed(2) }} MSa/s
Dropped: {{ dspStats.dropped }}
Active Audio
{{ item.index + 1 }} {{ item.vfo.freq.toFixed(3) }}
{{ i + 1 }} RX OOB
Live Transcription ● REC {{ whisper.recordDuration.toFixed(1) }}s Transcribing{{ whisper.pendingChunks > 1 ? ` (${whisper.pendingChunks} queued)` : '…' }} Listening Ready Error Idle
No transcriptions yet. Start Whisper and tune to a voice transmission.
{{ entry.time }} {{ entry.freq }} ({{ entry.duration }}) ⏱ {{ entry.transcribeTime }} {{ entry.text }}
POCSAG Decoder {{ pocsag.log.length }} msg{{ pocsag.log.length !== 1 ? 's' : '' }}
No messages yet. Enable "Decode POCSAG" on an NFM VFO and tune to a paging frequency.
{{ entry.time }} {{ entry.freq }} CAP:{{ entry.capcode }} {{ entry.type.toUpperCase() }} {{ entry.baud }}Bd {{ entry.text }} (tone only)
Frequency Activity {{ sortedVfoActivity.filter(a => a.totalMs > 0 || a.isLive).length }} active
Enable squelch on VFOs to track their activity here.
Listening… activity will appear here when squelch opens.
#{{ rank + 1 }} VFO {{ item.index + 1 }} {{ item.vfo.freq.toFixed(4) }} MHz {{ vfoBookmarkLabel(item.index) }} ● LIVE {{ item.count }}× {{ formatActivityDuration(item.totalMs) }}
Import Bookmarks

How would you like to import?

Save {{ bookmarkModal.type === 'individual' ? 'FREQ' : 'GROUP' }} Bookmark
Edit {{ bookmarkEdit.type === 'individual' ? 'FREQ' : 'GROUP' }} Bookmark
Connected Clients
No clients connected
{{ client.id.substring(0, 12) }}
{{ client.country }} {{ formatFreq(client.firstFreq) }} MHz {{ client.vfoCount }} VFO{{ client.vfoCount !== 1 ? 's' : '' }} RELAY
Connected {{ remoteClientDuration(client.connectedAt) }}
Select SDR Device
{{ entry.driverName }}
{{ entry.productName || 'USB ' + entry.device.vendorId.toString(16) + ':' + entry.device.productId.toString(16) }}
Click to Enable Audio
Connecting in background…
Connect to Remote SDR
{{ id }}
Browser-based Software Defined Radio

A blazing-fast, zero-install SDR receiver that runs entirely in your browser. Connect a USB SDR device or join a shared remote session and start listening instantly.

WebUSB — Zero Install
Connects directly to HackRF and RTL-SDR hardware via WebUSB. No drivers, no software, no plugins — just open the browser and go.
Multi-VFO Reception
Listen to multiple frequencies simultaneously, each with its own color, mode, squelch, volume, and audio filters.
Remote SDR Sharing
Share your SDR with remote listeners via WebRTC. Clients connect with a share link. Host can lock settings and manage connected clients.
Whisper AI Transcription
Live speech-to-text using OpenAI Whisper running locally in your browser. Supports English-only and multilingual models up to 800 MB.
Frequency Activity Tracker
Automatically tracks squelch-open time and transmission count per VFO. Ranks active frequencies and shows live transmission indicators.
POCSAG Pager Decoder
Real-time POCSAG pager decoding on any NFM VFO. Displays capcode, message type, baud rate, and message text with export support.
Demodulation Modes
NFM, WFM (with stereo & RDS), AM, USB, LSB, DSB, CW, and RAW — all decoded in real-time via WebAssembly DSP.
Waterfall & Spectrum
Real-time FFT spectrum and scrolling waterfall with adjustable zoom, pan, and brightness. Hover to read exact frequencies.
Bookmarks
Save individual frequencies or full multi-VFO group presets. Organize by 15+ categories, search, and import/export as JSON.
FM RDS Decoding
Decode Radio Data System (RDS) metadata from WFM stations. Supports EU and North America regional settings.
VFO Outside Bandwidth

The requested frequency does not fit within the current bandwidth with all existing VFOs.

{{ snackbar.message }}