Short answer: there are two ways to do this, and picking the wrong one is why most "embed Jitsi in WordPress" attempts end up as a blank white box where the meeting should be. Install a plugin (FlexMeeting or MeetingHub) and you get a working room in about five minutes, no code touched. Paste in an iframe yourself and it takes a bit longer to set up, but you're not stuck on Jitsi's free hosted domain with its call-length cap and its branding sitting on top of your meeting.

Which one you actually want depends on one question: are you pointing at the free hosted Jitsi domain, or at a self-hosted instance running under your own domain? Get that answer first, everything below follows from it.

Which Domain Are You Embedding?

meet.jit.si (or another 8x8-hosted domain) is free and is the default many plugins point at out of the box. Two things changed in 2023 that most WordPress guides still don't mention. The person starting a meeting now has to sign in with a Google, GitHub or Facebook account. And a meet.jit.si room embedded in another site gets disconnected after five minutes: Jitsi announced that embedding the public server is only meant for demos. It's also shared infrastructure, so quality dips during peak hours, and 8x8's own branding shows up in the room.

If you want a hosted option that does allow embedding, 8x8 points people to JaaS (Jitsi as a Service), which has a free tier for small usage and the same iframe API.

Self-hosted Jitsi is a server you run under your own domain. No cap on call length, no Jitsi branding, and you can lock the room down with JWT auth if you don't want it open to anyone with the link. It's also one more server you're responsible for patching.

