diff --git a/src/components/users.astro b/src/components/users.astro new file mode 100644 index 0000000..b032f19 --- /dev/null +++ b/src/components/users.astro @@ -0,0 +1,68 @@ +--- +interface Props { + // Grid columns, since the reading column is too narrow for four across. + class?: string; + // Only show users of this use case. + useCase?: string; +} + +const { class: columns = "sm:grid-cols-2", useCase } = Astro.props; + +// Companies running MoQ in production. A null `name` renders as a redaction bar +// for users who can't be named yet; `redacted` sets the bar's width. +const users = [ + { + name: "Meta", + useCase: "contribution", + what: "Live ingest", + body: 'Spoke about "Shipping MoQ for Instagram and Facebook Live Ingest" at DEMOQED. Uses its own implementation of the standard, not ours.', + links: [{ text: "DEMOQED program", href: "https://moqalliance.org/demoqed-2026/" }], + }, + { + name: "Saronic", + useCase: "robotics", + what: "Autonomous boats", + body: "MoQ is the primary video system across its vessels. One uplink per boat, hundreds of viewers, and nothing sent when nobody is watching.", + links: [ + { text: "Their write-up", href: "https://medium.com/saronic-technologies/the-ground-moves-building-on-early-open-source-without-getting-burned-ba2af78beb78" }, + { text: "Corsair rescues two Army pilots", href: "https://www.navalnews.com/naval-news/2026/06/saronic-usv-rescues-two-u-s-army-pilots-downed-by-iran/" }, + ], + }, + { + name: "Evolve Robotics", + useCase: "robotics", + what: "Teleoperation", + body: 'Spoke about "MoQ beyond media" at DEMOQED, the first MoQ conference.', + links: [{ text: "evolverobotics.com", href: "https://evolverobotics.com/" }], + }, + { name: null, useCase: "robotics", redacted: "w-32", what: "Drones", body: "That's all we're allowed to say.", links: [] }, + { name: null, useCase: "robotics", redacted: "w-24", what: "Drones", body: "Also drones. Also can't say.", links: [] }, +]; +--- + +
+ { + users + .filter((user) => !useCase || user.useCase === useCase) + .map((user) => ( +
+ {user.what} + {user.name ? ( +

{user.name}

+ ) : ( +

+ )} +

{user.body}

+ {user.links.length > 0 && ( +
+ {user.links.map((link) => ( + + {link.text} + + ))} +
+ )} +

+ )) + } +
diff --git a/src/pages/index.astro b/src/pages/index.astro index 6338193..6d5bf96 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,4 +1,5 @@ --- +import Users from "@/components/users.astro"; import Layout from "@/layouts/global.astro"; interface Post { @@ -37,9 +38,13 @@ const languages = [ { name: "C", icon: "c", href: "https://doc.moq.dev/lib/c/" }, ]; +// A few members of the MoQ Alliance. Most build their own MoQ stack, so they +// sit apart from the users above. +const alliance = ["Cloudflare", "Akamai", "AWS", "Fastly", "Cisco", "Intel", "Oracle", "Mux"]; + // `icon` is hand-drawn art in public/icons/use-case/. const useCases = [ - { title: "Robotics", icon: "robotics", body: "Real-time teleoperation, with telemetry and control on the same relays as the video.", href: "/blog/on-a-boat" }, + { title: "Robotics", icon: "robotics", body: "Real-time teleoperation, with telemetry and control on the same relays as the video.", href: "/robotics" }, { title: "Voice and video AI", icon: "voice-video-ai", body: "Server-side media in Rust or Python, played back faster than real time in the browser.", href: "https://doc.moq.dev/concept/use-case/ai" }, { title: "Interactive", icon: "interactive", body: "Media down, input up. MoQ Boy is a Game Boy played by everyone watching at once.", href: "/boy" }, { title: "Conferencing", icon: "conferencing", body: "Browser publish and watch with a live roster, plus WebRTC for WHIP and WHEP clients.", href: "/blog/first-app" }, @@ -53,11 +58,11 @@ const useCases = [
- Oct 8 - DEMOQED, the first MoQ conference, in San Francisco + In prod + Saronic ships MoQ on its autonomous boats @@ -182,6 +187,22 @@ const useCases = [
+ +
+
+

Already in the wild.

+ Using MoQ? Tell us +
+ +
+

Building the standard with

+
+ {alliance.map((name) => {name})} + and the rest of the MoQ Alliance +
+
+
+
diff --git a/src/pages/robotics.mdx b/src/pages/robotics.mdx new file mode 100644 index 0000000..6fc8556 --- /dev/null +++ b/src/pages/robotics.mdx @@ -0,0 +1,34 @@ +--- +layout: "@/layouts/global.astro" +title: Robotics +description: MoQ streams video, telemetry, and control for robots on terrible networks. +--- + +import Users from "@/components/users.astro"; + +# Robotics + +Robots have a lot of cameras. +They also tend to be somewhere with a terrible network: cellular, satellite, mesh radio, or nothing at all. +And everybody wants to watch: the operator, the fleet dashboard, the guy in the back with an iPad. + +Existing protocols make the robot pay for every viewer, and for every frame nobody is watching. + +## Why MoQ + +- **Pull, not push.** A robot only sends the tracks somebody subscribed to. Nobody watching camera 7? Camera 7 doesn't touch the uplink. +- **One uplink, any number of viewers.** The robot publishes once to a relay, and the relay fans out. Viewer #100 costs the robot nothing. +- **Latency over quality.** When the link degrades, MoQ skips old frames instead of buffering them. An operator wants what's happening *now*. +- **More than video.** Telemetry, control, and logs are just more tracks on the same connection and the same relays. +- **Watch in a browser.** Operators open a tab. No plugins, no WebRTC signaling servers, no VPN to the robot. + +I wrote about the pull model in more detail in [On a Boat](/blog/on-a-boat). + +## In Production + + + +## Yours? + +Running MoQ on something that moves? [Tell us](mailto:me@kixel.me), we'd love to brag about it. +Or don't, and we'll add another black bar.