every.channel/evolution/proposals/ECP-0068-iroh-control-web-directory-bridge.md

1.8 KiB

ECP-0068: Iroh Control To Web Directory Bridge

Status: Implemented

Decision

Add a first-class bridge from iroh control gossip to the public website directory:

  1. ec-node control-bridge-web:
  • subscribes to control announcements on every.channel/control/v1,
  • selects relay transports (relay_url + broadcast_name + track_name),
  • upserts them into the website API (/api/stream-upsert).
  1. Extend the Cloudflare Worker API with:
  • POST /api/stream-upsert (optional bearer token auth),
  • GET /api/public-streams (read-only list for browsers).
  1. Extend the web watcher UI to render Live Now from /api/public-streams, with one-click watch.

Motivation

The site currently requires manual broadcast names even when streams are already announced over iroh control gossip. This bridge makes every.channel discoverable from published control state and gives browser users a single “open site and click watch” flow.

Scope

In scope:

  • Control gossip -> web directory bridge command.
  • Worker storage/API for public stream entries.
  • Browser UI list and refresh loop.
  • Control gossip join behavior updated to work without bootstrap peers (subscribe without blocking join).

Out of scope:

  • Browser-native iroh direct playback.
  • Signed/authenticated control announcements.
  • Replacing relay playback with direct iroh in browsers.

Alternatives considered

  • Keep manual stream naming/link entry on the website. Rejected because it blocks one-click discovery.
  • Bridge directly from browser clients instead of a node command. Rejected because browser trust/availability constraints are higher.

Rollout / Reversibility

  • Additive change; existing /api/directory and watch-by-link behavior remain intact.
  • Bridge can be disabled by stopping control-bridge-web.
  • Public listing auth can be tightened by setting EC_STREAM_UPSERT_TOKEN.