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.
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
Core concepts
Understand products, CCU, descriptors, managed admission, spaces, channels, and events.
Rust client
Add the current-source native client as a pinned path dependency and follow the validated managed flow.
TypeScript client
Use the Online Host browser descriptor flow, bounded admission, and exact bigint scope IDs over WebTransport.
Authentication
Keep console identity and the revealed runtime Bearer credential in their separate roles.
Events
Learn the event and delivery vocabulary behind the active Ephemeral channel.
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 →