v0.10.4
Vexa-ai/vexav0.10.4Apr 26, 2026by DmitriyG228
Upgrading?
AI Summary
Introduces official Zoom Web Client support (no proprietary SDK required) and significantly reduces CPU usage for Zoom bots using Chromium flags.
Key Highlights
- Zoom Web is now the default join path requiring no SDK credentials.
- 4x CPU reduction per Zoom bot (from ~440% to ~115%) via `--in-process-gpu` flag.
- Fixed chat persistence race condition.
- CPU resource budget restored to original limits.
- Web-as-default dispatch logic updated.
New Features
- Native Zoom Web Client integration.
- Optimized Zoom bot resource consumption.
- Improved chat message persistence across platforms.
Full Release Notes
# Vexa v0.10.4 ā Zoom Web bot
**Release date:** 2026-04-27
**Cycle:** `260426-zoom`
**Highlight:** Zoom support via the official Zoom **Web Client** (no proprietary SDK required).
---
## What's new
### šÆ Zoom Web is the bot's default join path
Spawn a Zoom bot with the same API as Google Meet / MS Teams ā **no Zoom SDK credentials, no special configuration**:
```bash
curl -X POST $GATEWAY/bots \
-H "X-API-Key: $TOKEN" -H "Content-Type: application/json" \
-d '{"platform":"zoom","native_meeting_id":"89164742472","passcode":"abc123","bot_name":"Vexa"}'
```
The bot opens `app.zoom.us/wc/`, fills the name, joins audio, sits through the waiting room if any, and starts publishing transcript segments ā same flow as our other platforms.
> **Migration note:** previously, `platform=zoom` routed to the native Zoom SDK path (which required `ZOOM_CLIENT_ID` + `ZOOM_CLIENT_SECRET`). That path is still available but is now **opt-in** via `ZOOM_SDK=true`. Operators using only Web don't need to do anything; the legacy `ZOOM_WEB=true` env-var is also still honoured for backward-compat. Wave 3 will retire both env-vars in favour of an explicit `platform: zoom_sdk` enum value.
### š 4Ć CPU reduction per Zoom bot
A single Chromium flag ā `--in-process-gpu` ā collapses the gpu-process work into the renderer. Measured on this release's smoke matrix:
| | Before | After |
|---|--:|--:|
| Total CPU per Zoom bot | ~440% | **~115%** |
| GPU process | 357% (SwiftShader software-WebGL) | **gone** |
| K8s `cpu_limit` budget | 4000m (emergency bump) | **1500m** (original p95-based) |
Bot density per node tripled. No transcription quality regressions. Audio + chat + admission all unaffected.
### š Bug fixes
- **Chat persistence race** (cycle-scope, all platforms) ā DELETE-vs-exit-callback race was leaving chat messages stranded in Redis. Removed the early-exit guard so chat flushes regardless of status-update outcome.
- **Awaiting-admission false positive** (Zoom Web) ā the `isAdmitted()` waiting-room exclusion was firing too late; bots were reporting `active` while still in the Zoom waiting room. Fixed by checking waiting-room text before the weaker fallbacks.
- **Web-as-default dispatch** (Zoom) ā the bot's index.ts no longer requires `ZOOM_WEB=true` to route to the Web client.
- **CPU resource budget restored** ā the temporary 4000m/2500m bump that was needed before `--in-process-gpu` is reverted to the original 1500m/1000m. Helm chart + compose `runtime-api/profiles.yaml` both updated.
---
## Helm chart
- **Chart version:** `0.10.4` (was `0.10.3`)
- **App version:** `0.10.4`
- Fetch the packaged chart from the GitHub release artifacts.
```bash
helm install vexa oci://... --version 0.10.4
# or, from the GitHub release tarball:
helm install vexa ./vexa-0.10.4.tgz
```
---
## Validation summary
Smoke matrix run across **all three modes** (compose / lite / helm) on Linode:
| Mode | Tests | Pass | Notes |
|---|--:|--:|---|
| compose | 11 | 9 | 2 pre-existing infra failures (chart-version drift #228, dashboard API-key staleness) ā not blocking |
| lite | 10 | 7 | same pre-existing + flaky e2e_completion timing |
| helm | 12 | 9 | same pre-existing + flaky webhook inject timing on cold cluster |
All in-scope claims for `260426-zoom` (`BOT_CREATE_OK`, `BOT_STATUS_TRANSITIONS`, `SEGMENT_PIPELINE`, `ZOOM_WEB_AUDIO_RESEARCH_NOTE_EXISTS`) ā
green.
---
## Carried forward to Wave 2
- Full incoming-video disable on Zoom Web (decoder shutdown via SDP-munge or transceiver-direction trick ā five attempts in this cycle made progress but didn't fully land; `--in-process-gpu` mooted the urgency).
- Zoom Web platform-enum split (`zoom` ā Web, `zoom_sdk` ā SDK direct routing both sides; retire `ZOOM_WEB`/`ZOOM_SDK` env-vars).
- `meeting-tts-zoom` tier-meeting test.
- Three Zoom-specific DoDs under `realtime-transcription/zoom`.
---
š¤ Generated with [Claude Code](https://claude.com/claude-code)
Related Repositories
public-apis/public-apisā
491,322
A collective list of free APIs
NousResearch/hermes-agentā
256,170
The agent that grows with you
yt-dlp/yt-dlpā
200,379
A feature-rich command-line audio/video downloader
microsoft/markitdownā
191,627
Python tool for converting files and office documents to Markdown.
Significant-Gravitas/AutoGPTā
187,709
AutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters.