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.
On 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