# Introduction

> Polyglot SDKs for voice, streams, robotics, games, and data. All five modalities use one MoQT relay mesh.

FirstByte is a real-time platform with five typed modalities:
**voice**, **streams**, **robotics**, **games**, and **data**. All five
modalities use the same MoQT (Media-over-QUIC Transport) relay mesh.
Native, hermetically-built SDKs ship for **TypeScript, Python, Go, Rust,
Java, and .NET**. A Unity UPM transport package also ships. All bindings
share one C++23 core. The core emits the same wire envelope in every
language. Because of this, a Python publisher, a browser subscriber, and a
Unity client interoperate without translation.

## What's in this site

  - **[Modalities](/modalities/overview)** — The five-modality model: voice, streams, robotics, games, and data.
    This page tells you when to use each modality.
  - **[Quickstart](/quickstart)** — Build a working app in less than five minutes. Pick a modality and follow the steps.
  - **[SDK Reference](/sdks/overview)** — A reference for each language. It covers every modality and every method, with end-to-end examples.
  - **[Architecture](/concepts/architecture)** — QUIC, WebTransport, MoQT, the C++ core, and the relay mesh.

## Start here for a common task

The four things people build first, each a complete worked example.

  - **[Embed an agent widget on your website](/modalities/voice/recipes/web-embed)** — One tag plus one backend route puts a voice, text, and video agent on any
    page. The media runs on MoQT over QUIC, and no credential ships to the
    browser.
  - **[Run your LiveKit agent on our transport](/modalities/voice/integrations/livekit)** — Install a plugin into your existing `livekit-agents` worker. Your agent
    code, plugins, and provider keys do not change — only the bytes on the
    wire. There is no LiveKit server.
  - **[Make an outbound call](/modalities/voice/recipes/livekit-outbound)** — Dial one number or hand over a list and let the engine pace the campaign.
    The same worker answers, inbound or outbound.
  - **[Fetch call recordings through the API](/modalities/voice/api/recordings)** — List recordings with filters and stats, mint a one-hour presigned download
    URL, or get pushed a webhook the moment one lands.

## Modalities at a glance

| Modality      | Use it for                                              | Concept                       |
| ------------- | ------------------------------------------------------- | ----------------------------- |
| **Voice**     | Calls (PSTN/SIP/AI) + audio bridge + agent attach       | [/modalities/voice/overview](/modalities/voice/overview)         |
| **Streams**   | Live broadcasts (one→many) + signed playback URLs       | [/modalities/streams/details](/modalities/streams/details)     |
| **Robotics**  | Topic pub/sub for a robot fleet (ROS 2 / Zenoh-over-QUIC) | [/modalities/robotics/details](/modalities/robotics/details) |
| **Games**     | Multiplayer rooms with state/input/event channels        | [/modalities/games/details](/modalities/games/details)         |
| **Data**      | MQTT-style typed pub/sub (`+` / `#` filters, retain)     | [/modalities/data/details](/modalities/data/details)           |

The platform also has these surfaces:

| Surface       | When                                                    |
| ------------- | ------------------------------------------------------- |
| **Realtime Tracks** ([MoQT](/concepts/realtime-tracks)) | Drop below the typed modalities — raw publish/subscribe |
| **Netcode (Unity)** ([UPM](/modalities/netcode/details)) | Drop-in for `com.unity.transport`; Netcode for GameObjects / Entities |

## One substrate

The same call can flow through any combination of runtimes:

```
Browser tab  ──WebTransport──▶  ┐
Python bot   ──QUIC──────────▶  ├──▶  FirstByte relay mesh  ──▶  fan-out
Go batcher   ──QUIC──────────▶  │
Unity client ──QUIC──────────▶  ┘
```

All runtimes speak MoQT directly. The relay routes by **capability**.
A capability is an open-ended intent string, for example `voice/opus`,
`game.state`, or `ros.reliable`. A track can reach any consumer that
registered for that capability. The publisher does not need to know
that the consumers exist.

## Polyglot, but one substrate

| Surface       | Best for                          | Underlying transport              |
| ------------- | --------------------------------- | --------------------------------- |
| Browser (TS)  | Agent UIs, click-to-dial, live broadcasts | WebTransport over HTTP/3      |
| Node.js (TS)  | Server-side dialers, ingest, brokers | QUIC via WASM + WebTransport   |
| Python        | LLM/voice agents, data publishers | QUIC via aioquic + FFI            |
| Go            | Concurrent batch services         | QUIC via quic-go + CGO            |
| Rust          | High-volume edge orchestrators    | QUIC via quinn + libloading       |
| Java          | Enterprise / JVM stacks           | QUIC via Netty incubator          |
| .NET / C#     | Unity, Windows tooling            | `System.Net.Quic` + P/Invoke      |
| Unity         | Netcode for GameObjects / Entities | UPM package over the .NET runtime |

All SDKs are built hermetically. They share the same C++ core, the same
wire envelope, and the same modality conventions. Cross-language calls
work without extra steps.
