TinyIce: Single-binary Icecast2-compatible server (auto-HTTPS, multi-tenant)
Source: Hacker News
TinyIce ❄️
Run it, and you’ll have a ready Icecast server in seconds.
Notice: This is a side project. Use it at your own risk. While it follows security best‑practice guidelines, it has not undergone an independent audit.
TinyIce is a lightweight, high‑performance, and secure Icecast 2‑compatible streaming server written in Go. It is self‑contained, easy to deploy, and provides a modern web interface for both administrators and listeners.
Screenshots
![]() | ![]() |
|---|---|
| Dashboard | Player |
Badges
Why TinyIce?
Traditional streaming servers can be complex to configure and resource‑heavy. TinyIce solves this by providing:
- Instant Deployment – a single binary with all assets (templates, icons) embedded.
- Zero‑Config Security – unique secure credentials are automatically generated on first run.
- Multi‑Tenant Ready – create multiple admin users who can only manage their own mount points.
- Edge‑Ready Relaying – pull streams from other servers with automatic reconnection and in‑stream ICY metadata parsing.
- Secure & Hardened – salted bcrypt password hashing, CSRF protection, and HTTP resource hardening.
- Auto‑HTTPS – built‑in support for ACME (Let’s Encrypt) for zero‑configuration SSL certificates.
- Real‑time Insights – SSE‑powered dashboards with smooth, hardware‑accelerated traffic charts.
- Observability – built‑in Prometheus metrics endpoint and structured logging.
Features {#features}
- Icecast2 compatible – works with standard source clients (BUTT, OBS, Mixxx, LadioCast) and players (VLC, web browsers).
- Stream relaying – act as an edge node by pulling streams from remote servers.
- Dual‑protocol architecture – serves HTTPS to listeners while allowing legacy encoders to stream over plain HTTP.
- Public directory listing – built‑in support for the Icecast YP protocol (e.g.,
dir.xiph.org). - Dynamic management – add, update, disable, or remove mount points, users, and relays on the fly.
- IP banning – instantly block malicious IPs from streaming or listening.
- Legacy API – supports
/status-json.xslfor compatibility with existing Icecast tools. - Now‑playing metadata – real‑time display of song titles pushed from broadcast software or pulled from relays.
Getting Started
1. Build
Requirements: Go 1.21 or later.
go build -o tinyice
2. Run
./tinyice
On the first run, TinyIce will generate a tinyice.json file containing unique random passwords. Make sure to copy and save those passwords from the terminal output!
3. Stream
Configure your encoder (e.g., BUTT) with the following settings:
| Setting | Value |
|---|---|
| Server Type | Icecast 2 |
| Address | your-server-ip |
| Port | 8000 |
| Password | The generated source password |
| Mount | /live |
Now you’re ready to start streaming!
Command Line Usage
./tinyice -host 0.0.0.0 -port 8000 -daemon -log-file tinyice.log
| Option | Description | Default |
|---|---|---|
-host | Network interface to bind to | 0.0.0.0 |
-port | Port number to listen on | — |
-config | Path to the configuration file | — |
-log-file | Path to a file for log output | — |
-log-level | Logging level: debug, info, warn, error | — |
-json-logs | Enable structured JSON logging | — |
-daemon | Run the program in the background | — |
-pid-file | Path to write the process ID | — |
Performance
See the PERFORMANCE.md file for detailed hardware and traffic estimates.
License
Distributed under the Apache License 2.0. See the LICENSE file for more information.
Developed by DatanoiseTV.

