Calls for your team, and inside your product.

Start a call and share one link that keeps working next week. Or render the same call in your own app with a few lines of React. Chalk is open source.

Hold a call

Start one and share the link. People join from their browser, with no account and nothing to install.

Start a call

Build with Chalk

Put the same call inside your product. One React component renders it, and your server decides who gets in.

Read the docs
$ pnpm add @q9labsai/chalk-react

A call keeps its link. Send it once and it still works next week. Each time people meet is a session: it starts when the first person joins and ends when the last one leaves.

  • The same link every timeNo new invite for the weekly call, and no date in the link.
  • The first person in starts itNobody schedules it, and only one session runs at a time.
  • Every session stays findableThe call keeps its history: when, how long, and who came.

After the call, it’s all there.

Open any past session to watch the recording, search the transcript and see who came and when.

Recording

Turn it on in the call, and it’s saved to the session.

Transcript

Search it, and jump to the moment someone said it.

Friday2 matches
01:32
Sofia Lind

I’d move the launch to Friday, so review has two clear days.

01:50
Hasan Shoaib

Friday works. Akash, does that fit the API side?

02:04
Akash Rao

Yes. The recording fix lands Monday.

Who came

Everyone who joined, once each, from when they first came to when they last left.

  • Hasan Shoaib10:02 to 10:48until the end
  • Nora Patel10:04 to 10:48until the end
  • Akash Rao10:03 to 10:48until the end
  • Sofia Lind10:05 to 10:41
  • Malik Haddad10:09 to 10:48until the end

The transcript is made from the recording, so a session without a recording has neither.

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

Speed is designed in, not measured afterwards. These three sit between pressing Join and seeing a face.

<1sClick to first frameAt p50. Under 2.5 s at p95.
<100msMute, hands and chatEach signal at p95, in the same region.
<200msCamera to screenGlass to glass, in the same region.

These are the budgets Chalk is designed against. They aren’t a service level agreement.

Put the call in your product.

<Chalk /> renders the whole call: the entrance, the stage, chat, the board and the controls. Your server creates each person’s access, so you decide who gets in.

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

export function TeamCall() {
  return (
    <Chalk
      space="q9-team"
      getAccess={getAccess}
    />
  );
}
Lumen TutoringClassesStudentsSchedule

Algebra 7BToday, 16:00

Open source. Run it where you like.

Chalk is MIT licensed. Use chalkmeet.com, or run the API, the sync service and Postgres on your own machines.

Q9Labs/chalkgit clone https://github.com/Q9Labs/chalk
View on GitHub
  • Your machinesThe API, the sync service and Postgres run where you deploy them, with the same deployment we run ourselves.
  • Standard PostgresNo vendor-only database features. Redis only makes things faster and never holds the truth.
  • Your keysAccess is created on your server and passed through the browser untouched.

Cloudflare carries the media today. Running the media server on your own hardware needs an adapter that isn’t finished yet.

Built with TypeScript, React and React Native, Go and Postgres.