Skip to content

Section 8 1 start the server

madmedicnl edited this page Sep 30, 2026 · 3 revisions

8.1 Start the server

sdroxide --server --port 4950

The server opens the configured radio, streams spectrum and audio, and accepts a WebSocket control connection. The default port is 4950 and the default bind address is all interfaces (0.0.0.0).

Set a username and password first — see § 7.3. Without one the server is open to anyone who can reach the port, and says so in its log at startup.

A station with more than one radio (2.17) serves all of them from the one port. Every radio in the roster is opened — each with its own engine, exactly as the GUI would — and each is reachable in its own right:

Address Reaches
/ws the first radio in the roster
/ws/<id> the radio with that roster id, the first one included
/radios the list, as JSON: [{"id":0,"name":"RTL-SDR","path":"/ws/0"}, …]

The id is the one in radios.json, not a position in the list, so deleting a radio never renumbers the others. The server logs which radio is on which address at startup, and curl http://HOST:4950/radios answers the same question from anywhere. A radio that is not plugged in right now still gets its address and keeps trying to attach, the same way it would in the GUI.

One connection operates one radio: the single-client rule is per radio, so two people can work two radios of the same station at once — and a native client makes one connection per radio by itself, so one operator gets the whole station in tabs (8.2). A radio id that the station does not have is refused with a 404 rather than quietly answered by a different radio.

The roster can be changed from a client. A headless station's radios used to be fixed at start-up: adding one meant editing radios.json on that machine and restarting the server, which drops everyone on the air. A signed-in client can now add a radio to the station and close one again — the + and Close on station described in 2.17 — and the station acts on it at once: the new radio gets its own configuration scope, its own engine and its own address, and every client connected is told the roster changed. It arrives with no interface, so the next step is the same as it is in the shack: pick one on the Radio page and press Apply / reconnect. The station's first radio cannot be closed this way; nothing else is protected, so treat the sign-in as what it is — the key to the station, not to one radio.

The interlock applies across the whole station: only one of its radios can transmit at a time, as in the shack. Note that each radio has its own rigctld.json and tciserver.json in its own scope — if you enable those built-in servers on more than one radio, give each a port of its own, or the second one to start finds the address taken.


From the User Manual. Home.

Clone this wiki locally