Demos
Click on any of them. That’s what they’re here for. Everything is open source!
Multiplayer (anarchy) Game Boy emulation on a remote server, using MoQ tracks for everything. Emulation and encoding only run when at least one viewer is watching.

Watch a “live” broadcast of everybody’s favorite rodent friend.
The video player is available as a (tree-shakable) Javascript library or <moq-watch> web component.
A full-blown conferencing app built entirely on MoQ. Includes custom WebGL rendering, WebAudio panning, markdown chat, dank memes, you name it. You’ll need a friend though, or at least another tab (I won’t judge).
Go live! Share your camera, microphone, or screen with the world. Just keep in mind that all test streams are public… please don’t do anything stupid.
Build Your Own
Want something you can run from a terminal? These copy-paste examples use the same MoQ stack as the browser demos.
moqsrc and moqsink into a media pipeline.Everything under
/anonis public and ephemeral. Pick a unique broadcast name, do not publish anything private, and stop the command when you’re done.
CLI
The moq CLI imports and exports common media containers over MoQ.
Install it with Homebrew or Cargo:
# macOS
brew install moq-dev/tap/moq
# Any platform with Rust
cargo install moq-cli
Then pull the always-on Big Buck Bunny broadcast out as fragmented MP4 and pipe it directly into ffplay:
moq --client-connect https://cdn.moq.pro/demo \
--broadcast bbb.hang export fmp4 \
| ffplay -
That’s the whole loop: moq handles the live transport and media tracks, while FFmpeg handles decoding and playback.
FFmpeg
Publish a generated video and audio test pattern. Replace YOUR_NAME with something unique so you don’t fight another publisher for the same broadcast.
ffmpeg -re \
-f lavfi -i testsrc=size=1280x720:rate=30 \
-f lavfi -i sine=frequency=440 \
-c:v libx264 -preset veryfast -tune zerolatency -g 60 \
-c:a aac \
-f mp4 \
-movflags cmaf+separate_moof+delay_moov+skip_trailer+frag_every_frame - \
| moq --client-connect https://cdn.moq.pro/anon \
--broadcast YOUR_NAME.hang import fmp4
While it is running, open /watch?name=YOUR_NAME.hang on this site, or play it in another terminal:
moq --client-connect https://cdn.moq.pro/anon \
--broadcast YOUR_NAME.hang export fmp4 \
| ffplay -
Want a real camera instead? Replace the two generated inputs above with the input for your platform:
# macOS: first camera + first microphone
ffmpeg -f avfoundation -framerate 30 -i "0:0" ...
# Linux: first V4L2 camera + default ALSA input
ffmpeg -f v4l2 -framerate 30 -i /dev/video0 -f alsa -i default ...
# Windows: replace these names with devices from `ffmpeg -list_devices true -f dshow -i dummy`
ffmpeg -f dshow -i video="Integrated Camera":audio="Microphone" ...
FFmpeg device names vary, so use its device-list command before assuming the defaults are correct.
GStreamer
The moq-gst plugin provides two normal GStreamer elements:
moqsinkpublishes encoded audio and video.moqsrcsubscribes to a broadcast and exposes one pad per rendition.
The quickest install is Nix, which bundles the plugin with GStreamer and the common codec plugins:
nix shell github:moq-dev/moq#moq-gst --command gst-inspect-1.0 moq
Watch the public demo, explicitly connecting both the video and audio pads:
nix shell github:moq-dev/moq#moq-gst --command gst-launch-1.0 -v -e \
moqsrc name=src url=https://cdn.moq.pro/demo broadcast=bbb.hang \
src.video_0 ! queue ! decodebin3 ! videoconvert ! autovideosink \
src.audio_0 ! queue ! decodebin3 ! audioconvert ! autoaudiosink
Or publish a live test pattern to your own public broadcast:
nix shell github:moq-dev/moq#moq-gst --command gst-launch-1.0 -v -e \
videotestsrc is-live=true ! videoconvert \
! x264enc tune=zerolatency ! h264parse ! mux.sink_0 \
audiotestsrc is-live=true ! audioconvert \
! avenc_aac ! aacparse ! mux.sink_1 \
moqsink name=mux url=https://cdn.moq.pro/anon broadcast=YOUR_NAME.hang
Open /watch?name=YOUR_NAME.hang while the pipeline is running. For a webcam or screen share, swap videotestsrc for your platform’s source element such as avfvideosrc, v4l2src, ximagesrc, or d3d11screencapturesrc.
Next Steps
- Embed the publisher or player in a web app.
- Try the full CLI and GStreamer docs.
- Run your own relay instead of using the public namespace.
- Browse the source code or ask questions in Discord.