Coworkkit runs in the browser (the button, the microphone, the WebRTC voice connection) with a thin React SDK on top. So "will it work in my app?" comes down to two things: a browser modern enough for WebRTC, and a React app to mount the Provider in. Here's exactly what's supported today, and where the edges are.
Browsers
Any modern browser with WebRTC and microphone access. There's no plugin or extension to install; it's the standard web platform:
- Chromium: Chrome, Edge, Arc, Brave
- Safari
- Firefox
The one hard requirement is a secure context for the microphone: browsers only grant getUserMedia on https:// or localhost, never on a plain http:// LAN IP. Serve over HTTPS in production and the mic prompt appears the first time a user starts a session.
Mobile & iOS
Desktop first. Mobile browsers (iOS Safari, Android Chrome) do have WebRTC and a microphone, so a session can connect. But the button and its controls are tuned for a desktop pointer, and mobile is not a tested target yet. Treat phone and tablet as best-effort rather than supported until we say otherwise.
Frameworks
The SDK is a React package. It needs React 18 or newer (18 and 19 are both supported). Next.js App Router gets the one-line token route drop-in (this very portal runs on Next.js 16 and React 19), and the Quickstart also ships ready-made variants for a Vite SPA + Express and for Remix. Any other React setup works the same way: the Provider is just a component, and the token route is one mintSession call in whichever backend you have (Backends). Server-rendered or single-page, URL-routed or state-driven, it's all just your React tree. The agent knows which view the user is on from useSurface({ label }), a human label you pass, never the URL (how it works), so an SSR app and a client-only SPA are equally first-class.
There is no script-tag or CDN embed today: no <script> drop-in and no global build. If your front end isn't React, there's no supported path yet. That's a real limit, stated plainly so you don't have to guess.
Seeing something this page says should work? The Troubleshooting & FAQ covers the usual first-run snags: a blocked mic, a silent agent, the button never appearing.
TypeScript
Both packages ship their own declarations for ESM and CommonJS consumers, so they resolve under moduleResolution bundler, node16/nodenext, and the older node setting alike. Keep skipLibCheck: true, the Next.js and Vite default: the voice-transport library the SDK depends on references a build-time-only module from its published typings, and with skipLibCheck: false that surfaces as errors in your project that aren't yours to fix.