Skip to main content

Develop

Three different things are called developing on deadair, and they need different amounts of this repository.

Write a plugin​

You need a running station and Node. You do not need a checkout. A plugin is built with plain npm against the published SDK, packed with npm pack, and imported from the console's Plugins page. Music providers, enrichment sources, charts, speech engines, models and news are all plugins, and so is everything bundled with the station.

Start at Your first plugin, which copies a real, working example and has it on the air in six steps.

Build on the API​

You need a station and an API key. Every station serves the same HTTP API: the console is built on it, and so are the Android, desktop and iOS listeners. Anything that reads what is playing, drives the desk from a keypad, or puts a now-playing widget on a web page is an API client.

Start at Build on the API for a key and a first request, and go to the API reference for every route.

Contribute to the station​

You need a checkout, Docker and about ten minutes. The station is a pnpm and Turborepo monorepo: a Koa API, a React console, the plugin SDK and the bundled plugins, with Liquidsoap, Icecast, PostgreSQL, Redis and the measurement sidecar running beside it in containers.

  • Setting up a checkout is the walkthrough, from clone to the console asking you to create an administrator.
  • How it fits together is what owns what, and where to read more before changing any of it.
  • Contributing is the rules a pull request is measured against, and how a release is cut.

Where the arguments are​

Long-form reasoning lives with the code rather than on this site: CLAUDE.md at the root of the repository is an index of scoped files, and docs/internals/ holds one file per subsystem. Most of those paragraphs exist because the obvious fix was shipped first and was wrong, so they are worth reading before changing the thing they describe.

Work that was designed against the real tree and then deliberately deferred is in the Ideas discussions, labelled by subsystem. Read it before designing a feature from scratch: the call may already have been made.