{"id":44980144,"url":"https://github.com/datanoisetv/tinyice","last_synced_at":"2026-02-25T00:01:59.720Z","repository":{"id":339112582,"uuid":"1160504282","full_name":"DatanoiseTV/tinyice","owner":"DatanoiseTV","description":"A tiny audio streaming server (compatible with icecast2) written in Go with multiple mountpoint, multi-source, and relaying support and a lot more.","archived":false,"fork":false,"pushed_at":"2026-02-21T22:27:45.000Z","size":12599,"stargazers_count":219,"open_issues_count":0,"forks_count":6,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-02-22T00:33:25.754Z","etag":null,"topics":["audio","icecast","icecast-server","icecast2","streaming","streaming-audio","streaming-server"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DatanoiseTV.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-18T02:46:03.000Z","updated_at":"2026-02-21T22:25:35.000Z","dependencies_parsed_at":"2026-02-22T22:02:18.834Z","dependency_job_id":null,"html_url":"https://github.com/DatanoiseTV/tinyice","commit_stats":null,"previous_names":["datanoisetv/tinyice"],"tags_count":205,"template":false,"template_full_name":null,"purl":"pkg:github/DatanoiseTV/tinyice","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DatanoiseTV%2Ftinyice","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DatanoiseTV%2Ftinyice/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DatanoiseTV%2Ftinyice/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DatanoiseTV%2Ftinyice/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DatanoiseTV","download_url":"https://codeload.github.com/DatanoiseTV/tinyice/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DatanoiseTV%2Ftinyice/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29729030,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-22T20:09:16.275Z","status":"ssl_error","status_checked_at":"2026-02-22T20:09:13.750Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio","icecast","icecast-server","icecast2","streaming","streaming-audio","streaming-server"],"created_at":"2026-02-18T18:04:42.229Z","updated_at":"2026-02-23T23:01:00.522Z","avatar_url":"https://github.com/DatanoiseTV.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TinyIce ❄️\n\n**Run it, and you've got a ready Icecast server in seconds.**\n\n\u003e **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.\n\nTinyIce 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.\n\n\u003cimg width=\"3024\" height=\"1508\" alt=\"image\" src=\"https://github.com/user-attachments/assets/aca35b42-d93c-4ccc-86a1-365121cae74e\" /\u003e\n\u003cimg width=\"3024\" height=\"1508\" alt=\"image\" src=\"https://github.com/user-attachments/assets/8637a012-0fad-4018-98a5-5abb5d357fde\" /\u003e\n\u003cimg width=\"3024\" height=\"1508\" alt=\"image\" src=\"https://github.com/user-attachments/assets/4d5f339c-f1dd-49cb-a196-7dc6dad48331\" /\u003e\n\u003cimg width=\"3024\" height=\"1852\" alt=\"image\" src=\"https://github.com/user-attachments/assets/d3278890-4f5f-4536-aa88-5fd19518ca3d\" /\u003e\n\n\n[![Go Report Card](https://goreportcard.com/badge/github.com/DatanoiseTV/tinyice)](https://goreportcard.com/report/github.com/DatanoiseTV/tinyice)\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\n## Why TinyIce?\n\nTraditional streaming servers can be complex to configure and resource-heavy. TinyIce aims to solve this by providing:\n\n-   **Instant Deployment**: A single binary with all assets (templates, icons) embedded.\n-   **Zero-Config Security**: Unique secure credentials automatically generated on first run.\n-   **Multi-Tenant Ready**: Create multiple admin users who can only manage their own mount points.\n-   **Edge-Ready Relaying**: Pull streams from other servers with automatic reconnection and in-stream ICY metadata parsing.\n-   **Secure \u0026 Hardened**: Salted **bcrypt** password hashing, CSRF protection, and HTTP resource hardening.\n-   **Auto-HTTPS**: Built-in support for **ACME (Let's Encrypt)** for zero-configuration SSL certificates. Supports custom ACME CAs (e.g., Step-CA) for homelab environments.\n-   **Real-time Insights**: SSE-powered dashboards with smooth, hardware-accelerated traffic charts.\n-   **Playback History**: Persistent song history stored in a lightweight SQLite database.\n-   **Observability**: Built-in **Prometheus** metrics endpoint and structured logging.\n\n## Features\n\n-   **Icecast2 Compatible**: Works with standard source clients (BUTT, OBS, Mixxx, LadioCast) and players (VLC, web browsers).\n-   **Approval Workflow**: New streams are hidden by default until approved by an administrator.\n-   **Stream Relaying**: Act as an edge node by pulling streams from remote servers.\n-   **Dual-Protocol Architecture**: Handles HTTPS for listeners while allowing legacy encoders to stream over plain HTTP.\n-   **Playback Tracking**: View the last 100 songs played per station in the admin dashboard.\n-   **M3U8 Support**: Support for `.m3u8` and `.m3u` playlists for easy integration with external players (VLC, mobile apps).\n-   **Public Directory Listing**: Built-in support for Icecast YP protocol (e.g., `dir.xiph.org`).\n-   **Dynamic Management**: Add, update, disable, or remove mount points, users, and relays on the fly.\n-   **IP Banning**: Instantly block malicious IPs from streaming or listening.\n-   **Legacy API**: Support for `/status-json.xsl` for compatibility with existing Icecast tools.\n-   **Now Playing Metadata**: Real-time display of song titles pushed from broadcast software or pulled from relays.\n\n## Getting Started\n\n### 1. Build\nRequires Go 1.21 or later.\n```bash\ngo build -o tinyice\n```\n\n### 2. Run\n```bash\n./tinyice\n```\nOn the **first run**, TinyIce will generate `tinyice.json` with unique random passwords. **Save them from the terminal!**\n\n### 3. Stream\nPoint your encoder (e.g., BUTT) to:\n-   **Server Type**: Icecast 2\n-   **Address**: your-server-ip\n-   **Port**: 8000\n-   **Password**: [The generated source password]\n-   **Mount**: /live\n\n## Configuration\n\nTinyIce uses a JSON configuration file (`tinyice.json`). Below are the available options:\n\n```json\n{\n    \"bind_host\": \"0.0.0.0\",\n    \"port\": \"8000\",\n    \"base_url\": \"https://radio.example.com\",\n    \"page_title\": \"TinyIce\",\n    \"page_subtitle\": \"Live streaming network powered by Go\",\n    \"use_https\": true,\n    \"auto_https\": true,\n    \"https_port\": \"443\",\n    \"acme_email\": \"admin@example.com\",\n    \"acme_directory_url\": \"\",\n    \"domains\": [\"radio.example.com\"],\n    \"max_listeners\": 100,\n    \"directory_listing\": true,\n    \"directory_server\": \"http://dir.xiph.org/cgi-bin/yp-cgi\",\n    \"low_latency_mode\": false,\n    \"banned_ips\": []\n}\n```\n\n### Custom ACME (Homelab)\nTo use TinyIce with a custom ACME CA (like Step-CA or Smallstep) in a homelab environment, set the `acme_directory_url` in your config:\n\n```json\n{\n    \"auto_https\": true,\n    \"acme_directory_url\": \"https://ca.internal/acme/acme/directory\",\n    \"acme_email\": \"admin@homelab.local\",\n    \"domains\": [\"radio.homelab.local\"]\n}\n```\n\n## Command Line Usage\n\n```bash\n./tinyice -host 0.0.0.0 -port 8000 -daemon -log-file tinyice.log\n```\n\n-   `-host`: Network interface to bind to (default: \"0.0.0.0\").\n-   `-config`: Path to the configuration file.\n-   `-log-file`: Path to a file for log output.\n-   `-log-level`: `debug`, `info`, `warn`, `error`.\n-   `-json-logs`: Enable structured JSON logging.\n-   `-daemon`: Run in the background.\n-   `-pid-file`: Path to write the process ID.\n\n## Performance\n\nSee [PERFORMANCE.md](PERFORMANCE.md) for detailed hardware and traffic estimates.\n\n## Contributing\n\nContributions are welcome! Please see [DEVELOPERS.md](DEVELOPERS.md) for an architectural overview, tech stack details, and onboarding guide.\n\n## License\n\nDistributed under the Apache License 2.0. See `LICENSE` for more information.\n\n---\nDeveloped by [DatanoiseTV](https://github.com/DatanoiseTV)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatanoisetv%2Ftinyice","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdatanoisetv%2Ftinyice","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatanoisetv%2Ftinyice/lists"}