Every path to a running icey-server. Pick the one that fits your environment.
The fastest path. No build tools, no system dependencies.
docker run --rm --network host 0state/iceyOpen http://localhost:4500.
For production, pin the version:
docker run --rm --network host 0state/icey:0.1.1If you need to pass a config file or mount a source directory:
docker run --rm --network host \
-v /path/to/config.json:/etc/icey-server/config.json \
-v /path/to/media:/media \
0state/icey \
--config /etc/icey-server/config.json \
--source /media/video.mp4Download a prebuilt binary from the GitHub releases page.
Linux x86_64:
curl -L https://github.com/nilstate/icey-cli/releases/latest/download/icey-server-Linux-x86_64.tar.gz \
| tar xz
cd icey-server-*
./bin/icey-server --source /path/to/video.mp4The release binary requires OpenSSL and FFmpeg libraries on the host. If you get missing library errors, install them first or use the Docker path.
brew tap nilstate/icey
brew install icey-server
icey-server --source /path/to/video.mp4curl -fsSL https://apt.0state.com/icey/icey-archive-keyring.gpg \
| sudo tee /usr/share/keyrings/icey-archive-keyring.gpg >/dev/null
curl -fsSL https://apt.0state.com/icey/icey-server.list \
| sudo tee /etc/apt/sources.list.d/icey-server.list >/dev/null
sudo apt update
sudo apt install icey-servericey-server --source /path/to/video.mp4yay -S icey-server
icey-server --source /path/to/video.mp4nix run github:nilstate/icey-cli -- --source /path/to/video.mp4Build icey-server against a local icey checkout:
Clone both repos
git clone https://github.com/nilstate/icey.git
git clone https://github.com/nilstate/icey-cli.gitBuild the server
cd icey-cli
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DICEY_SOURCE_DIR=../icey
cmake --build build --target icey-serverBuild the web UI
cd web
npm install
npm run build
cd ..Run it
./build/src/server/icey-server --web-root web/dist --source /path/to/video.mp4Prerequisites: CMake 3.21+, a C++20 compiler, OpenSSL 3.x, FFmpeg 5+/6+/7+, Node.js (for the web UI build). libdatachannel is fetched automatically.
Regardless of install method, you get a single icey-server binary. It serves the web UI, runs Symple signalling, handles WebRTC sessions, and optionally runs an embedded TURN relay. No external services required.
Release tarballs and Debian packages bundle the web UI under share/icey-server/web. icey-server will auto-discover that packaged path when ./web/dist is not present, so the packaged binary can run without an extra --web-root flag.
Default ports:
| Service | Port |
|---|---|
| HTTP / WebSocket | 4500 |
| TURN relay | 3478 |
Both are configurable via CLI flags or config file. See the CLI reference and config guide.
If you want to use icey as a library in your own C++ project rather than running the server, see the build guide. That covers FetchContent, CMake targets, and linking individual modules.