NewPut a Space inside your own product

Every call ends. The Space doesn’t.

Chalk gives a team, or a product you are building, a space that outlasts the call. Video, chat, whiteboard, and files stay put between calls — on our infrastructure or on yours.

  • One link that never expires
  • Self-host the whole thing
  • React and React Native SDK

Built on tools your team already runs

TypeScriptReact and React NativeCloudflare
Two ways in

Sign in, or npm install.

Both doors open onto the same Space and Episode model, so nothing you learn on one side is wasted on the other.

Use Chalk

Open a Space and send one link.

Create it from the dashboard, invite people by link, admit them with roles you control. The chat, the whiteboard, and the files are still there tomorrow.

Build on Chalk

Drop a Space into your own product.

One component renders the whole surface. When you want a different shape, the same client gives you hooks for participants, chat, media, and capabilities.

import { Chalk } from "@q9labsai/chalk-react";

export function DesignReview() {
  return (
    <Chalk
      space="design-lab"
      getAccess={requestGrant}
    />
  );
}

// requestGrant asks your server.
// Browser code never mints access.
The model

Nobody should re-invite the same six people every Tuesday.

So Chalk splits the work into two parts. A Space is the durable place, with its members, settings, chat, and whiteboard. An Episode is one bounded run of activity inside it.

  • One link, for good

    A join link names the Space, never a call. Send it once and it keeps working next week.

  • Episodes start themselves

    The first allowed person to arrive opens the Episode. Nobody schedules it, and only one runs at a time.

  • What ended stays ended

    When an Episode closes, its attendance, recording, and transcript are immutable. History does not get rewritten.

Latency

Every step on the way in has a number it has to beat.

Latency is a design constraint here, not something measured after the fact. These are the three that sit between pressing a button and seeing a face.

  • <1sClick to mediaFirst frame at p50.
  • <100msControl signalSync plane at p95.
  • <200msGlass to glassSame-region media.

These are the budgets Chalk designs against. They are not a published service level agreement.

Portability

The parts you would want to replace are the parts we made replaceable.

Media providers and realtime plumbing sit behind contracts instead of running through every component, so the thing you deploy does not become the thing you are stuck with.

  • The API, the sync runtime, and Postgres run on your machines, with a deployment we run ourselves and keep documented.
  • No vendor-only database features, so standard Postgres is enough. Redis only ever makes things faster, never authoritative.
  • You hold the signing keys. Access grants are minted on your server and passed through the browser untouched.

Cloudflare is the media adapter today. Running the SFU itself on your own hardware needs an adapter that is not finished.

Shipped

Everything here already works.

Twenty-eight shipped capabilities, distilled into four working systems. Built and covered by tests across the hosted product and SDK.

Space and access

Lifecycle, identity, admission, roles, tenants, keys, and audit are one tested control plane.

Realtime and media

Durable sync, bounded recovery, backpressure, and provider-neutral media work across web and native.

SDK surfaces

Turnkey and composable React surfaces cover entrance, media, chat, recording, and whiteboard.

Operations

Signed webhooks, retries, journey tracing, health checks, and telemetry ship with the platform.

Still being qualified: recording capture at scale, hosted transcription end to end, a self-hosted SFU adapter, and enterprise SSO.

Give every conversation a place to live.

Create a Space in about a minute. Bring your own infrastructure whenever you are ready.