Skip to content

Add MoQ streaming tutorial to docs#252

Open
Karolk99 wants to merge 3 commits intomainfrom
fce-3167/add-moq-to-doc
Open

Add MoQ streaming tutorial to docs#252
Karolk99 wants to merge 3 commits intomainfrom
fce-3167/add-moq-to-doc

Conversation

@Karolk99
Copy link
Copy Markdown
Contributor

@Karolk99 Karolk99 commented May 4, 2026

Description

This PR adds a "MoQ Streaming" tutorial that shows how you can use the MoQ protocol with Fishjam.
It shows how to:

  • Create publisher/subscriber token with RoomManager and Production
  • Publish stream using Luke's web SDK
  • Subscribe (or entire namespace) to a stream using Luke's web SDK

There are missing links because we don't have a blog post or concept section that this tutorial could reference.

Let me also know whether you think we should add a concept section about the MoQ protocol to our docs or stick to the blog post alone.

@linear
Copy link
Copy Markdown

linear Bot commented May 4, 2026

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new Fishjam documentation tutorial for MoQ streaming, introducing a docs path parallel to the existing livestreaming guides and showing how to move from sandbox prototyping to production token management.

Changes:

  • Adds a new MoQ Streaming tutorial page under docs/tutorials.
  • Documents sandbox-based publisher/subscriber token flows and client-side publish/subscribe examples with the MoQ web packages.
  • Adds production examples for generating MoQ tokens with the TypeScript and Python server SDKs, including namespace subscription discovery.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread docs/tutorials/moq.mdx Outdated
Comment thread docs/tutorials/moq.mdx
Comment thread docs/tutorials/moq.mdx
Comment thread docs/tutorials/moq.mdx
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Comment thread docs/tutorials/moq.mdx
This section explains how to publish and subscribe to live streams using [Media over QUIC (MoQ)](https://datatracker.ietf.org/wg/moq/about/) with Fishjam.
MoQ uses QUIC as its transport layer (with a WebSocket fallback), delivering ultra-low latency at scale — making it ideal for interactive broadcasts, live events, and large-audience streams.

Before diving into the tutorial, we recommend getting familiar with the [MoQ protocol concepts](https://datatracker.ietf.org/wg/moq/about/).
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: This could be an admonition like :::info and I would phrase it more like:

If you're new to MoQ, then we recommend getting familiar with its [basic concepts](link to blog)

Apart from that, we should add a short TL;DR section defining publishers, subscribers, relays and namespaces. The admonition could mention this section as a more surface-level walkthrough

Comment thread docs/tutorials/moq.mdx
See [Livestreaming](./livestreaming) for the WebRTC approach.
:::

## Quickstart with Sandbox API
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nitpick:

Suggested change
## Quickstart with Sandbox API
## Quickstart with the Sandbox API

Comment thread docs/tutorials/moq.mdx
:::info
Fishjam supports both WebRTC-based livestreaming (WHIP/WHEP) and MoQ streaming. \
**MoQ** is a new protocol designed from the ground up for scalable, low-latency delivery to large audiences.\
**WebRTC** is a mature, battle-tested technology with native browser support, built for low-latency conferencing and interactive streaming.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nitpick: MoQ and WebRTC have the same level of native browser support

Suggested change
**WebRTC** is a mature, battle-tested technology with native browser support, built for low-latency conferencing and interactive streaming.
**WebRTC** is a mature, battle-tested technology built for low-latency peer-to-peer conferencing and interactive streaming.

Comment thread docs/tutorials/moq.mdx

## Quickstart with Sandbox API

If you don't have a backend server set up, you can prototype a MoQ streaming scenario using the Sandbox API provided by the Room Manager.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue:

Suggested change
If you don't have a backend server set up, you can prototype a MoQ streaming scenario using the Sandbox API provided by the Room Manager.
If you don't have a backend server set up, you can prototype a MoQ streaming scenario using the Sandbox API.

Comment thread docs/tutorials/moq.mdx

#### Obtaining a publisher token

Fetch a sandbox publisher token from the Room Manager:
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion:

Suggested change
Fetch a sandbox publisher token from the Room Manager:
Fetch a sandbox publisher token using the Sandbox API:

Comment thread docs/tutorials/moq.mdx
element: canvas,
broadcast,
paused: false,
});
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: We could demonstrate usage of the moq player component here below or maybe a react component that wraps this logic

Comment thread docs/tutorials/moq.mdx

:::tip
A single token should only grant either `publishPath` _or_ `subscribePath` — not both.
Broadcast clients receive a publisher token; viewers receive a subscriber token.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: "Broadcast client" sounds like a viewer

Suggested change
Broadcast clients receive a publisher token; viewers receive a subscriber token.
Streamers receive a publisher token; viewers receive a subscriber token.

Comment thread docs/tutorials/moq.mdx

const roomName = 'my-room';
// Publishers under this namespace might use paths like:
// 'my-room/alice-camera', 'my-room/bob-screen', etc.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: For clarity, let's make this comment actual code

Comment thread docs/tutorials/moq.mdx
Comment on lines +292 to +293
import * as Moq from "@moq/lite";
import * as Watch from "@moq/watch";
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: We could mention that we suggest using the @moq/... libraries with some links to resources about them

Comment thread docs/tutorials/moq.mdx
- [MoQ IETF Working Group](https://datatracker.ietf.org/wg/moq/about/)
- Blog Post etc.

If you need a different streaming approach, see:
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion:

Suggested change
If you need a different streaming approach, see:
If you want to learn about streaming using WebRTC instead of MoQ, see:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants