尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Meetings that keep what you worked out.
Orb Meet is a video meeting app with a shared whiteboard and notes that write themselves. It runs in the browser at orbmeet.com, and everything that runs it is in this repository, under the MIT license.
browser
│
┌───────────┴─────────────┐
▼ ▼
Cloudflare Worker self-hosted nodes (Docker)
apps/web ├─ LiveKit + Egress video, recordings
├─ D1 accounts, ├─ transcription speech to text (Deepgram)
│ meetings ├─ whiteboard board sync (tldraw), saved to R2
├─ R2 files, boards └─ Caddy TLS in front of all of them
├─ Durable Objects one per live meeting
└─ Workflows summaries, cleanup
│
└─ Cloudflare Container apps/code-runner runs board code, no network
The Worker owns accounts, meetings, and where each one runs. Media and whiteboards run on nodes you host yourself; the Worker places each meeting on the closest healthy node and moves it if that node goes down.
| Path | What it is |
|---|---|
apps/web | The app and its API: TanStack Start on Cloudflare Workers, with D1 (Drizzle), R2, Durable Objects and Workflows |
apps/whiteboard-server | The whiteboard sync server that runs on each node |
apps/transcription-agent | The LiveKit agent that transcribes each participant |
apps/code-runner | The sandbox for code on the board (a Durable Object and its container) |
apps/cli | @orbmeet/cli, the command line client |
packages/* | Code the apps share: the database schema and migrations (db), the whiteboard (whiteboard-core, whiteboard-client), UI components (ui), node placement (nodes), protocols and contracts |
infra/ops | pnpm ops: sets up, deploys and checks the self-hosted nodes |
You need Node 24.22.1 or newer, pnpm 12 (corepack enable picks the version
the repo names), and Docker, which runs LiveKit for local development.
pnpm install
# The Worker's local configuration. Any id works for the local database.
cp apps/web/.dev.vars.example apps/web/.dev.vars
cp apps/web/cloudflare.deploy.json.example apps/web/cloudflare.deploy.json
# then set "databaseId" in cloudflare.deploy.json, e.g. to the output of `uuidgen`
# Create the local database
cd apps/web
pnpm exec cf d1 migrations apply "$(node -p "require('./cloudflare.deploy.json').databaseId")" --local \
--dir ../../packages/db/drizzle/migrations \
--pattern '../../packages/db/drizzle/migrations/*/migration.sql'
cd ../..
# The app on http://localhost:3000, its whiteboard server, and LiveKit in Docker
pnpm dev
The whiteboard server creates its own .env from its example on first run.
Sign-in with Google, email, AI summaries and stored recordings each need their
keys in apps/web/.dev.vars; each one is described there.
For live captions and transcripts, also run the transcription agent. It needs a Deepgram API key:
cp apps/transcription-agent/.env.example apps/transcription-agent/.env # set DEEPGRAM_API_KEY
pnpm --filter @orbmeet/transcription-agent dev
pnpm check # lint, typecheck, knip, the migration check, every test, every build
pnpm test # every package's tests
pnpm e2e # browser tests (apps/web/e2e)
pnpm check is also what a deploy runs first.
The Worker. Fill in apps/web/cloudflare.deploy.json with your D1
database, domain and public values, set the Worker's secrets (listed in
apps/web/worker-secrets.example), then:
pnpm --filter @orbmeet/web deploy # checks, applies migrations, deploys
The nodes. Describe your servers in infra/ops/inventory.json, kept out of
git; infra/ops/src/test-fixtures.ts shows its shape. Secrets live encrypted in
infra/ops/secrets.age. Then:
pnpm ops deploy [node] # from a fresh VM to a running node; drains live meetings before restarting media
pnpm ops check # each node's readiness, and what clients see of it
pnpm ops # every command
npm i -g @orbmeet/cli
orbmeet configure # store an API token (or set ORBMEET_TOKEN)
orbmeet schedules # upcoming meetings
orbmeet summary --help # summaries, transcripts, recordings, whiteboard exports
Every command prints JSON on success and a JSON error on stderr on failure, so it can be scripted.