Docs / Getting Started

Getting started

Quickstart

Create a product, optionally add a bounded 3D Spatial Subspace, reveal its managed connection descriptor, and use native Rust QUIC or the TypeScript browser client to exchange Ephemeral events.

Lite250 capacity units by default after approval · native QUIC · browser WebTransport · managed 3D routing

1. Create a product

Sign in after access approval and open Create Server. Choose a product type, tick rate and CCU allocation. Capacity = Hz × CCU; the approved Lite default budget is 250 units (25 CCU at 10 Hz). Stay within the remaining capacity the console reports.

2. Wait for Running

Connect after the product reaches Running. The reveal action supplies the endpoint and credential for the managed client.

3. Reveal the connection descriptor

Use the Running product's reveal action. Reauthenticate if prompted, keep the descriptor out of source control, URLs, and logs, and expose it only to the intended client runtime.

4. Add a Spatial Subspace (optional)

On the server Details page, add an immutable 1–64 character slug and display name. The defaults create a bounded 3D space with 1 meter per unit, 10-unit cells, a 25-unit interest radius, exact-distance filtering, and the documented AABB. Host allocates its numeric ID from 3.

5. Connect a client

Use the Rust woven-client with the descriptor's native QUIC endpoint or the TypeScript browser client with webTransport.url. Keep TLS verification enabled, present the returned Bearer credential for managed admission, and consume logical and spatial definitions exactly as returned.

6. Publish an Ephemeral event

Use the exact managed namespace, session, space definition, and channel returned by the descriptor. Managed channels carry live Ephemeral events for current subscribers.

Client examples

These abbreviated examples use the real Rust client API. Parse the endpoint, token, numeric scope IDs, spaces, and channels from the revealed descriptor rather than hardcoding them.

Connect with verified TLS and Bearer authentication

use woven_client::{Client, ClientConfig, ClientTlsConfig};
use woven_protocol::AuthenticationScheme;

let tls = ClientTlsConfig::from_ca_pem(ca_pem.as_bytes())?;
let client = Client::connect_with_tls_and_auth(
    ClientConfig {
        url: format!("quic://{endpoint}"),
        token,
        ..ClientConfig::default()
    },
    tls,
    AuthenticationScheme::Bearer,
)
.await?;

Request managed admission

use std::time::Duration;
use tokio::sync::oneshot;

let (cancel_tx, cancel_rx) = oneshot::channel::<()>();
// Keep cancel_tx with your application's stop control.
let (mut client, outcome) = client
    .admit_with_cancellation(
        namespace_id,
        session_id,
        "quickstart-connection".to_owned(),
        Duration::from_secs(30),
        async move { let _ = cancel_rx.await; },
    )
    .await?;

// Continue only after AdmissionStatus::Admitted or QueueState::Admitted.

Subscribe and publish an Ephemeral event

client
    .subscribe_space(namespace_id, session_id, space_id, space_epoch, 1)
    .await?;

// Receive SubscriptionAccepted and EntityEntered, then use the assigned entity ID.
client
    .publish_event(
        namespace_id,
        session_id,
        space_id,
        space_epoch,
        1,          // managed Ephemeral channel
        entity_id,  // assigned by WOVEN
        sequence,
        type_id,
        payload,
    )
    .await?;

For complete admission-result handling, subscription responses, entity assignment, TLS options, cancellation, and shutdown, see the Rust client guide or the TypeScript client guide.

Managed connection requirements

Transport
Rust clients use native QUIC. The TypeScript browser client uses WVN1 over WebTransport and HTTP/3/QUIC through a separate endpoint on the same managed runtime. Both paths are Online.
Security
Verify TLS using the trust information supplied for the managed endpoint and send the descriptor's credential as Bearer authentication. Do not disable certificate verification.
Admission
The server validates the managed credential and admits the client to its assigned namespace and session. Product IDs and protocol scope IDs are distinct.
Routing and data
Use only the logical or managed 3D spatial definitions and channels returned by the descriptor. Host does not grant wildcard or ad-hoc spaces. Only Ephemeral events are active on this managed path.

Where to go next

Availability boundaries

Native QUIC, browser WebTransport, the TypeScript browser client, Spatial Subspaces, and managed spatial routing are Online. Pro and Dedicated, persistence beyond Ephemeral, and Inference remain Preview. Integrations use only the exact managed scope documented above.

Read about Woven Host deployment boundaries →