# ECP-0038: Share Links (every.channel://watch) and UI Share Controls Status: Draft ## Problem Sharing currently exposes a raw MoQ bundle (endpoint addr JSON, broadcast, track) which is copy/paste friendly for developers but awkward for regular users. We also need explicit UI controls for: - Sharing via a single link. - Sharing to nearby nodes (mDNS). - Sharing publicly (DHT address lookup), while still requiring explicit gossip bootstrap peers. ## Decision Introduce a compact share link format: `every.channel://watch?...` and add UI affordances to copy and consume this link. The link is a convenience wrapper around existing MoQ parameters. No new trust model is introduced here. ## Link Format (v1) Scheme and path: - `every.channel://watch` Query parameters: - `remote` (required): iroh `EndpointAddr` JSON string (or id-only string when discovery is enabled). - `broadcast` (required): MoQ broadcast name. - `track` (optional): MoQ track name (default remains `chunks` in the app). - `stream_id` (optional): key id override (rare; for debugging). - `secret` (optional): network secret hex (only when the publisher used one). - `discovery` (optional): comma-separated discovery modes, currently `mdns`, `dht`, `dns`. ## UI (user-facing language) - Share card includes: - Copyable share link. - Copyable node id. - Viewer panel exposes: - "Nearby (same Wi-Fi)" - "Public (internet)" - "Show in directory" - optional "directory contacts" and "sharing key" - "Watch a link" accepts a share link and can parse it to fill hidden advanced fields. ## Consequences - Sharing becomes one-string shareable without asking recipients to understand the underlying bundle structure. - Public announcements still require bootstrap peers; DHT only provides address lookup. ## Follow-ups - Add an explicit public bootstrap peer list mechanism (governance-controlled). - Add optional signing of share links (identity binding) once stream signing is enforced.