Run it, and you've got a ready Icecast server in seconds.
Notice: This is a side project. Use it at your own risk. While it implements security best practices, it has not undergone an independent audit.
TinyIce is a lightweight, high-performance, and secure Icecast2-compatible streaming server written in Go. It is designed to be self-contained, easy to deploy, and provides a modern web interface for both administrators and listeners.
Traditional streaming servers can be complex to configure and resource-heavy. TinyIce aims to solve this by providing:
- Instant Deployment: A single binary with all assets (templates, icons) embedded.
- Zero-Config Security: Unique secure credentials 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.
- Playback History: Persistent song history stored in a lightweight SQLite database.
- Observability: Built-in Prometheus metrics endpoint and structured logging.
- Icecast2 Compatible: Works with standard source clients (BUTT, OBS, Mixxx, LadioCast) and players (VLC, web browsers).
- Approval Workflow: New streams are hidden by default until approved by an administrator.
- Stream Relaying: Act as an edge node by pulling streams from remote servers.
- Dual-Protocol Architecture: Handles HTTPS for listeners while allowing legacy encoders to stream over plain HTTP.
- Playback Tracking: View the last 100 songs played per station in the admin dashboard.
- Public Directory Listing: Built-in support for 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: Support for
/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.
Requires Go 1.21 or later.
go build -o tinyice./tinyiceOn the first run, TinyIce will generate tinyice.json with unique random passwords. Save them from the terminal!
Point your encoder (e.g., BUTT) to:
- Server Type: Icecast 2
- Address: your-server-ip
- Port: 8000
- Password: [The generated source password]
- Mount: /live
./tinyice -host 0.0.0.0 -port 8000 -daemon -log-file tinyice.log-host: Network interface to bind to (default: "0.0.0.0").-config: Path to the configuration file.-log-file: Path to a file for log output.-log-level:debug,info,warn,error.-json-logs: Enable structured JSON logging.-daemon: Run in the background.-pid-file: Path to write the process ID.
See PERFORMANCE.md for detailed hardware and traffic estimates.
Distributed under the Apache License 2.0. See LICENSE for more information.
Developed by DatanoiseTV