@signalwire/web-components is a set of custom HTML elements built
on Lit that wraps the Browser SDK in declarative
markup. They work in vanilla HTML, React, Vue, Angular, or
server-rendered templates — no imperative JavaScript required for
the common cases.
The headline element is <sw-call-widget>, which owns the full
call lifecycle (client init, dialing, media, controls, optional AI
transcript) and renders inline or as a modal. Around it sits a
family of composable primitives — <sw-call-media>,
<sw-local-camera>, <sw-call-controls>, <sw-device-selector>,
and the sw-ui-* presentational layer — that can be used à la
carte. See the
Web Components reference
for the full element list.
A single self-contained <script> tag. Registers every custom
element and exposes the SDK on window.SignalWireUI. For static
sites, CMS pages, and contexts without a bundler.
npm install @signalwire/web-components@latest. Tree-shakes through
your bundler, supports per-element subpath imports, ships
TypeScript types. For SPAs and framework apps.
Both register the same custom elements with the same attribute and event APIs. They differ only in how the script is loaded and where SDK classes are imported from.
The embed bundle is a single IIFE file that registers every custom
element as a side effect and re-exports the SDK on
window.SignalWireUI. No build step.
SDK classes are available on the global for programmatic use:
Pick the embed pathway for marketing sites, landing pages, and CMS templates — anywhere a single copy-pasteable URL is the goal.
Install the components alongside @signalwire/js and rxjs (peer
dependencies):
Register every element with a side-effect import:
Or import only the elements in use:
Use them anywhere in markup or JSX:
SDK classes import from @signalwire/js:
For framework-specific wrappers (React, Vue, Svelte), see Framework Integration.
<sw-call-widget> is the simplest entry point — set token and
destination and it handles the rest. Internally it composes the
same primitives that are available individually:
<sw-call-provider> sets up reactive contexts (call state, devices,
transcript, user events) that descendants subscribe to
automatically. Reach for the primitives when the built-in layout
doesn’t fit the design.