Skip to content

Installation

DatanoiseTV edited this page Jun 18, 2026 · 2 revisions

Installation

TinyIce ships as a single static binary with everything embedded. Pick the method that fits your environment; all of them land you at the same place — a server you reach on port 8000 and configure through the JSON config or the admin UI.

Requires nothing at runtime: no FFmpeg, no GCC, no separate database. The binary is self-contained.

Released binary

# Latest release for your OS/arch
curl -LJO "https://github.com/DatanoiseTV/tinyice/releases/latest/download/tinyice-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m)"
chmod +x tinyice-*
mv tinyice-* tinyice
./tinyice

Releases are published for Linux, macOS, and Windows on amd64 and arm64. Pick a specific version from the releases page if you need to pin.

Docker (GHCR, multi-arch)

Pre-built images for linux/amd64 and linux/arm64 are published on every release tag.

The image listens on 8080 inside the container and reads its config from /data/config.json, so map the port as host:8080 and mount a volume at /data:

docker run --rm -p 8000:8080 -v tinyice-data:/data \
  ghcr.io/datanoisetv/tinyice:latest
# now reachable on http://localhost:8000
Tag Points at
:latest Newest stable release
:beta Newest beta in the current pre-release line
:vX.Y.Z An exact release (e.g. :v2.6.3)
:X.Y / :X Newest patch in a minor / major line

The /data volume holds config.json, history.db, playlists, and ACME certificates, so they survive container restarts. To stream video, also publish the RTMP and/or SRT ports — see Streaming Sources. A ready-to-use Compose file is in Examples and Recipes#docker-compose.

Debian / Ubuntu (.deb) and RHEL/Fedora (.rpm)

Per-arch packages are attached to every GitHub release (amd64/arm64 for .deb, x86_64/aarch64 for .rpm). They install the binary at /usr/bin/tinyice, create a dedicated tinyice system user, lay down /etc/tinyice (config) and /var/lib/tinyice (state), and ship a hardened systemd unit at /lib/systemd/system/tinyice.service.

# Debian / Ubuntu
sudo dpkg -i tinyice_2.6.3_amd64.deb

# RHEL / Fedora / openSUSE
sudo rpm -i tinyice-2.6.3-1.x86_64.rpm

The packaged binary is granted cap_net_bind_service so it can bind 80/443 without root.

The service is installed masked on purpose. A stray systemctl start tinyice or a distro auto-enable hook must not bring up an unconfigured daemon. The post-install message walks you through the safe sequence:

sudo systemctl unmask tinyice
sudo systemctl enable --now tinyice
# then read the generated admin password from the journal:
sudo journalctl -u tinyice | grep -A4 "FIRST RUN"

See Deployment for the full systemd story.

From source

Requires Go 1.25+ and Node.js 20+ (Node is only needed to rebuild the frontend).

git clone https://github.com/DatanoiseTV/tinyice.git
cd tinyice
make build        # rebuild frontend assets, then compile the Go binary
./tinyice
Target Does
make build Frontend (go generate) + Go binary
make generate Frontend assets only
make quick Go binary only (reuse existing dist/)
make dev Vite frontend dev server with hot reload
make clean Remove build artifacts

More in Developing.

Binding ports 80/443 without root

On Linux, grant the file capability instead of running as root:

sudo setcap 'cap_net_bind_service=+ep' ./tinyice

The .deb/.rpm packages and the systemd unit already handle this.

Updating

There is no in-process self-updater — distributions own the binary. To update, replace the artifact you installed:

  • Binary: download the new release and replace the file (use a hot-swap for zero-downtime).
  • Docker: docker pull the new tag and recreate the container.
  • Package: apt upgrade tinyice / dnf upgrade tinyice.

Next: Quick Start to get streaming, then Configuration for the details.

Clone this wiki locally