An open-source studio for internet radio and video stations: a live room with mix-minus, call-in and screening, playout, listener streams, chat and podcasts.
  • Rust 61.2%
  • TypeScript 11.8%
  • Svelte 9.5%
  • Shell 6.7%
  • JavaScript 4.9%
  • Other 5.8%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
The WeaveSignal contributors 466b32ab6a WeaveSignal 1.0.0 — release one
The first public release. What it does: https://weavesignal.top; what changed: CHANGELOG.md.
2026-11-04 12:15:42 +00:00
apps WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
assets WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
crates WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
deploy WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
docs WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
LICENSES WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
packages/ui WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
playout WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
spike WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
tests WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
.containerignore WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
.gitignore WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
Cargo.lock WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
Cargo.toml WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
CHANGELOG.md WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
deny.toml WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
justfile WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
LICENSE WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
NOTICES.md WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
README.md WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
REUSE.toml WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00
SECURITY.md WeaveSignal 1.0.0 — release one 2026-11-04 12:15:42 +00:00

WeaveSignal

WeaveSignal is a studio for an internet radio or video station that you run yourself. Presenters, guests and callers meet in a live room. A desk mixes them, with a mix-minus for each person so nobody hears themselves back. Playout keeps the station on air between shows, and listeners hear it on an ordinary stream, a few seconds behind. The studio app drives the desk, the screener, the cart wall and the schedule. A live chat, show cards, podcast feeds and a public API come with it.

The desk in the studio app: four people on air, a caller cued with a line from the screener, the remote DJ and playout waiting below

Status

Release one, 1.0.0. It runs a station on a Linux server with the Compose bundle, or on Cloudron, with the studio app on Linux or Windows. It has known limits, and some parts of the plan are left for later; both are listed on What release one does, and what it leaves out.

Install

The documentation is at https://weavesignal.top.

To Read
Run a first show, start to finish Run a first show at desk B
Install a station on a Linux server Install a station with weavesignal.sh
Put it on the internet with a certificate Publish a station from the Compose bundle
Install it on Cloudron Install on Cloudron
Install the studio app On Linux, on Windows
See which ports it uses Ports

The install script pulls the published server image (forgejo.weavesignal.top/weavesignal/weavesignal-server:1.0.0); you can build your own from this repository instead. The studio app's packages are at https://weavesignal.top/updates/1.0.0/ and on the repository's v1.0.0 release, with their signatures and checksums. What changed in each release is in CHANGELOG.md.

Where the source lives

What is here

Path What
crates/control The control plane, an Axum service: settings, staff, room tokens, the schedule, retention, the public pages and the public API
crates/desk The desk: finds people in the room by role, mixes the programme and a mix-minus for each, and serves the programme to playout over SRT
crates/mixer Mixing code in plain Rust: compressor, leveller, limiter, the profanity delay, the telephone-line sound, loudness
crates/chat The live chat service
crates/model The data model and its migrations; every row carries a station identifier
crates/proto What the processes share: roles, identity rules, LiveKit access tokens
crates/media The media worker: parses untrusted audio in a restricted process, measures its loudness, writes clean FLAC
crates/cards, crates/feeds Show cards, and podcast feeds
playout/ The fixed Liquidsoap 2.5 scripts; they read generated data, never generated code
apps/studio The studio app: Tauri v2 and Svelte 5 (runes)
apps/web The public pages: the player with call-in and the chat, the join page, the echo test
packages/ui Design tokens, the lamp's states and the panel-name registry, shared by the interfaces
deploy/compose The Compose bundle and weavesignal.sh, which installs it
deploy/quadlets Quadlets for systemd, generated from the bundle
deploy/images The server, desk and edge images
deploy/desktop The studio app's Linux packages, Windows installer and update feed
tests/ The stack tests, the port scan, the install test and the browser runs
docs/ The documentation site (Astro Starlight)
spike/ The first live-room spike's harness and results: measurements, not product code

Build and test

You need Rust 1.98 or later, just and Podman; the interfaces also need pnpm 10 and WebKitGTK 4.1. The desk needs GStreamer 1.28 with gst-plugins-rs. It is built and tested in its own container image, so you do not need GStreamer's development files on your machine.

just --list           # every task, with a line each
just check            # build, test and lint the host crates
podman build -t localhost/weavesignal-desk-spike:dev spike/desk-image   # the desk's base image (once)
just desk-image       # the desk's build image, on that base (once)
just server-image     # the server image the Compose bundle runs
just studio-check     # the studio app: Svelte checks and tests, its build, the Tauri crate
just docs-build       # the documentation site (pnpm 10 first on PATH)
just ci               # every gate, in order

just ci is the whole gate: the host crates, the API description, licences, REUSE, the desk in its image, the Liquidsoap scripts, the database tests, the documentation, the studio app and the public pages, then the stack tests (the room, playout restarts, the video's sound, the carts, the edges, the Compose bundle with its port scan, and the installer). There is no hosted CI. It needs Podman, cargo-deny, pnpm 10, WebKitGTK 4.1, ffmpeg, and the desk and server images (just desk-image server-image).

Licence

The code is AGPL-3.0-only (see LICENSE). The documentation's text and images are CC BY-SA 4.0, and code samples in the documentation stay AGPL-3.0-only. Both texts are in LICENSES/, and REUSE.toml covers files that cannot carry a header. Where anything not ours comes from, and under what licence, is in NOTICES.md.

Security

Please do not report a security problem in a public issue. How to report one is in SECURITY.md; the contact is info@weavesignal.top.