HivePaaS
An open-source, self-hosted PaaS on Docker Swarm. Deploy apps, databases and functions from one VPS to a whole cluster, with SSL, backups and autoscaling built in.
Free SDR scanner that records only real transmissions - airband, PMR, ham and more. Windows, macOS, Linux.
Developer toolsPython · JavaScriptGitHub @rafafuntOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Loading comments.
Checking sign-in status.
Wideband SDR scanner that records only real transmissions. Browser UI for local use or a headless receiver, searchable library, optional Whisper transcription. RTL-SDR and SoapySDR. Linux, Windows and macOS.
Taken from the repository README
Loading the full README.
Read the full README ↗A wideband radio scanner for SDR receivers that records only the transmissions it actually stops on - no hours of empty noise, no retuning clicks. Point it at any band (aviation, marine, PMR, ham repeaters, public services, military UHF…) and get a searchable library of conversations.
It runs in your web browser: on the computer the SDR is plugged into, or as a headless receiver you listen to from any phone or PC on your network.
You can try UI and UX also in virtual ether (simulated transmissions) before downloading: the real interface on a simulated receiver at falconsdr.com.
Listening to and recording some radio services is restricted or illegal in many countries - see Legal.
Scanning
Listening
Recording
Recordings library
large-v3, for every language - an
English aviation model can be added in the settings, and fixing the language
skips its detection). It can run on a
different, faster computer than the one scanning; see
what it needs.Server and multiple computers
--server mode for a small always-on Linux receiver (mini PC, home
server, container).| Receiver | How |
|---|---|
| RTL-SDR (incl. RTL-SDR Blog V3/V4) | built in on Linux, Windows and macOS |
| HackRF, Airspy | built in on Windows, .deb, .rpm, AppImage and (since 1.4.1) macOS (experimental) |
| SDRplay, LimeSDR, USRP, … | through SoapySDR, Linux source install (not tested) |
An RTL-SDR is opened through librtlsdr; on Linux from source also through
SoapySDR - choose under SDR device → Access method. HackRF and Airspy work
through the bundled libhackrf / libairspy (experimental: confirmed on a
real HackRF One, untested on an Airspy; pick Access method → libhackrf /
libairspy); on Linux from source they work
through SoapySDR with the matching
module, or through the same built-in access once libhackrf0 / libairspy0
are installed.
HackRF captures 2-20 MHz (the default 2.4 MHz is the safest start); an Airspy only the fixed widths its board has (for instance 2.5 and 10 MHz on an Airspy R2), and FalconSDR picks the nearest. A wider capture needs more processor - on a 4-core mini PC about 1, 8 and 19 ms of every 30 ms block go to the spectrum at 2.4, 10 and 20 MHz, plus 2, 9 and 17 ms for each transmission being recorded. The macOS builds carry the HackRF/Airspy libraries since 1.4.1 (untested on a real Mac).
Developed and tested with an RTL-SDR Blog V4 on Linux and Windows 11. A HackRF One has been checked on Linux (10 MHz capture; SoapySDR and libhackrf both scan, libhackrf reported no lost samples) by phutch in issue #9 - thank you. Other receivers and macOS (experimental builds) should work but haven't been tested yet - reports are welcome.
Testing a receiver: stop the scanner and run falconsdr --probe-sdr
(from source: python main.py --probe-sdr; add hackrf_native / hackrf /
airspy_native / airspy to pick the way it is opened; on Windows the output
goes to %USERPROFILE%\.config\FalconSDR\falconsdr.log). It measures the
gain steps, the DC spike, how many blocks after a retune still hold the old
frequency, and sample losses, and prints one RESULT {...}
line - please paste it into an issue together with your receiver's model.
Any antenna works; one cut or tuned for the band you scan works much better.
Scanning and recording are light - a small mini PC runs them fine. The figures below are only for the optional speech-to-text (it can also run on another computer, see Headless receiver). Pick the model in Settings → Whisper models.
| Model | RAM (GPU: VRAM) | Word errors, clean / noisy radio |
|---|---|---|
small - smallest usable | 1.4 GB (0.8 GB) | 30 % / 51 % |
medium - best without a GPU | 3.2 GB (1.4 GB) | 23 % / 44 % |
large-v3 - default | 3.9 GB (3.3 GB) | 21 % / 38 % |
How long transcribing takes, as a multiple of the recording's length, for short ~6 s recordings (at 2× it keeps up as long as you record less than about 30 minutes of audio per hour):
| Model | Mini PC, 4 threads* | Desktop, 8 threads† | Desktop, 24 threads† | Nvidia GPU‡ |
|---|---|---|---|---|
small | 1.0× | 0.5× | 0.3× | 0.03× |
medium | 2.9× | 1.1× | 0.7× | 0.06× |
large-v3 | 6.0× | 2.1× | 1.2× | 0.08× |
tiny and base are not usable (45-90 % errors). On a CPU turbo is no
faster than large-v3.*ThinkCentre mini PC, 4-core i5-6500T, 1 transcription thread. †Ryzen 9
3900X limited to 4 and 20 transcription threads; a slower CPU will be slower.
‡RTX 2070 SUPER. Without language detection (adds ~80 %). Short recordings
are the slower case per second of audio: nine longer ones (13 s to 7 min)
ran up to 2× faster (the mini PC: small 0.44×, medium 1.0×), but needed
more memory (medium peaked at 3.2 GB on the 7-minute one). Rough figures,
one run each.
Detects your distribution and installs the matching package:
curl -fsSL https://raw.githubusercontent.com/rafafunt/FalconSDR/master/packaging/install.sh | bash
Debian/Ubuntu get the .deb, Fedora/openSUSE the .rpm, Arch the AUR
package, anything else the AppImage. Add --from-source to install from a
git checkout instead: the way to get SoapySDR support (LimeSDR, SDRplay,
USRP, …, and HackRF/Airspy through SoapySDR instead of the built-in access)
and the fallback for other CPU architectures or musl distros such as Alpine.
The built-in HackRF/Airspy access needs their system libraries, which a source
install does not bring along: add --with-sdr-libs (installs libhackrf0 and
libairspy0 with apt, or hackrf and airspyone_host with dnf, using sudo):
curl -fsSL … | bash -s -- --from-source --with-sdr-libs.
Download the .deb from Releases and install it:
sudo apt install ./falconsdr_<version>_amd64.deb
Start FalconSDR from the application menu. Unplug and replug the dongle once after installing - the package adds a udev rule for USB access and stops the DVB-T TV driver from taking the dongle.
This package is self-contained (RTL-SDR, plus HackRF and Airspy natively - experimental; no Python needed). For SoapySDR devices, run from source instead.
Download the .rpm from Releases and install it:
sudo dnf install ./falconsdr-<version>-1.<arch>.rpm
Same self-contained bundle and the same udev/DVB-T handling as the .deb;
replug the dongle once after installing. Needs glibc 2.38+ (current
Fedora / openSUSE Tumbleweed); RHEL/Rocky 9 are too old for this build -
run from source there instead.
yay -S falconsdr
(repackages the official release build; maintained by @9M2PJU).
Download FalconSDR-<version>-<arch>.AppImage from
Releases, make it executable and run it - no install, no
root:
chmod +x FalconSDR-*.AppImage
./FalconSDR-*.AppImage
One manual step on a machine with no RTL-SDR software installed yet: copy
packaging/linux-deb/60-rtl-sdr.rules to /etc/udev/rules.d/, reload udev
and replug the dongle (the .deb/.rpm do this for you).
Download from Releases either
FalconSDR-<version>-windows-x64-setup.exe (installs for your user, no
administrator rights needed) or FalconSDR-<version>-windows-x64-portable.zip
(unzip anywhere and run falconsdr.exe). Both are self-contained - no Python
needed; MP3 recording works out of the box and transcription installs from
Settings like in any other install. The program is not code-signed yet: if
SmartScreen says "Windows protected your PC", choose More info → Run
anyway.
RTL-SDR driver: Windows needs the WinUSB driver on the dongle, installed once with Zadig. If SDR++, SDR# or another SDR program already works with your dongle, it's already done. Otherwise: plug in the dongle → run Zadig → Options → List All Devices → pick "Bulk-In, Interface (Interface 0)" (or "RTL2838UHIDIR"; not Interface 1) → target driver WinUSB → Replace Driver → replug the dongle. The same steps are in the app (Listen → SDR device). A HackRF or Airspy may need the same driver step; the built-in access to them is untested on Windows with real hardware.
FalconSDR runs in the background with its interface in the browser; quit it in Settings → Advanced. "Start with the system" is there too (off by default).
Download FalconSDR-<version>-macos-arm64-experimental.zip (Apple Silicon:
M1 and newer) or …-macos-x86_64-… (Intel Macs) from
Releases, unzip it and move FalconSDR to Applications.
These builds are made automatically and pass the same self-test as the other
packages, but haven't been tried on a real Mac with an SDR yet - feedback in
Discussions is very welcome.
The app isn't signed by Apple. The first time, right-click it → Open (or System Settings → Privacy & Security → Open Anyway). If macOS says the app "is damaged", that's the same missing signature; clear the download flag in Terminal:
xattr -dr com.apple.quarantine /Applications/FalconSDR.app
An RTL-SDR needs no extra driver on macOS. Builds since 1.4.1 also carry the HackRF and Airspy libraries (built-in access, experimental); they only check that the libraries load - no real Mac with a HackRF or Airspy has tried them.
Requires Python 3.10+.
git clone https://github.com/rafafunt/FalconSDR.git
cd FalconSDR
python3 -m venv --system-site-packages .venv # lets the venv see python3-soapysdr (Linux)
.venv/bin/pip install -r requirements.txt # Windows: .venv\Scripts\pip ...
.venv/bin/python main.py # Windows: .venv\Scripts\python main.py
The interface opens at http://127.0.0.1:8765. To update: git pull, run the
pip install line again and restart (or run the one-liner with
--from-source again from the folder above FalconSDR/).
rtl-sdr package (udev rules) or copy packaging/linux-deb/60-rtl-sdr.rules
to /etc/udev/rules.d/. For SoapySDR devices install python3-soapysdr and
the device's soapysdr-module-* (e.g. sudo apt install python3-soapysdr soapysdr-module-hackrf); the venv must be created with
--system-site-packages, as above, or it cannot see them. HackRF and Airspy
can also be opened without SoapySDR (experimental, SDR device → Access
method; the Windows, .deb, .rpm and AppImage builds already carry the libraries):
sudo apt install libhackrf0 libairspy0, or run the one-line installer with
--with-sdr-libs.imageio-ffmpeg
package (or a system ffmpeg on PATH); on platforms without a wheel
(32-bit ARM) install ffmpeg from the system, otherwise recordings stay WAV.Quit FalconSDR, then install the newer .deb, .rpm or Windows installer over
the old one - settings, channels, favorites and recordings are kept. Start it
again afterwards (a copy left running through the update shows errors). An
AppImage is replaced by downloading the new one. A source install is updated
by running the --from-source line again from the folder that holds
FalconSDR/ (it pulls the checkout and refreshes the venv), or by git pull
in the checkout and the pip install line; the headless receiver, by its own
line again (see below). Remove with sudo apt remove falconsdr, sudo dnf remove falconsdr or Windows Settings → Apps; your
recordings and settings stay on disk (see
Where things are stored).
On a Linux machine with the SDR attached (Debian, Ubuntu, Raspberry Pi OS):
curl -fsSL https://raw.githubusercontent.com/rafafunt/FalconSDR/master/packaging/install.sh | bash -s -- --server
It installs the latest release as a service that starts on boot and ends
with the address to open from any device on your network
(http://<receiver-ip>:8765). Run the same line again to update - settings
and recordings are kept. Details, other versions and helper computers for
transcription: packaging/remote-server/README.md.
It also installs libhackrf0 and libairspy0 (small), so a HackRF or Airspy
works through the built-in access without extra steps. The service sees the system's SoapySDR: sudo apt install python3-soapysdr soapysdr-module-<your receiver> and restart it (sudo systemctl restart falconsdr-receiver), then pick the access method under SDR device.
falconsdr for the installed packages (Windows: falconsdr.exe in its install
folder), python main.py from source:
falconsdr local mode: scan on this computer, UI on 127.0.0.1:8765
falconsdr --server reachable from the whole network
falconsdr --start start scanning right away
falconsdr --local scan locally even if this computer is set up as a client of a server
falconsdr --port 9000 another port
falconsdr --no-browser don't open the browser
falconsdr --version show the version
falconsdr --self-test check this install has everything it needs
falconsdr --probe-sdr measure the receiver with the scanner stopped (see Hardware)
| What | Where |
|---|---|
| Settings, channels, blacklist | ~/.config/FalconSDR/ |
| Recordings (default, changeable) | ~/FalconSDR/recordings/, one folder per day |
| Quality scores, transcripts, favorites | ~/.local/share/FalconSDR/ |
(~ is your home folder, also on Windows.)
libhackrf / libairspy library (sudo apt install libhackrf0 libairspy0, Fedora:
sudo dnf install hackrf airspyone_host, or the installer's --with-sdr-libs). If one way to open a receiver
fails, try the other under SDR device → Access method.falconsdr/locale/pl.po; a new language is a copy of that file (see
falconsdr/i18n.py).AGENTS.md describes the architecture
and the pitfalls already hit once. Tests: python -m unittest tests/test_core.py.The laws on radio monitoring differ a lot between countries. In some places you may listen to most bands but not record or share what you hear; in others even listening to non-public services (aviation, police, emergency services, military) is forbidden. Check what applies where you live before you scan, and especially before you record or publish anything - you alone are responsible for how you use this program.
GPL-3.0-or-later (see LICENSE) - required by pyrtlsdr and the
bundled librtlsdr. The Windows, Linux and (since 1.4.1) macOS packages list every bundled component
and its license in THIRD-PARTY-LICENSES.txt (ffmpeg in them is a GPLv3
build; libhackrf and libairspy are BSD-3-Clause, libusb LGPL-2.1).
Transcription software and Whisper models are not bundled: they are
downloaded on the user's own request from their publishers (faster-whisper,
CTranslate2 and the default model Systran/faster-whisper-large-v3 are MIT-licensed, as
is the optional English aviation model jacktol/whisper-medium.en-fine-tuned-for-ATC-faster-whisper).
Neither is the digital voice decoder: on request, the app downloads
dsd-fme and
mbelib from their authors (the
authors' Windows build; source compiled on the user's machine elsewhere) and
runs dsd-fme as a separate program.