One vendor's documentation puts the gap in a single line: a prebuilt iframe gets you to a working call in minutes, a custom UI on its SDK takes hours to days. That is true, and it is the least important difference between the three embed video options.
Once you have made the build-or-buy decision and chosen a provider, there is a second choice inside "buy": how the video gets into your product. You can drop in the vendor's whole meeting UI in an iframe, assemble it from the vendor's UI components, or use the headless core SDK and draw every pixel yourself. Each one is cheap at a different moment. This post is about the moments after launch.
The Three Embed Video Options
Most providers now offer all three, under different names.
Option | What you get | Example |
|---|---|---|
Prebuilt iframe | The vendor's complete meeting UI, hosted on their domain, inside an <iframe> on your page | Daily Prebuilt; Jitsi/JaaS IFrame API |
UI kit | Ready-made components (video grid, controls, chat) that run in your page, on top of the core SDK | RealtimeKit UI Kit |
Headless SDK | Media, rooms and events as an API; no UI at all | Daily call object; RealtimeKit Core SDK |
The vendors describe the trade-off in their own words. Daily's documentation on call modes calls its iframe mode the best fit for fast integration with minimal UI work, and its call object mode headless: Daily handles WebRTC and media while you build every pixel. Cloudflare's RealtimeKit SDK guide estimates under two hours to ship with its UI Kit and typically five to six days with the Core SDK alone. These are the vendors' estimates, not measurements, but the order of magnitude is right.
Time to first call is a one-off cost. The rest of this post is the recurring ones.
What Each Option Costs Later
Cost that shows up later | Prebuilt iframe | UI kit | Headless SDK |
|---|---|---|---|
Making it look like your product | Themes and injected CSS only | Theme plus component props; replace components you outgrow | Unlimited; you build it |
Reacting to what happens in the call | Events the iframe API chooses to expose | Full SDK events | Full SDK events |
Where auth and roles live | Vendor's token properties | Your token service | Your token service |
Camera permission | Parent page must delegate it | Your page asks | Your page asks |
Native mobile app | A webview around someone else's page | Native kits where offered | Native SDKs where offered |
Upgrades | Arrive when the vendor deploys | When you bump a version | When you bump a version |
Leaving the vendor | Replace the whole UI | Replace the components | Replace the adapter |
Each row deserves a closer look, because each one is where a team that picked for speed tends to get stuck.
Styling: You Rent the iframe's UI
An iframe from another origin is a sealed box. Your stylesheet cannot reach into it, so every visual change goes through whatever the vendor exposes. Daily's Prebuilt customization guide is generous by iframe standards: feature toggles, colour themes, injected CSS, grid tile limits, custom tray buttons and sidebar apps. It is also clear about the edge: for a fully custom UI, use the call object. Even small things are on its terms; by default an embedded Prebuilt call has no leave button until you add one.
A UI kit moves the line. The components run in your page, take your theme, and can be swapped one at a time when one stops fitting. A headless SDK has no line at all, which is also its cost: every state the vendor's UI already handles (permission prompts, device switching, poor-network banners, screen-share layouts) is now yours to design and test.
Events and Auth: Who Owns the Call's State
With an iframe, your page learns about the call through the messages the iframe API chooses to send. If the API doesn't expose an event, such as a specific participant's network quality, you can't build a feature on it. With a UI kit or a headless SDK you get the full event stream, because the SDK runs in your page.
Auth moves the same way. In the iframe model, the vendor's UI makes the permission decisions, so your roles have to map onto its token properties. Daily's meeting tokens decide who is an owner or can record; 8x8's JaaS integration guide passes a signed JWT straight into the iframe constructor. That works until your product's roles don't fit the vendor's. With a UI kit or headless SDK, your own token service decides grants and your own UI enforces them, which is also where SSO and provisioning questions IT will ask get answered.
Permissions and Mobile: The iframe Has to Be Let In
A cross-origin iframe cannot use the camera unless the page that embeds it allows it. MDN's camera directive reference gives the default allowlist for the camera as self, and a blocked call to getUserMedia() rejects with NotAllowedError, the same error a user's refusal produces. In practice that means the iframe needs allow="camera; microphone", and per MDN's Permissions Policy guide the vendor's origin must also be allowed by your page's own Permissions-Policy header. Miss either and users see "camera blocked" with nothing in your logs to tell you why.
Mobile raises the stakes. Inside a native app, an iframe means a webview wrapping a page you don't control, with the platform's webview camera rules on top. On iPhones, that is WebKit, with its own camera behaviour on iOS Safari. Vendors that ship native SDKs and native UI kits avoid the webview entirely. If a native app is on your roadmap, check which of the three options the vendor offers on iOS and Android before choosing the web one.
Upgrades and Migration: Who Changes the Code
A hosted iframe changes when the vendor deploys. That is convenient: fixes and new features arrive without a release. It also means your users can see a new layout, a renamed button or a moved control before your support team does. With a UI kit or headless SDK, nothing changes until you upgrade the package, which is more work and more control.
Leaving is where the gap is widest. With a headless SDK behind a seam of your own, a provider change replaces an adapter. With a UI kit, the components go too, because they belong to the vendor. With an iframe, the whole meeting experience goes, and everything your users learned about it. That matches the evidence on what a provider switch rewrites: the object model, events and rendering all change.
Choosing: Which Layer Will You Need to Own?
The iframe is the right answer more often than engineers like to admit. If video is a supporting feature, used by a known audience on the web, with roles that fit the vendor's model, a prebuilt UI maintained by people who do nothing else is hard to beat. Accessibility, device quirks and poor-network handling come with it.
The signals that it won't stay right:
- Video is the product, or a core workflow. Branding and UX will matter, and themes run out.
- Your permissions model is your own. Clinician and patient, agent and customer, inspector and site: roles the vendor's token doesn't describe.
- You need call events in your own system. Analytics, billing by participant, CRM notes, compliance logs.
- A native app is coming. A webview is a poor long-term home for a camera.
If two or more apply, start with a UI kit and plan to replace components as you outgrow them. If you already know you need full control, go headless from day one; moving from an iframe to custom UI later means building the custom UI anyway, after users have learned the old one.
The Bottom Line
The three embed video options trade time now against control later. A prebuilt iframe is fastest and puts the vendor in charge of the UI, the roles and the release schedule. A UI kit shares that control. A headless SDK gives you all of it, along with every edge case. Choose by the layer you expect to own in eighteen months, not by the afternoon you save this week.
What's Next
Once auth lives in your own code, the next decision is how to issue tokens safely. Next: why you should keep the signing secret on your server.
Frequently Asked Questions
What are the embed video options for adding calls to a web app?
There are three: the vendor's prebuilt meeting UI in an iframe, the vendor's UI components running in your page, or a headless SDK where you build the UI yourself. Most video providers offer all three, under different names.
Is it bad to embed a video call in an iframe?
No. For a supporting feature on the web, with roles that fit the vendor's model, it is often the best choice. It becomes costly when you need your own branding, your own permission model, call events in your systems, or a native mobile app.
Why does my embedded video iframe say the camera is blocked?
The embedding page has to delegate camera and microphone access, usually with allow="camera; microphone" on the iframe and a matching Permissions-Policy header. Without both, getUserMedia() rejects with NotAllowedError, the same error as a user saying no.
What does "headless" mean for a video SDK?
The SDK handles media, rooms and events but ships no UI. You build every screen. It takes longer to launch and gives full control over design, permissions and behaviour.
Can I start with a prebuilt UI and switch to a custom one later?
Yes, but the custom UI is a rebuild, not a migration: nothing from the iframe carries over. A UI kit is the gentler path, because components can be replaced one at a time. Samvyo, for example, ships SDKs for JavaScript, React and React Native, so the choice of how much UI to own stays with you.
Which embed option is best for an on-premise deployment?
Any of them can work, but with an iframe the UI is served from wherever the vendor hosts it. If the requirement is that nothing loads from outside your network, check where the prebuilt UI is served from. With a platform such as Samvyo, which supports on-premise deployment, an SDK-based UI runs from your own application, so the question reduces to where the media servers sit.