Skip to content

Releases: nilicule/rustyIce

v1.0.3

21 May 07:19

Choose a tag to compare

Fixed

  • Linux release binaries and .deb / .rpm packages are now built with cargo-zigbuild against glibc 2.17, so they run on older distributions such as CentOS/RHEL 7 — previously they failed at startup with GLIBC_2.xx not found.

Removed

  • Dropped the Intel macOS (darwin-amd64) prebuilt binary; GitHub retired the macos-13 build runner. Apple Silicon (darwin-arm64) builds remain.

Full Changelog: v1.0.2...v1.0.3

v1.0.2

21 May 07:11

Choose a tag to compare

  • Resolving Linux dependency issues

v1.0.1

20 May 22:03

Choose a tag to compare

  • Adding link to Github repo on public page

Full Changelog: v1.0.0...v1.0.1

v1.0.0

20 May 21:37

Choose a tag to compare

Added

Admin console — full config editor

  • New #admin/config view with per-section editors for server, transcode, mounts, relays, autodjs, and users. Saves go through PUT /api/config/<section>, round-trip via toml_edit to preserve comments and key order, write atomically, and apply through the same diff pipeline SIGHUP uses (sharing a write lock to avoid races).
  • Mounts / relays / autodjs / users use a collapsed list with one-at-a-time inline editing and an in-row confirm prompt for removal. Blank password fields resolve to the existing values server-side, so editing one entry doesn't require re-entering everyone else's secrets.
  • AutoDJ folders are picked via a server-side filesystem browser (BROWSE…); a browser file picker would point at the operator's machine, not the server.
  • apply_config now adds and removes mounts at runtime to match [[mounts]] — previously only metadata updates worked without a restart.

Role-based access

  • [[auth.users]] entries gain role = "admin" | "operator" (missing role defaults to admin, so existing configs upgrade cleanly). Operators can edit mounts, autodjs, and relays; admin-only sections are hidden from their sidebar, write attempts return 403, and GET /api/config strips those fields server-side.
  • The logged-in admin can't remove or demote themselves, and the user list is rejected if it contains no admins at all.

Fixed

  • Listener disconnects (broken pipe / connection reset) now log at debug instead of warn — that's normal player behavior, not a server problem.

v0.3.0

15 May 21:46

Choose a tag to compare

Added

Relay

  • New [[relays]] config block — each entry pulls from a remote Icecast-compatible URL and re-broadcasts on a local mount. Optional HTTP Basic auth, optional per-relay [relays.transcode] (falls back to global [transcode], passthrough when unset).
  • Reconnect-on-failure with exponential backoff (1 s → 30 s cap). Resets on successful connect.
  • Live Icecast sources connecting to a relay-owned mount preempt the relay until they disconnect, then the relay reconnects automatically. /api/mounts exposes source_kind = "relay" to disambiguate from live and AutoDJ sources.

Stream detail page

  • Public per-stream detail page, reached by clicking a stream on the landing page (landing entries now open this page instead of the raw stream URL).
  • Built-in in-browser player — a custom play/stop control driving an HTML5 <audio> element, with an offline state for mounts with no live source.
  • Real-time audio visualizer with a bars (frequency spectrum) / line (oscilloscope waveform) toggle, driven by the Web Audio API; synthetic-motion fallback when Web Audio is unavailable.
  • Now-playing card showing the live title, description, genre, listener count, uptime, and a compact codec / bitrate / sample-rate / channels spec line.
  • Stream responses now send Access-Control-Allow-Origin: * so the browser can analyse the audio cross-origin for the visualizer.

Fixed

  • Suppress symphonia_metadata INFO noise from the default logger so AutoDJ folders with tagged audio no longer flood the console with unsupported frame GEOB (and similar) lines.
  • Live sources can now preempt an AutoDJ or Relay on a mount that has no [[mounts]] entry of its own. verify_source falls back to the global [auth].source_password when no per-mount password is configured — previously such PUTs were always rejected with 401, so the live-source preemption promised by the AutoDJ feature never actually worked.

v0.2.0

15 May 18:43

Choose a tag to compare

Added

Server

  • Show clickable admin link under banner when starting up server.

AutoDJ

  • New [[autodjs]] config block — each entry registers its own mount and plays a folder of MP3 / Ogg Vorbis files automatically
  • Recursive folder scan, rescanned + reshuffled at the end of each loop pass so files added between passes are picked up.
  • Live Icecast sources connecting to an AutoDJ-owned mount preempt the rotation: the AutoDJ releases the slot, parks, and resumes from the next track once the live source disconnects.
  • Admin kick-source on an AutoDJ mount cancels the current track (skip-track semantics).

Fixed

  • Classic Icecast-2 source clients (libshout 2.x via Mixxx, EdCast, …) now receive an upfront HTTP/1.0 200 OK so they actually start streaming audio instead of hanging in SHOUT_STATE_RESP and disconnecting with zero bytes.
  • Source-protocol handler now decodes HTTP/1.1 Transfer-Encoding: chunked request bodies. Previously chunked PUTs would hang indefinitely as the handler couldn't see end-of-body.

v0.1.0

15 May 10:20

Choose a tag to compare

  • Icecast2-compatible source ingest (SOURCE and PUT)
  • MP3 and Ogg Vorbis streaming with automatic bitrate detection and real-time pacing
  • Burst-on-connect — new listeners get an immediate prefill of recent audio (Icecast-compatible burst_size, default 64 KiB, per-mount override)
  • Transcoding — decode/re-encode to a consistent output; per-mount or global, passthrough when unset. Any combination of MP3 / Ogg Vorbis source and MP3 / Ogg Vorbis target.
  • Per-mount source passwords, plus an optional global password for dynamic mounts
  • Public landing page with one-click playback
  • Admin dashboard + REST API — kick-source / kick-listener, per-mount listener detail, Prometheus /metrics
  • Hot-reload via SIGHUP — no listener drops
  • Single static binary, async (Tokio), with an optional config file (boots on sensible defaults with randomly-generated credentials when none is provided)

Full Changelog: https://github.com/nilicule/rustyIce/commits/v0.1.0