Skip to main content
There is no separate React wrapper package. Mount the SDK after the DOM exists and destroy it when the component unmounts.
The SDK is browser-only. In Next.js, use a dynamic import inside useEffect so the package never runs during SSR or in a Server Component.

Floating

The cancelled flag matters: React 18 Strict Mode runs effects twice in development, and the dynamic import can resolve after the first cleanup.

Bar

Render the container first, then create the controller.

Expose the controller to the rest of your app

Keep one instance in context so any component can start a call.
Then anywhere:
startCall() is safe before the dialer is ready — it queues the request and places it once initialization finishes.

Keep the contact in sync

Environment variables

The publishable key is browser-safe, so a public env var is correct:
Never put a cik_live_… API key or a webhook signing secret in a NEXT_PUBLIC_ variable. Those are server-only — see Public API authentication.

Gotchas

Next steps

CRM contacts

Attach the record on screen

Theming

Match your design system