Skip to content

Releases: tltv-org/cli

tltv-cli v1.17.1

14 Apr 13:51

Choose a tag to compare

tltv-cli v1.17.1

Hardening release for relay resilience, safer self-updates, and smoother viewer/operator workflows.

Changes

  • Relay resilience and cache tuning — the relay now retries initial upstream discovery instead of failing fast on transient startup races, and the cache hit path reduces read contention under load. Local 500-receiver benchmarking cut segment latency from p95/p99 22/171 ms to 11/123 ms.

  • Safer release and ops workflowtltv update now verifies release archives against checksums.txt before replacing the binary. Daemons reopen --log-file targets on SIGHUP, Docker images ship with a basic HEALTHCHECK, and /health responses now include the running CLI version.

  • Viewer and CLI metadata polish — relayed icons preserve their real image content type, /api/info includes icon_data for the active viewer icon path, and shell completion/help output now covers mirror, machine-readable completion --flags, and the v1.17 short-flag cleanup.


Docker image: ghcr.io/tltv-org/cli:v1.17.1

docker pull ghcr.io/tltv-org/cli:v1.17.1

tltv-cli v1.17.0

13 Apr 21:58

Choose a tag to compare

tltv-cli v1.17.0

Production web viewer, standalone portal, and router upgrades.

Changes

  • Production viewer (--viewer) — Phosphor-matching dark theme with HLS.js player, SVG icon controls, EPG guide grid with per-channel program blocks, relay badge from signed origins, tltv:// URI display with click-to-copy, audio/subtitle track selectors, stall detection with auto-recovery, and mobile responsive layout. Replaces the previous debug viewer as the default; the original diagnostic viewer is now --debug-viewer.

  • Standalone portal (tltv viewer) — Freeform tune box with federated resolution. Tune by hostname to discover all channels, or by tltv:// URI for a specific channel. Saved channels persist in browser localStorage with optional file-backed persistence via --saved-channels. Icons fetched as base64 data-URIs at resolve time. SSRF-safe resolve when listening on non-loopback addresses.

  • Viewer display config--viewer-title sets the nav bar label, --no-viewer-footer hides the footer links. Available on all daemons.

  • Router path-prefix routing--route host/prefix=backend dispatches by longest-prefix match within a hostname. Multi-backend round-robin with --route host=backend1,backend2. Config routes support arrays and path prefixes. Lock-free hot-reload via atomic pointer swap with automatic ACME cert provisioning for new hostnames.

  • Debug viewer enhancements — Per-variant stream sections with resolution, bandwidth, codecs, and live stats. Audio/subtitle track listing. Origins field and on_demand in channel section. Guide shows updated and seq fields. Single-rendition channels skip empty variant section.

  • Security hardening — SSRF-safe /api/resolve on non-local listeners, token leak prevention (no upstream URLs in browser JSON), portal timer leak fix, private embedded viewer token propagation via shared withToken() helper.

  • Audio-only overlay — Music note SVG with label shown when playing audio-only channels, on both production and debug viewers.

  • 661 tests — 19 new viewer infrastructure tests, 11 new server viewer tests, 39 new router tests, 3 new mirror tests.


Docker image: ghcr.io/tltv-org/cli:v1.17.0

docker pull ghcr.io/tltv-org/cli:v1.17.0

tltv-cli v1.16.0

12 Apr 15:13

Choose a tag to compare

tltv-cli v1.16.0

TLTV-to-TLTV content flow: bridge channels from the network, mirror origins for same-key failover.

Changes

  • Bridge TLTV sourcestltv:// URIs are now valid bridge inputs. Rebroadcast another channel under your own identity with automatic relay_from attribution and token passthrough. Re-resolves upstream metadata every poll cycle.

  • Single-key bridge mode--key FILE (-k) for single-channel bridge operation, as an alternative to --keys-dir for multi-channel setups.

  • Mirror daemontltv mirror replicates a channel from its primary origin using the same private key (spec §10.8). Passive mode serves the primary's signed metadata verbatim and proxies the HLS stream. After consecutive poll failures, automatically promotes to active signer with sequence continuity. State persists across restarts.

  • Status page background — Fixed status page CSS so the black background extends to the full viewport height, even when content is short.


Docker image: ghcr.io/tltv-org/cli:v1.16.0

docker pull ghcr.io/tltv-org/cli:v1.16.0

tltv-cli v1.15.0

12 Apr 01:18

Choose a tag to compare

tltv-cli v1.15.0

