rtltcp.server
Shares one or more RTL-SDR sticks on your network. It behaves just like the well-known rtl_tcp,
so SDR++, SDR#, GQRX and Home Radio work without any changes. On top of that, it adds what
rtl_tcp is missing: it switches the stick off when nobody is listening, brings it back when it briefly drops out,
and tells the client what's going on.
Why does this exist?
An RTL-SDR stick on a Raspberry Pi up in the attic usually gets much better reception than one plugged straight into the TV. The classic
rtl_tcp does get the signal onto the network, but it's fragile: if the stick drops out for a moment, the connection
is gone, a second client hangs forever, and the stick runs around the clock even when nobody is listening.
rtltcp.server is a robust replacement for it.
What it can do
Drop-in replacement
Same port (1234), same protocol, same commands as rtl_tcp. Existing programs won't notice a difference.
Auto-reconnect
Stick unplugged or briefly gone? The server finds it again by its serial number, restores frequency and gain, and keeps streaming.
Idle shutdown
With no client connected, the stick goes into standby after 30 seconds (configurable). The next client wakes it up in about a second.
Multiple sticks
Each stick gets its own port (1234, 1235 …) and a name, e.g. “Roof antenna”.
Clear rules
The first client wins. A second one is disconnected right away and told who is currently listening, instead of hanging forever.
rtltcp_v2 protocol
A backward-compatible extension with clear messages like “USB device lost, reconnecting”. Old clients won't notice a thing.
Optional login
Users with access to specific sticks, via SCRAM-SHA-256 – the password never travels over the network. On your home network you can do without it.
Web interface
Status of every stick, devices, users, settings and logs in your browser – light and dark, on your phone too.
Automatic updates
On Windows and Linux, daily at a fixed time, with checksum verification. If someone is listening, it waits.
Its own driver
RTL2832U and R82xx tuners are driven directly via libusb, without librtlsdr. Slow clients don't hold the stick back.
Download
| System | File | Note |
|---|---|---|
| Windows 10/11 | ⬇ Installer (.exe) | Sets up the Windows service and opens the firewall. |
| Linux & Raspberry Pi | Install script | Debian, Ubuntu, Raspberry Pi OS – x64, arm64 and armhf. |
| Home Assistant | Add-on | Home Assistant OS and Supervised, with the web interface in the sidebar. |
Individual .deb packages, older versions and checksums are available in the
repository, and the changes for each version in the
changelog.
After installation, the web interface is available at http://<computer>:8080/. Log in the first time
with admin / admin; after that you have to set your own password (the default password only works
on the local network). On first start, the server adds every stick it finds, the first one on port
1234.
Windows 10/11
- Run the installer – download and run rtltcp-server-setup.exe. It asks for the ports (web interface 8080, first stick 1234) and checks that they are free.
- The service is running – the installer sets up the Windows service rtltcp.server (starts automatically, restarts on errors) and opens the firewall for private and domain networks.
- Driver for the stick – install the WinUSB driver once using Zadig: Options → List All Devices, select “Bulk-In, Interface (Interface 0)” or “RTL2832U”, driver WinUSB.
- Open the web interface – via the Start menu (rtltcp.server) or
http://localhost:8080/.
Linux & Raspberry Pi
For Debian, Ubuntu and Raspberry Pi OS – on the computer the stick is plugged into:
curl -fsSL https://repository.jaycloud.at/repository/rtltcp.server/linux/release/latest/install.sh | bash
The script asks for the ports, verifies the checksum and installs the right package for x64, arm64 or armhf
(32-bit Pi). It sets up the systemd service rtltcp-server (its own user rtltcp, data in
/var/lib/rtltcp-server), plus a udev rule for the stick and a blacklist for the DVB-T kernel driver.
- Updating: the same command – your settings are kept.
- Without prompts:
curl … | RTLTCP_WEB_PORT=8080 RTLTCP_STREAM_PORT=1234 bash - Changing ports later: edit
/etc/default/rtltcp-server, then runsudo systemctl restart rtltcp-server.
Home Assistant
Under Settings → System → About → Installation type you can see which way fits: for Home Assistant OS and Supervised use the add-on, for Container or Core install it directly as described under Linux.
- Add the repository – Settings → Add-ons → Add-on Store, top right ⋮ → Repositories, and
enter this address:
https://github.com/JayLo1401/rtltcp.server - Reload the store (⋮ → Check for updates). rtltcp.server (jaycloud) appears at the bottom.
- Install – Home Assistant builds the add-on on the device, which takes one to two minutes.
- Start – optionally turn on Show in sidebar first.
- Open the web interface – Home Assistant takes care of the login. The stick should show up under Status,
the first one on port
1234.
- Updates are offered by Home Assistant for the add-on after every new release.
- A stick can only be used by one program at a time. If another add-on is already using the stick (rtl_433, RTLSDR-Airband …), rtltcp.server needs its own.
- The web interface is also available at
http://<home-assistant>:8099/with its own login. The settings are included in Home Assistant backups.
More on this, including troubleshooting: Home Assistant guide.
Connecting a client
In SDR++, SDR#, GQRX or Home Radio, enter the server's address
(e.g. 192.168.1.10) and port 1234 as an rtl_tcp source. Tip: with a strong transmitter nearby,
the automatic gain overdrives the stick – in that case set a fixed gain in the web interface under Devices,
e.g. 14.4 dB.
Forgot the admin password? rtltcp-server admin reset resets the login to admin /
admin (Linux: sudo -u rtltcp rtltcp-server admin reset --data /var/lib/rtltcp-server,
Windows: as administrator in the installation folder).
All configuration fields, the protocol description and the architecture are documented in the README on GitHub.
Supported hardware
| Tuner | Status | Examples |
|---|---|---|
| R820T / R820T2 | ✅ tested | NooElec NESDR SMArt v5, RTL-SDR Blog V3 |
| R828D | ⚠️ built in, untested | RTL-SDR Blog V4 |
| E4000, FC0012/13 | ❌ not yet | older DVB-T sticks |
Known limitations
- No TLS: the login is secure, but IQ data and the web interface are unencrypted. For access from outside, better use a VPN or a reverse proxy with HTTPS.
- Android is not supported as a server.
- On Windows, a USB port can't be powered off – the stick sleeps, but stays powered.
License
rtltcp.server is licensed under the PolyForm Noncommercial 1.0.0: free to use and modify for private and non-commercial purposes, including for clubs, schools and non-profit organizations. Selling it, offering it as a paid service or building it into commercial products is not allowed.
libusb (LGPL-2.1) is included under its own license, see THIRD-PARTY-NOTICES.
rtltcp.server is a hobby project. The USB driver is self-written – not every stick will work perfectly. If you make the server reachable from the internet, you should turn on the login.