# Browser & framework support

> Which browsers work (Chromium, Safari, Firefox), the mic + WebRTC requirement, the mobile story, and the React / Next.js versions the SDK supports.

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), and it works with **Next.js App Router** — this very portal runs on Next.js 16 and React 19. 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](/docs/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](/docs/troubleshooting) covers the usual first-run snags — a blocked mic, a silent agent, the button never appearing.