Changes

  • SNI router (tltv router) — lightweight L7 reverse proxy with built-in ACME TLS. Routes HTTPS by Host header, auto-issues Let's Encrypt certs for each hostname, health checks backends. Eliminates nginx/traefik/caddy. Config file or --route flags with hot-reload.

  • Multi-domain ACME cert store — the ACME client now manages certificates for multiple hostnames from a single process. Shared across router, server, bridge, and relay when TLS is enabled. Per-domain issuance and renewal.

  • Node failover — viewer, receiver, and relay upstream automatically cascade through known nodes when the connected node becomes unreachable. Tier-aware ordering: relays try other relays first then origins, origins try other origins first then relays. Draws candidates from signed origins, peer exchange, and URI hints.

  • Buffered relay (--buffer, --delay) — proactively fetches and stores segments in a per-channel ring buffer. --buffer 2h provides origin-down resilience (relay keeps serving from buffer). --delay 30m enables time-shifted rebroadcast. Memory-limited with --buffer-max-memory.

  • Custom stream composition — the test signal server now supports arbitrary HLS media configurations:

    • --audio-tracks "rock:440,jazz:880" — demuxed alternate audio tracks with #EXT-X-MEDIA TYPE=AUDIO
    • --audio-only — pure audio channels (no video)
    • --no-audio — video-only mode (digital signage)
    • --subtitles "clock,counter,lorem" — WebVTT subtitle tracks with #EXT-X-MEDIA TYPE=SUBTITLES
    • --program-date-timeEXT-X-PROGRAM-DATE-TIME tags for DVR-style seeking
  • Viewer track selection — the web viewer now shows audio and subtitle track selectors when the stream includes alternate media. Channel picker grid for multi-channel nodes.

  • Hardened private playback — token-gated viewer routes, relay config reload fixes, bridge guide state sync, loadtest verification wiring.

569 tests. Run make test to verify.


Docker image: ghcr.io/tltv-org/cli:v1.15.0

docker pull ghcr.io/tltv-org/cli:v1.15.0

tltv-cli v1.14.0

11 Apr 02:37

Choose a tag to compare

tltv-cli v1.14.0

Origin verification from signed metadata, multi-channel server, multi-rendition HLS, protocol conformance hardening, and full metadata field parity.

Security & Conformance

  • Origin verification — the origins field in signed channel metadata (spec §11) is now used as the source of truth for origin vs relay determination. The unsigned /.well-known/tltv discovery document is trivially spoofable with a reverse proxy. tltv info, tltv resolve, and the viewer now annotate each channel: (origin) when the connected hostname matches signed origins, (relay — real origin is X) for honest relays, and (spoofed origin — real origin is X) when discovery claims origin but signed metadata disagrees. JSON output includes verified_origin, signed_origins, and origin_warning fields.

  • Constant-time token comparison — access token validation now uses subtle.ConstantTimeCompare to prevent timing side-channels.

  • Client protocol conformancecheckV1Support() validates protocol v1 in the node's versions array before proceeding. checkAccessMode() rejects unknown access values per spec §5.2. Both checks are wired into all client entry points (info, channel, viewer, receiver).

  • Token format validationvalidateToken() enforces RFC 3986 unreserved characters and a 256-char limit on server and bridge startup.

Server

  • Multi-channel server--channels N generates N independent channels, each with its own key, segmenter, metadata, guide, and test pattern. Key management: --key applies to channel 1, channels 2+ auto-generate keys.

  • Multi-rendition server--variants 1080p,720p,360p generates an HLS master playlist with per-variant media playlists and segments. Bandwidth measured from actual segment size, codec tag derived from H.264 level. Works with --channels for multi-channel × multi-rendition.

  • Private channels--access token and --token for access-controlled channels. --on-demand marks channels as on-demand. Private channels are excluded from /.well-known/tltv. Referrer-Policy: no-referrer and Cache-Control: private, no-store headers on all private responses.

  • Metadata field parity--description, --tags, --language, --timezone, --icon on server and bridge. Guide relay_from field (spec §6.3). Default TLTV logo SVG icon served at the protocol icon path when no --icon is provided.

Client

  • Receiver master playlist supportparseMasterPlaylist() detects master playlists, selectVariant() picks the rendition by quality preference. --quality flag: best (default), worst, or a resolution like 720p. Wired through to loadtest.

  • Viewer relay badge — a "relay" badge appears in the viewer controls bar when the connected node is not an origin (determined from signed metadata). The badge turns yellow when a spoofed origin is detected.

  • Viewer channel selector — dropdown for multi-channel servers, switches via ?channel=id. Quality selector for multi-rendition streams. Curated metadata display (description, language, timezone, tags, icon).

  • --proxy flag — SOCKS5/HTTP/HTTPS proxy support on relay, bridge, receiver, and loadtest. Not available on the SSRF-safe client (security invariant).

Other

  • Short flag aliases — every flag across all commands now has long form, short form, and env var. No exceptions.

  • Discovery fixparseTargetOrDiscover now checks both channels[] and relaying[] arrays. Relay-only nodes previously failed bare hostname discovery.


Docker image: ghcr.io/tltv-org/cli:v1.14.0

docker pull ghcr.io/tltv-org/cli:v1.14.0

tltv-cli v1.13.2