If you're not sure which camp you're in: if you've never set up a server for this and just want a meeting room on your site today, use Method 1 with a plugin that doesn't rely on meet.jit.si (FlexMeeting's free tier uses its own hosted domain). If calls matter to your business, a self-hosted server is the lasting fix, and our guide to installing Jitsi Meet on Ubuntu covers the setup.

Method 1: A Plugin, No Code

Two plugins actively cover this as of today. FlexMeeting is Jitsi-only, has 1,000+ active installs and a 4.5-star rating, and its free tier already sidesteps the 2-hour cap the plugin's own listing attributes to 8x8-hosted domains, it defaults to a different hosted domain instead. MeetingHub is the broader pick if you also run Zoom or Google Meet links from the same site, it wraps all of them (plus Webex and Microsoft Teams) into one dashboard, with 400+ installs and a 4.8-star rating as of September 2026.

For a Jitsi-only embed, FlexMeeting is the more direct tool. Here's the setup:

  1. In wp-admin, go to Plugins → Add New Plugin and search "FlexMeeting" (its full listing name is "Webinar & Meeting Plugin for Jitsi Meet"). Install and activate it.
  2. Open the page or post where the meeting should live, add a block, and search "Jitsi Meet" under the Embeds category, or use its Gutenberg block directly if it appears in the inserter.
  3. Set a room name and the block's width and height. A room name is all that's required, FlexMeeting generates the meeting itself.
  4. Publish, then open the page in a private/incognito window to confirm it loads and the camera prompt appears, logged-in admin sessions can hide permission issues other visitors will hit.

MeetingHub's setup is nearly identical, install, add its block or shortcode, pick Jitsi as the platform for that particular room. If you're only ever going to embed Jitsi, though, a single-purpose plugin means fewer settings screens to get lost in.

On WordPress.com

If your site is hosted on WordPress.com rather than self-hosted WordPress.org, plugin installs (FlexMeeting included) need the Business plan or above. Personal and Premium plans block third-party plugins entirely, and the iframe method below won't work there either, since those plans also block the Custom HTML block.

Method 2: A Plain Iframe, No Plugin

If you're self-hosting Jitsi already, this is less setup than a plugin's options page. Open the page in the block editor, add a Custom HTML block (not a Paragraph block, that distinction matters, more on why below), and drop this in:

<iframe
  src="https://meet.yourdomain.com/YourRoomName"
  allow="camera; microphone; fullscreen; display-capture"
  style="height: 600px; width: 100%; border: 0;"
></iframe>

Swap in your own domain and a room name (not meet.jit.si, for the five-minute reason above). The allow attribute is the part people forget, without it the browser never even asks for camera and mic permission inside the frame, the call just sits there silent.

Why it has to be the Custom HTML block

WordPress runs saved post content through wp_kses for any account that lacks the unfiltered_html capability, which strips iframe and script tags. Administrators on a single-site install have that capability by default; on multisite, only Super Admins do. Paste this into a Paragraph block, or save it as an Editor-level account, and the tag quietly vanishes on save, no error, no warning, just gone.

A Dynamic Room With the JavaScript API

The plain iframe above is fine for one fixed room. If you want the room name generated per page, per user, or per booking, that needs Jitsi's JitsiMeetExternalAPI object instead of a static iframe, same Custom HTML block, more code. I've written up that setup in detail in our Jitsi iframe API guide, and JWT authentication for Jitsi covers locking rooms down so only your logged-in WordPress users get in. The official IFrame API reference lists every option.

What Actually Breaks

The failure modes I'd check first, in the order I'd check them:

  • Blank box, nothing loads at all. Usually a caching or minification plugin (Autoptimize, WP Rocket's JS minify) mangling the script or iframe tag on output. Exclude the specific page from JS minification and reload.
  • Box loads, camera/mic never prompts. Check your own WordPress site is served over HTTPS. Browsers require a secure context to grant camera and mic permissions, and if the parent page is plain HTTP, the permission request inside the iframe gets silently blocked, even though the Jitsi domain itself is HTTPS.
  • Works for you, breaks for other admins or editors. The unfiltered_html issue above, they saved the page and the tag got stripped without them noticing.
  • Missing entirely on the mobile app view or AMP version of the page. AMP strips custom iframes and scripts by design. If you're running an AMP plugin, this embed simply won't appear on the AMP-served version, only the standard page.

None of these are Jitsi problems, they're all WordPress or hosting configuration catching the embed before it renders. Worth ruling out in that order before assuming the Jitsi side is broken.

Outgrowing the Free Domain

The free hosted domain covers casual use fine. Where it stops working is anything client-facing or recurring at scale: the branding is 8x8's, not yours, the call-length cap shows up mid-meeting, and quality varies with how busy their shared infrastructure is that day. Moving to a self-hosted domain fixes all three, and once you're there, the iframe method above is the one to use, not a plugin's paid tier just to unlock a custom domain field.

If you want your own branding on the call itself, not just your own domain in the URL, that's a separate step covered in our guide to customizing the Jitsi Meet frontend.

Frequently Asked Questions

Is there an official Jitsi Meet WordPress plugin?

No. Jitsi (owned by 8x8) doesn't maintain one itself. The two actively maintained third-party options are FlexMeeting and MeetingHub, both free on the WordPress.org plugin directory.

Can I embed Jitsi Meet in WordPress for free?

Yes. FlexMeeting and MeetingHub both have free tiers, and a plain iframe costs nothing. The catch is the server behind it: meet.jit.si cuts embedded calls off after five minutes, so a lasting embed needs your own Jitsi server or JaaS's free tier.

Does the free Jitsi WordPress plugin have a time limit?

FlexMeeting's own listing calls out a 2-hour cap on 8x8-hosted domains, and says its free tier defaults to a different hosted domain to avoid it. A self-hosted domain has no such cap either way.

Do I need to know how to code to add Jitsi Meet to WordPress?

Not for the plugin route, it's block-and-shortcode based. The iframe route needs zero coding too, just one line pasted into a Custom HTML block, but it does mean typing HTML instead of clicking settings.

Why did my Jitsi iframe disappear after I saved the page?

You're probably logged in as an Editor or Author, not an Administrator. WordPress strips iframe and script tags from saved content for any account missing the unfiltered_html capability, even inside a Custom HTML block.

Can I point a WordPress plugin at my own self-hosted Jitsi server?

With FlexMeeting, only on the Pro or Ultimate tier, custom domains are locked out of the free version. If you're already self-hosting, it's simpler to skip the plugin and use the iframe method, which works with any domain for free.

Does embedding Jitsi Meet work on WordPress.com?

Only on the Business plan or above. Personal and Premium WordPress.com plans block both third-party plugin installs and the Custom HTML block, so neither method here will work until you upgrade.

Why does my embedded Jitsi call end after 5 minutes?

You're embedding meet.jit.si. Since May 2023 the public server disconnects embedded calls after five minutes with a note that embedding is only meant for demos. Point the embed at your own Jitsi server or at 8x8's JaaS instead.

Related Articles

Get a Self-Hosted Domain Without Running the Server

Meetrix's pre-configured Jitsi Meet AMI runs under your own domain from the moment it launches, no plugin's Pro tier needed to get there. Point the iframe method above at it and the branding, the call-length cap, and the shared-infrastructure slowdowns are gone.

Launch Jitsi Meet 50-User AMI (with Recording) on AWS Marketplace