
All-in-one control room for internet radio
rdio is a self-hosted, all-in-one control room for running a single internet radio station. It combines the station admin UI, schedule automation, live broadcast handoff, and stream delivery into one stack, replacing the need to stitch together separate tools for scheduling, media management, and streaming. The platform is designed for teams that want to own their entire radio infrastructure on their own server rather than relying on a hosted service.
rdio solves the operational complexity of running a station by letting you plan recording and live broadcast slots on a daily calendar with drag-and-drop and conflict detection, upload and organize an audio library, and hand off to live encoders like BUTT while keeping the public stream URL consistent for listeners. It runs on proven, boring infrastructure — a TypeScript admin app, Fastify API, Postgres, Liquidsoap for playout, and Icecast for the public stream — all self-hosted under your control.
Plan recording and live broadcast slots on a daily calendar with drag-and-drop, conflict detection, and automatic playout switching.
Go live by connecting BUTT or another Icecast-compatible encoder to harbor. Presenters connect to harbor while listeners keep the same stream URL.
Upload media to R2, organize programs and hosts, and attach them to schedule slots from one unified control room.
Listen through the built-in player, check live source status, and confirm playout before every show.
Create member accounts with admin and user roles. New members set their own password on first sign-in.
Run the admin app, API, Postgres, Liquidsoap, and Icecast yourself. rdio is the control plane, not a hosted platform.
Built on a TypeScript admin app, Fastify API, Postgres, Liquidsoap for playout, and Icecast for the public stream.
rdio is self-hosted and runs on your own server. The full stack includes the admin app, a Fastify API, Postgres, Liquidsoap for playout, and Icecast for the public stream.
To go live, a presenter connects to harbor using BUTT or another Icecast-compatible encoder. Listeners keep the same stream URL throughout the live handoff.
The admin app is built with TypeScript, the API uses Fastify, and the backend infrastructure is Postgres, Liquidsoap, and Icecast.
Install dependencies with pnpm install, start Postgres, Icecast, and Liquidsoap with docker compose up, run pnpm db:migrate, then launch with pnpm dev. The admin runs at localhost:5173 and the stream at localhost:3001/live.mp3.
Yes. rdio lets you create member accounts with admin and user roles, and new members set their own password on first sign-in.
Yes. rdio hands off to BUTT or any other Icecast-compatible encoder for live broadcasts.