09 Apr 14:28

Choose a tag to compare

tltv-cli v1.13.2

Nav bar polish and private origins documentation.

Changes

  • Nav bar SVG wordmark — replaced text-based nav bar label with the proper SVG wordmark, matching Phosphor's design. Hidden scrollbars across all web surfaces (viewer, status page).

  • Private origins documentation — documented the --hostname omission pattern: running a server or bridge without --hostname creates a private origin whose address cannot be discovered by relays or peers. Updated README, help text, and docs for both server and bridge.


Docker image: ghcr.io/tltv-org/cli:v1.13.2

docker pull ghcr.io/tltv-org/cli:v1.13.2

tltv-cli v1.13.1

09 Apr 04:08

Choose a tag to compare

tltv v1.13.1

Fix viewer stream stats flashing and unify the web page template.

Changes

  • Fix viewer stream flashing — stream fields (bitrate, buffer, resolution) no longer disappear on each HLS manifest reload. All fields are built once with stable element IDs and updated in-place.

  • Unified web template — shared pageHead() and pageNav() used by both the viewer and status page. Logo + "tltv" mark on the left, page title on the right. Same pattern for any future pages.


Docker image: ghcr.io/tltv-org/cli:v1.13.1

docker pull ghcr.io/tltv-org/cli:v1.13.1

tltv-cli v1.13.0

09 Apr 03:34

Choose a tag to compare

tltv v1.13.0

Unified CLI with new info command, --watch auto-refresh, and consistent section layout across CLI, viewer, and status page.

Changes

  • Rename fetchchannel — section name matches command name. Same fields, same data, new name. fetch is removed.

  • tltv info command — show all info about a target in one shot. info host:port shows node section only; info tltv://id@host shows all 5 sections (channel, stream, guide, node, peers). Active channel marked with > in node list.

  • --watch mode — auto-refresh on all 6 network commands (info, channel, stream, guide, node, peers). Default 2s interval, --interval to customize. Ctrl-C to exit.

  • Stream manifest parsingtltv stream now shows Content-Type, segment count, target duration, and media sequence from the HLS manifest.

  • Channel output: curated fields + remaining — shows Verified, Name, URI, Status, Access, Stream, Guide, XMLTV, Updated, Seq in defined order, then dumps any additional document keys. Missing optional fields are omitted. Future-proof against new spec fields.

  • Viewer section reformat — sections reordered to channel → stream → guide → node → peers. Channel uses curated fields instead of alphabetical key dump. Stream shows manifest-derived fields (segments, target duration, media sequence). Guide shows verified status, URLs, from/until, entry count with now-playing marker. Node shows combined "tltv protocol v1" with labeled Origin/Relay subsections.

  • Status page — when a daemon runs without --viewer, GET / returns a static HTML status page with nav bar and node section. Same Phosphor Dark design. No video, no JS.

  • Peers self-exclusion — relay and bridge no longer include their own channels in /tltv/v1/peers. Own channels are visible via /.well-known/tltv. Peers shows the network around the node.

  • Help text rewrite — new command categories: Network, Discovery, Servers, Clients, Identity, Documents, URIs, Tools.


Docker image: ghcr.io/tltv-org/cli:v1.13.0

docker pull ghcr.io/tltv-org/cli:v1.13.0

tltv-cli v1.12.5

08 Apr 23:02

Choose a tag to compare

tltv-cli v1.12.5

Debug viewer now shows full node and peer info.

Changes

  • Node info section — viewer fetches /.well-known/tltv and displays protocol, versions, channels, and relaying lists. Shows "via origin" or "via relay" next to the verified checkmark.

  • Peers section — viewer fetches /tltv/v1/peers and displays all peers with their hints.

  • Full clickable URLs — guide, stream, and xmltv links expand to full URLs using window.location.origin for embedded viewers.

  • Unified viewer — standalone tltv viewer and embedded --viewer render the same sections from the same JS, fetching protocol endpoints directly via CORS.


Docker image: ghcr.io/tltv-org/cli:v1.12.5

docker pull ghcr.io/tltv-org/cli:v1.12.5

tltv-cli v1.12.4

08 Apr 22:40

Choose a tag to compare

tltv-cli v1.12.4

Viewer fixes: full URLs, config file support, relay/bridge indicator.

Changes

  • Full URLs in viewer — embedded viewer now expands relative paths (guide, stream, xmltv) to full clickable URLs using window.location.origin. All three links are now consistently clickable.

  • Config file support for --viewer"viewer": true or "viewer": "TVabc..." in daemon config files. Precedence: CLI flag > config file > VIEWER env var.

  • Via indicator — relay viewer shows "via relay", bridge shows "via bridge" in the channel info section, so it's clear the stream is proxied.


Docker image: ghcr.io/tltv-org/cli:v1.12.4

docker pull ghcr.io/tltv-org/cli:v1.12.4