<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>  Blog</title>
        <link>https://www.plugnmeet.org/blog</link>
        <description>  Blog</description>
        <lastBuildDate>Mon, 08 Jun 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>Copyright © 2026 MynaParrot SL.</copyright>
        <item>
            <title><![CDATA[Your Website, Your Meetings: Introducing the All-New plugNmeet Plugin for WordPress!]]></title>
            <link>https://www.plugnmeet.org/blog/new-plugnmeet-wordpress-plugin-deep-integration</link>
            <guid>https://www.plugnmeet.org/blog/new-plugnmeet-wordpress-plugin-deep-integration</guid>
            <pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Discover the new plugNmeet plugin for WordPress. Featuring deep integration, shortcode embedding, advanced analytics, and a seamless, white-label experience for self-hosted video conferencing.]]></description>
            <content:encoded><![CDATA[<p>Embedding a video meeting on your WordPress site shouldn't mean sending your users to a third-party platform with confusing branding and a clunky interface. Your website is your brand's home, and your meetings should feel like a natural part of it. What if you could host secure, feature-rich video conferences directly from your own domain, with your own branding, and without writing a single line of code?</p>
<p>Today, we are excited to launch the all-new, deeply integrated plugNmeet plugin for WordPress. This plugin is your gateway to transforming any WordPress page or post into a powerful, self-hosted video conferencing room.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="more-than-just-a-meetingits-part-of-your-site">More Than Just a Meeting—It's Part of Your Site<a href="https://www.plugnmeet.org/blog/new-plugnmeet-wordpress-plugin-deep-integration#more-than-just-a-meetingits-part-of-your-site" class="hash-link" aria-label="Direct link to More Than Just a Meeting—It's Part of Your Site" title="Direct link to More Than Just a Meeting—It's Part of Your Site" translate="no">​</a></h3>
<p>While our original plugin allowed you to <a class="" href="https://www.plugnmeet.org/blog/no-code-video-conferencing-service-with-wordpress">launch your own no-code video conferencing service</a>, this new version is a major leap forward, rebuilt from the ground up for an even deeper and more seamless integration. We focused on a user experience that feels like a native part of WordPress, both for you as the administrator and for your site visitors. From creating rooms in the backend to managing post-session artifacts, every tool you need is right where you'd expect it—inside your WordPress dashboard.</p>
<p>Let's explore the features that make this plugin the ultimate solution for self-hosted video conferencing on WordPress.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="seamless-integration-and-powerful-management">Seamless Integration and Powerful Management<a href="https://www.plugnmeet.org/blog/new-plugnmeet-wordpress-plugin-deep-integration#seamless-integration-and-powerful-management" class="hash-link" aria-label="Direct link to Seamless Integration and Powerful Management" title="Direct link to Seamless Integration and Powerful Management" translate="no">​</a></h3>
<p>We built this plugin to be incredibly easy to use while offering the powerful features our users love.</p>
<ul>
<li class=""><strong>Embed Anywhere with Shortcodes:</strong> Once you create a room, the plugin gives you a simple shortcode (e.g., <code>[plugnmeet_room_view id="your_room_id"]</code>). Paste it into any page, post, or even a widget, and you have a live meeting room. It works flawlessly with the classic editor, Gutenberg, and popular page builders.</li>
<li class=""><strong>Clean, Shareable URLs:</strong> Want a clean, professional link to share for your meetings? The plugin allows you to set a "Host Page," giving every room its own dedicated URL like <code>yoursite.com/meetings/your-room-id/</code>. This is perfect for direct sharing in emails or social media.</li>
<li class=""><strong>Full Backend Control:</strong> Manage everything from your WordPress admin area. The <strong>Plug-N-Meet &gt; Rooms</strong> page is your command center to create, edit, and configure rooms, as well as access all post-session assets.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="effortless-recording-management-with-merging">Effortless Recording Management with Merging<a href="https://www.plugnmeet.org/blog/new-plugnmeet-wordpress-plugin-deep-integration#effortless-recording-management-with-merging" class="hash-link" aria-label="Direct link to Effortless Recording Management with Merging" title="Direct link to Effortless Recording Management with Merging" translate="no">​</a></h3>
<p>Managing your session recordings is now more powerful than ever. If a session was stopped and restarted, you no longer have to deal with multiple video files. Our <strong>new Merge Recordings feature</strong> allows you to select multiple video segments and combine them into a single, continuous MP4 file directly from the WordPress backend. It’s a simple, intuitive way to create a polished, final version of your recording for distribution.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="the-new-artifacts-menu-analytics-and-ai-at-your-fingertips">The New Artifacts Menu: Analytics and AI at Your Fingertips<a href="https://www.plugnmeet.org/blog/new-plugnmeet-wordpress-plugin-deep-integration#the-new-artifacts-menu-analytics-and-ai-at-your-fingertips" class="hash-link" aria-label="Direct link to The New Artifacts Menu: Analytics and AI at Your Fingertips" title="Direct link to The New Artifacts Menu: Analytics and AI at Your Fingertips" translate="no">​</a></h3>
<p>We've introduced a dedicated <strong>Artifacts menu</strong> for each room, centralizing all the valuable data your sessions produce. This is where you'll find:</p>
<ul>
<li class=""><strong>Actionable Classroom Analytics:</strong> Go beyond simple participant counts. Download comprehensive Excel reports detailing participant engagement, talk time, connection quality, and more. Use this data to understand your audience and improve your presentations, turning raw numbers into pedagogical insights. For a deeper dive, see our guide on <a class="" href="https://www.plugnmeet.org/blog/classroom-analytics-for-educators">Classroom Analytics for Educators</a>.</li>
<li class=""><strong>AI-Powered Summaries &amp; Transcripts:</strong> Access and download meeting summaries and full speech-to-text transcription files generated by our AI Meeting Assistant. For more on our AI capabilities, see our guide on <a class="" href="https://www.plugnmeet.org/blog/how-to-add-ai-meeting-assistant-features">how to add an AI meeting assistant</a>.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="built-for-customization-and-control">Built for Customization and Control<a href="https://www.plugnmeet.org/blog/new-plugnmeet-wordpress-plugin-deep-integration#built-for-customization-and-control" class="hash-link" aria-label="Direct link to Built for Customization and Control" title="Direct link to Built for Customization and Control" translate="no">​</a></h3>
<p>We believe in giving you full control over your platform.</p>
<ul>
<li class=""><strong>100% White-Label Experience:</strong> The meeting room loads directly within your WordPress site's design. There are no third-party logos or branding. It's your meeting, on your website. For a deeper dive into customization, read our <a class="" href="https://www.plugnmeet.org/blog/deep-integration-white-label-guide">deep integration and white-label guide</a>.</li>
<li class=""><strong>Granular, Role-Based Permissions:</strong> The plugin leverages standard WordPress user roles to give you fine-grained control. In the room settings, you can define exactly which roles can join as moderators versus attendees, and who gets access to view, download, or manage recordings.</li>
<li class=""><strong>Theme Developer Friendly:</strong> For those who need to customize the front-end display, the plugin features a powerful template overriding system. Developers can copy template files from the plugin into their own theme directory to safely modify the HTML structure, from minor tweaks to a complete redesign.</li>
<li class=""><strong>Extend with Webhooks:</strong> The plugin fires a <code>plugnmeet_webhook_data</code> action hook, allowing developers to easily process real-time meeting data. Use it to build custom logging, send data to a CRM, or create unique workflows. Learn more in our <a class="" href="https://www.plugnmeet.org/blog/how-to-build-your-first-webhook-workflow">guide to building workflows with webhooks</a>.</li>
</ul>
<hr>
<p><strong>Ready to bring your meetings home to your WordPress site?</strong></p>
<ul>
<li class=""><strong><a href="https://wordpress.org/plugins/plugnmeet/" target="_blank" rel="noopener noreferrer" class="">Download the official WordPress Plugin</a></strong></li>
<li class=""><strong><a href="https://demo.plugnmeet.com/landing.html" target="_blank" rel="noopener noreferrer" class="">Try the Live Demo</a> to explore the features.</strong></li>
<li class=""><strong>Follow our <a class="" href="https://www.plugnmeet.org/docs/installation">Installation Guide</a> to get your self-hosted server running in minutes.</strong></li>
</ul>]]></content:encoded>
            <category>wordpress</category>
            <category>plugnmeet</category>
            <category>video conferencing</category>
            <category>wordpress-plugin</category>
            <category>wordpress-integration</category>
            <category>self-hosted</category>
            <category>open-source</category>
            <category>video-meetings</category>
            <category>webinar-plugin</category>
        </item>
        <item>
            <title><![CDATA[Beyond the Broadcast: Building a Custom Q&A Webinar with RTMP and Plug-N-Meet's Broadcast API]]></title>
            <link>https://www.plugnmeet.org/blog/custom-qna-webinar-rtmp-broadcast-api</link>
            <guid>https://www.plugnmeet.org/blog/custom-qna-webinar-rtmp-broadcast-api</guid>
            <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Hosting a professional webinar often means balancing a high-quality broadcast with meaningful audience interaction. While RTMP streaming delivers a polished, one-to-many presentation, managing audience questions in a large-scale event can quickly become chaotic. How do you ensure every valuable question is seen, moderated, and delivered to your host without disrupting the flow?]]></description>
            <content:encoded><![CDATA[<p>Hosting a professional webinar often means balancing a high-quality broadcast with meaningful audience interaction. While RTMP streaming delivers a polished, one-to-many presentation, managing audience questions in a large-scale event can quickly become chaotic. How do you ensure every valuable question is seen, moderated, and delivered to your host without disrupting the flow?</p>
<p>Plug-N-Meet's API-first approach, combined with its robust RTMP broadcasting capabilities and the new <code>room/broadcastToRoom</code> API, provides the perfect solution. This guide will show you how to build a custom, curated Q&amp;A system that allows your audience to submit questions through your own platform, which are then seamlessly delivered to your webinar host in real-time.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="the-power-of-rtmp-broadcasting-for-professional-webinars">The Power of RTMP Broadcasting for Professional Webinars<a href="https://www.plugnmeet.org/blog/custom-qna-webinar-rtmp-broadcast-api#the-power-of-rtmp-broadcasting-for-professional-webinars" class="hash-link" aria-label="Direct link to The Power of RTMP Broadcasting for Professional Webinars" title="Direct link to The Power of RTMP Broadcasting for Professional Webinars" translate="no">​</a></h3>
<p>For webinars that demand high production value and reach a large audience, RTMP (Real-Time Messaging Protocol) broadcasting is the gold standard. It allows you to broadcast your Plug-N-Meet session directly to platforms like YouTube, Facebook, or your own website. This session, which includes all participants, screen shares, and whiteboards, becomes your "broadcast studio," ensuring a high-quality experience for thousands of viewers.</p>
<p>This "Broadcast Studio Model" is ideal for <a class="" href="https://www.plugnmeet.org/blog/hosting-large-scale-events-the-smart-way">hosting large-scale events</a>. The meeting itself is private to your hosts and presenters, but the output is streamed publicly.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="the-qa-dilemma-why-standard-chat-falls-short">The Q&amp;A Dilemma: Why Standard Chat Falls Short<a href="https://www.plugnmeet.org/blog/custom-qna-webinar-rtmp-broadcast-api#the-qa-dilemma-why-standard-chat-falls-short" class="hash-link" aria-label="Direct link to The Q&amp;A Dilemma: Why Standard Chat Falls Short" title="Direct link to The Q&amp;A Dilemma: Why Standard Chat Falls Short" translate="no">​</a></h3>
<p>In a large webinar, the public chat can quickly become a firehose of comments, greetings, and questions. While great for general interaction, it's a poor tool for managing a structured Q&amp;A session. Important questions get buried, and the host can easily miss critical inquiries.</p>
<p>A custom Q&amp;A system, integrated directly into your website or application, offers several advantages:</p>
<ul>
<li class=""><strong>Moderation:</strong> Questions can be reviewed and approved before reaching the host.</li>
<li class=""><strong>Prioritization:</strong> Important questions can be highlighted or reordered.</li>
<li class=""><strong>Branding:</strong> The Q&amp;A experience is seamlessly integrated into your platform.</li>
<li class=""><strong>Control:</strong> You dictate the flow and presentation of questions.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="building-your-custom-qa-system-with-roombroadcasttoroom">Building Your Custom Q&amp;A System with <code>room/broadcastToRoom</code><a href="https://www.plugnmeet.org/blog/custom-qna-webinar-rtmp-broadcast-api#building-your-custom-qa-system-with-roombroadcasttoroom" class="hash-link" aria-label="Direct link to building-your-custom-qa-system-with-roombroadcasttoroom" title="Direct link to building-your-custom-qa-system-with-roombroadcasttoroom" translate="no">​</a></h3>
<p>This is where the new <code>room/broadcastToRoom</code> API becomes invaluable. It allows your custom backend system to send messages directly into an active Plug-N-Meet room, appearing as if they came from a participant.</p>
<p>Here's the concept:</p>
<ol>
<li class=""><strong>Audience Submission:</strong> Your audience watches the RTMP stream on your website. On the same page (or a linked one), they see a custom form to submit questions.</li>
<li class=""><strong>Backend Moderation:</strong> These questions are sent to <em>your</em> custom backend, where a moderator can review, edit, or approve them.</li>
<li class=""><strong>API Injection:</strong> Once a question is approved, your backend uses the <code>room/broadcastToRoom</code> API to send it as a chat message directly to the host (or all admins) within the Plug-N-Meet broadcast studio room.</li>
</ol>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="how-the-roombroadcasttoroom-api-works-for-qa">How the <code>room/broadcastToRoom</code> API Works for Q&amp;A<a href="https://www.plugnmeet.org/blog/custom-qna-webinar-rtmp-broadcast-api#how-the-roombroadcasttoroom-api-works-for-qa" class="hash-link" aria-label="Direct link to how-the-roombroadcasttoroom-api-works-for-qa" title="Direct link to how-the-roombroadcasttoroom-api-works-for-qa" translate="no">​</a></h4>
<p>The <code>room/broadcastToRoom</code> API allows you to send either a <code>chat_msg</code> or a <code>notification_msg</code>. For Q&amp;A, we'll use the <code>chat_msg</code> payload. You can target specific users (like your host) or all admins.</p>
<p><strong>Endpoint:</strong> <code>/room/broadcastToRoom</code></p>
<p><strong>Key Parameters for Q&amp;A:</strong></p>
<ul>
<li class=""><code>room_id</code>: The ID of your Plug-N-Meet broadcast studio room.</li>
<li class=""><code>only_to_admins</code>: Set to <code>true</code> to ensure only your host(s) and co-hosts see the questions.</li>
<li class=""><code>chat_msg.message</code>: The actual question text.</li>
<li class=""><code>chat_msg.to_user_id</code> (Optional): If you want to send the question to a specific host, you can use their <code>user_id</code>.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="step-by-step-implementation-idea">Step-by-Step Implementation Idea<a href="https://www.plugnmeet.org/blog/custom-qna-webinar-rtmp-broadcast-api#step-by-step-implementation-idea" class="hash-link" aria-label="Direct link to Step-by-Step Implementation Idea" title="Direct link to Step-by-Step Implementation Idea" translate="no">​</a></h3>
<p>Let's outline how you can set this up:</p>
<p><strong>Step 1: Set up Your Plug-N-Meet Webinar Room</strong>
Create your Plug-N-Meet room via the <a class="" href="https://www.plugnmeet.org/docs/api/room/create">Create Room API</a>, ensuring RTMP is enabled. This will be your private "broadcast studio" where your presenters and production team will gather.</p>
<p><strong>Step 2: Configure RTMP Broadcast</strong>
To broadcast your webinar to a public audience, the moderator can initiate the live stream from within the Plug-N-Meet room.</p>
<ol>
<li class="">Open the <strong>More Options</strong> menu (...) in the footer control bar and select <strong>Start Live Stream</strong>.</li>
<li class="">Enter the <strong>Stream Key</strong> and <strong>Stream URL</strong> provided by your streaming platform (e.g., YouTube, Facebook).</li>
<li class="">Click <strong>Start Streaming</strong> to begin broadcasting the session.</li>
</ol>
<p><strong>Step 3: Develop Your Custom Q&amp;A Frontend (Audience-Facing)</strong>
Create a simple web form on your website where your audience can type and submit their questions. This form will send the questions to <em>your</em> custom backend server.</p>
<p><strong>Step 4: Implement Your Q&amp;A Backend (Moderation &amp; API Call)</strong>
This is the core of your custom system:</p>
<ol>
<li class=""><strong>Receive Questions:</strong> Your backend receives questions from the audience-facing form.</li>
<li class=""><strong>Moderation Dashboard:</strong> Build a simple dashboard for your Q&amp;A moderator. Here, they can see incoming questions, approve/reject them, and perhaps reorder them.</li>
<li class=""><strong>Call <code>room/broadcastToRoom</code>:</strong> When the moderator approves a question, your backend makes an API call to Plug-N-Meet's <code>room/broadcastToRoom</code> endpoint.</li>
</ol>
<p><strong>Example JSON Payload for your Backend's API Call to Plug-N-Meet:</strong></p>
<div class="language-json codeBlockContainer_ZFFP theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_JM6y"><pre tabindex="0" class="prism-code language-json codeBlock_Gv80 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_N0jv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"room_id"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"your-webinar-studio-room-id"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"only_to_admins"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"chat_msg"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"message"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Audience Question: [Approved Question Text Here]"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>This will deliver the approved question directly into the chat panel of your Plug-N-Meet broadcast studio, visible only to your host(s) and admins. Your host can then read the question aloud or respond as appropriate.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="benefits-of-this-approach">Benefits of this Approach<a href="https://www.plugnmeet.org/blog/custom-qna-webinar-rtmp-broadcast-api#benefits-of-this-approach" class="hash-link" aria-label="Direct link to Benefits of this Approach" title="Direct link to Benefits of this Approach" translate="no">​</a></h3>
<ul>
<li class=""><strong>Curated Q&amp;A:</strong> Only approved questions reach the host, maintaining professionalism.</li>
<li class=""><strong>Reduced Distraction:</strong> The host can focus on the presentation without a constantly scrolling public chat.</li>
<li class=""><strong>Enhanced Control:</strong> You have full control over the Q&amp;A process, from submission to delivery.</li>
<li class=""><strong>Branded Experience:</strong> The audience interacts with your custom platform, reinforcing your brand.</li>
<li class=""><strong>Flexibility:</strong> You can extend your custom Q&amp;A system with features like upvoting, categorization, or even AI-powered question clustering.</li>
</ul>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="conclusion-your-webinar-your-rules">Conclusion: Your Webinar, Your Rules<a href="https://www.plugnmeet.org/blog/custom-qna-webinar-rtmp-broadcast-api#conclusion-your-webinar-your-rules" class="hash-link" aria-label="Direct link to Conclusion: Your Webinar, Your Rules" title="Direct link to Conclusion: Your Webinar, Your Rules" translate="no">​</a></h3>
<p>Plug-N-Meet's API-first architecture empowers you to go beyond off-the-shelf solutions and design truly bespoke webinar experiences. By combining professional RTMP broadcasting with a custom Q&amp;A system powered by the <code>room/broadcastToRoom</code> API, you can deliver highly engaging, moderated, and branded webinars that stand out.</p>
<p>Stop letting generic tools dictate your audience interaction. Start building a webinar experience that's uniquely yours.</p>
<hr>
<p><strong>Ready to build your custom Q&amp;A webinar?</strong></p>
<ul>
<li class=""><strong><a class="" href="https://www.plugnmeet.org/docs/api/room/broadcast-to-room">Explore the <code>room/broadcastToRoom</code> API Documentation</a></strong></li>
<li class=""><strong><a class="" href="https://www.plugnmeet.org/blog/hosting-large-scale-events-the-smart-way">Discover how to host large-scale events</a></strong></li>
<li class=""><strong><a class="" href="https://www.plugnmeet.org/docs/api/intro">Check out our API Documentation to start building</a>.</strong></li>
</ul>]]></content:encoded>
            <category>webinar</category>
            <category>rtmp</category>
            <category>broadcast</category>
            <category>api</category>
            <category>custom-qna</category>
            <category>integration</category>
            <category>developer</category>
            <category>live-streaming</category>
            <category>engagement</category>
            <category>open-source</category>
        </item>
        <item>
            <title><![CDATA[Streamline Your Session Replays: Introducing the New Merge Recordings API]]></title>
            <link>https://www.plugnmeet.org/blog/merge-recordings-api</link>
            <guid>https://www.plugnmeet.org/blog/merge-recordings-api</guid>
            <pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[At Plug-N-Meet, we are constantly working to improve the post-session experience for both administrators and end-users. A common challenge in long-running events like webinars, online classes, or multi-part training sessions is managing multiple recording segments. Stopping and starting a recording is often necessary, but it leaves you with a fragmented collection of video files.]]></description>
            <content:encoded><![CDATA[<p>At Plug-N-Meet, we are constantly working to improve the post-session experience for both administrators and end-users. A common challenge in long-running events like webinars, online classes, or multi-part training sessions is managing multiple recording segments. Stopping and starting a recording is often necessary, but it leaves you with a fragmented collection of video files.</p>
<p>Today, we're excited to solve this problem with the introduction of the <code>/recording/mergeRecordings</code> API—a powerful new tool designed to consolidate multiple recording files into a single, seamless video. This feature is a must-have for anyone running a self-hosted <strong>video conference server</strong> and looking to provide a polished, professional experience.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="the-problem-fragmented-recordings">The Problem: Fragmented Recordings<a href="https://www.plugnmeet.org/blog/merge-recordings-api#the-problem-fragmented-recordings" class="hash-link" aria-label="Direct link to The Problem: Fragmented Recordings" title="Direct link to The Problem: Fragmented Recordings" translate="no">​</a></h3>
<p>Imagine you're hosting a three-hour workshop on your <strong>video call server</strong>. You pause the recording during a 15-minute break and then resume it. Or perhaps you have to restart a recording due to a technical issue. At the end of the session, you have two or more separate video files.</p>
<p>This creates a disjointed experience for anyone watching the replay. It also creates extra work for administrators who have to manually download, edit, and re-upload the files to create a single, coherent video.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="the-solution-the-mergerecordings-api">The Solution: The <code>mergeRecordings</code> API<a href="https://www.plugnmeet.org/blog/merge-recordings-api#the-solution-the-mergerecordings-api" class="hash-link" aria-label="Direct link to the-solution-the-mergerecordings-api" title="Direct link to the-solution-the-mergerecordings-api" translate="no">​</a></h3>
<p>The <code>mergeRecordings</code> API automates this entire process. It allows you to programmatically combine multiple recording files from a session into one continuous video. The original files are kept intact, and a new, merged recording is created with its own unique <code>record_id</code>.</p>
<p>This process happens asynchronously in the background, so it doesn’t tie up your system. You simply make the API request, and when the merge is complete, your application receives a webhook notification (<code>recording_proceeded</code>) with the details of the new, unified recording file.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="use-case-spotlight-seamless-merging-in-our-moodle-video-conference-plugin">Use Case Spotlight: Seamless Merging in our Moodle Video Conference Plugin<a href="https://www.plugnmeet.org/blog/merge-recordings-api#use-case-spotlight-seamless-merging-in-our-moodle-video-conference-plugin" class="hash-link" aria-label="Direct link to Use Case Spotlight: Seamless Merging in our Moodle Video Conference Plugin" title="Direct link to Use Case Spotlight: Seamless Merging in our Moodle Video Conference Plugin" translate="no">​</a></h3>
<p>This isn't just a theoretical feature—it's already enhancing our official <strong><a class="" href="https://www.plugnmeet.org/docs/user-guide/moodle-integration#merge-multiple-recordings">Plug-N-Meet Moodle Plugin</a></strong>. As a leading <strong>moodle video conference plugin</strong>, we believe in providing seamless workflows for educators.</p>
<p><strong>The Scenario:</strong> A teacher conducts a long class and records it in two parts. After the session, they see both recordings listed in their Moodle activity.</p>
<p><strong>The Old Way:</strong> The teacher would have to instruct students to watch both videos in order, or manually download and edit them together.</p>
<p><strong>The New Way with the API:</strong></p>
<ol>
<li class="">The teacher navigates to the "Recordings" tab in their Moodle course activity.</li>
<li class="">They select the recordings they want to combine.</li>
<li class="">They click a "Merge" button directly within the Moodle interface.</li>
<li class="">The Moodle backend calls the <code>mergeRecordings</code> API.</li>
<li class="">A short time later, a new, single recording file automatically appears in the list, ready for students to view.</li>
</ol>
<p><strong>The Result:</strong> An incredibly simple, intuitive workflow for educators. They can create a polished, single-session replay without ever leaving their Moodle dashboard, demonstrating the power of this API to create user-friendly features on any <strong>video conference server</strong>.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="how-it-works-two-powerful-merging-strategies">How It Works: Two Powerful Merging Strategies<a href="https://www.plugnmeet.org/blog/merge-recordings-api#how-it-works-two-powerful-merging-strategies" class="hash-link" aria-label="Direct link to How It Works: Two Powerful Merging Strategies" title="Direct link to How It Works: Two Powerful Merging Strategies" translate="no">​</a></h3>
<p>The API offers two flexible ways to combine your recordings:</p>
<ol>
<li class="">
<p><strong>Merge by Session (<code>by_session</code>)</strong>: This is the simplest method. You provide a <code>room_sid</code> (the unique identifier for a session), and the API automatically finds all recording files associated with that session and merges them in chronological order. You can even choose to exclude specific recordings if you need to remove a false start or an unwanted segment.</p>
</li>
<li class="">
<p><strong>Merge by IDs (<code>by_ids</code>)</strong>: This method gives you granular control. You provide an explicit list of <code>recording_ids</code> in the exact order you want them to be merged. This is perfect for more complex scenarios where you might be combining recordings from different sessions into a single compilation.</p>
</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="technical-quick-look">Technical Quick-Look<a href="https://www.plugnmeet.org/blog/merge-recordings-api#technical-quick-look" class="hash-link" aria-label="Direct link to Technical Quick-Look" title="Direct link to Technical Quick-Look" translate="no">​</a></h3>
<ul>
<li class=""><strong>Asynchronous Operation</strong>: This is a background job. Your application makes the API call and gets an immediate confirmation. The actual processing is handled by a <code>plugnmeet-recorder</code> instance.</li>
<li class=""><strong>Webhook Notification</strong>: You must have a webhook endpoint configured to receive the <code>recording_proceeded</code> event. This event will signal that the merged file is ready and provide its new <code>record_id</code>.</li>
<li class=""><strong>Originals are Safe</strong>: The merge process is non-destructive. Your original recording files are never deleted, giving you the freedom to manage them as you see fit.</li>
</ul>
<p>For detailed request and response examples, please refer to the official <strong><a class="" href="https://www.plugnmeet.org/docs/api/recording/merge-recordings">mergeRecordings API Documentation</a></strong>.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="conclusion-a-smoother-experience-for-everyone">Conclusion: A Smoother Experience for Everyone<a href="https://www.plugnmeet.org/blog/merge-recordings-api#conclusion-a-smoother-experience-for-everyone" class="hash-link" aria-label="Direct link to Conclusion: A Smoother Experience for Everyone" title="Direct link to Conclusion: A Smoother Experience for Everyone" translate="no">​</a></h3>
<p>The <code>mergeRecordings</code> API is a game-changer for anyone who needs to deliver polished, professional session replays. By automating the consolidation of fragmented recordings, it saves administrators time, simplifies post-production workflows, and provides a seamless viewing experience for your audience.</p>
<p>This feature is a perfect example of our commitment to providing a flexible, API-driven platform that can adapt to your unique needs, making your <strong>video call server</strong> more powerful than ever.</p>
<hr>
<p><strong>Ready to simplify your recording management?</strong></p>
<ul>
<li class=""><strong><a class="" href="https://www.plugnmeet.org/docs/api/recording/merge-recordings">Explore the <code>mergeRecordings</code> API Documentation</a></strong></li>
<li class=""><strong><a class="" href="https://www.plugnmeet.org/docs/api/intro">Check out our full API Reference</a></strong></li>
<li class=""><strong><a class="" href="https://www.plugnmeet.org/docs/user-guide/moodle-integration">Learn more about our Moodle Integration</a></strong></li>
</ul>]]></content:encoded>
            <category>api</category>
            <category>developer</category>
            <category>recording</category>
            <category>integration</category>
            <category>automation</category>
            <category>video-editing</category>
            <category>moodle</category>
            <category>use-case</category>
            <category>moodle video conference plugin</category>
            <category>video call server</category>
            <category>video conference server</category>
        </item>
        <item>
            <title><![CDATA[Injecting Content in Real-Time: A Developer's Guide to the New `uploadWhiteboardFile` API]]></title>
            <link>https://www.plugnmeet.org/blog/programmatic-whiteboard-uploads-api</link>
            <guid>https://www.plugnmeet.org/blog/programmatic-whiteboard-uploads-api</guid>
            <pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[At Plug-N-Meet, our goal is to provide a platform, not just a product. While our user interface is feature-rich, the true power of our architecture lies in its API-first design. Today, we're excited to introduce a new endpoint that gives developers unprecedented control over live sessions: /room/uploadWhiteboardFile.]]></description>
            <content:encoded><![CDATA[<p>At Plug-N-Meet, our goal is to provide a platform, not just a product. While our user interface is feature-rich, the true power of our architecture lies in its API-first design. Today, we're excited to introduce a new endpoint that gives developers unprecedented control over live sessions: <code>/room/uploadWhiteboardFile</code>.</p>
<p>This API allows your backend application to programmatically upload files directly into an active meeting's whiteboard, opening the door to powerful, seamless, and automated content workflows. This guide will walk you through the key use cases for this new feature and how it can transform your integration.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="why-a-new-upload-api-the-power-of-real-time">Why a New Upload API? The Power of Real-Time<a href="https://www.plugnmeet.org/blog/programmatic-whiteboard-uploads-api#why-a-new-upload-api-the-power-of-real-time" class="hash-link" aria-label="Direct link to Why a New Upload API? The Power of Real-Time" title="Direct link to Why a New Upload API? The Power of Real-Time" translate="no">​</a></h3>
<p>You might be familiar with the <code>preload_file</code> option in our <a class="" href="https://www.plugnmeet.org/docs/api/room/create">Create Room API</a>. While useful, it's designed for a different purpose: loading a document <em>before</em> a session begins.</p>
<p>The new <code>uploadWhiteboardFile</code> endpoint is fundamentally different. It's designed to inject content into a <strong>live, running session</strong>. This real-time capability is a game-changer for dynamic applications. When your backend calls this API, the file instantly appears in the presenter's file list within the live meeting, ready to be displayed.</p>
<p>Let's explore what you can build with this.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="use-case-1-seamless-cloud-storage-integration-google-drive-dropbox-etc">Use Case 1: Seamless Cloud Storage Integration (Google Drive, Dropbox, etc.)<a href="https://www.plugnmeet.org/blog/programmatic-whiteboard-uploads-api#use-case-1-seamless-cloud-storage-integration-google-drive-dropbox-etc" class="hash-link" aria-label="Direct link to Use Case 1: Seamless Cloud Storage Integration (Google Drive, Dropbox, etc.)" title="Direct link to Use Case 1: Seamless Cloud Storage Integration (Google Drive, Dropbox, etc.)" translate="no">​</a></h3>
<p><strong>The Scenario:</strong> A user in your application wants to present a file stored in their Google Drive.</p>
<p><strong>The Old Way:</strong> The user would have to download the file from Google Drive to their computer, then manually upload it through the Plug-N-Meet UI. This is a clunky, multi-step process.</p>
<p><strong>The New Way with the API:</strong></p>
<ol>
<li class="">Your application's UI provides a button: "Present from Google Drive."</li>
<li class="">Using the Google Drive API, you allow the user to select a file.</li>
<li class="">Your backend server securely downloads the file from Google Drive.</li>
<li class="">Your backend then immediately calls the <code>uploadWhiteboardFile</code> API, pushing the file directly into the live Plug-N-Meet session.</li>
</ol>
<p><strong>The Result:</strong> A seamless, professional experience. The user goes from selecting a file in your app to having it ready to present in the meeting in a single click.</p>
<p><strong>Pro-Tip:</strong> For an even more efficient workflow, you can use the <code>document_link</code> parameter. Instead of downloading the file to your server first, you can generate a publicly accessible temporary URL for the file in cloud storage and pass that link to the API. The Plug-N-Meet server will handle the download directly.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="use-case-2-centralized-asset-library-for-corporate--education">Use Case 2: Centralized Asset Library for Corporate &amp; Education<a href="https://www.plugnmeet.org/blog/programmatic-whiteboard-uploads-api#use-case-2-centralized-asset-library-for-corporate--education" class="hash-link" aria-label="Direct link to Use Case 2: Centralized Asset Library for Corporate &amp; Education" title="Direct link to Use Case 2: Centralized Asset Library for Corporate &amp; Education" translate="no">​</a></h3>
<p><strong>The Scenario:</strong> A company wants to ensure all sales presentations use the latest approved template, or a university wants to provide lecturers with a library of official course materials.</p>
<p><strong>The Old Way:</strong> Presenters would have to find and download the correct file from a separate portal or shared drive before every meeting.</p>
<p><strong>The New Way with the API:</strong></p>
<ol>
<li class="">You build a "Resource Library" directly into your application's dashboard.</li>
<li class="">A presenter, already in a live meeting, can browse this library from your application's interface.</li>
<li class="">When they click "Add to Whiteboard" on a specific asset (e.g., <code>Q3-Sales-Deck.pptx</code>), your backend retrieves the file from its centralized storage.</li>
<li class="">Your backend calls the <code>uploadWhiteboardFile</code> API to inject it into the presenter's current session.</li>
</ol>
<p><strong>The Result:</strong> Perfect brand consistency and effortless access to up-to-date, official materials, all managed from a single source of truth.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="use-case-3-dynamic-report-generation-and-on-the-fly-analysis">Use Case 3: Dynamic Report Generation and On-the-Fly Analysis<a href="https://www.plugnmeet.org/blog/programmatic-whiteboard-uploads-api#use-case-3-dynamic-report-generation-and-on-the-fly-analysis" class="hash-link" aria-label="Direct link to Use Case 3: Dynamic Report Generation and On-the-Fly Analysis" title="Direct link to Use Case 3: Dynamic Report Generation and On-the-Fly Analysis" translate="no">​</a></h3>
<p><strong>The Scenario:</strong> A team is in a live meeting discussing performance metrics. They realize they need to see a specific, up-to-the-minute report that doesn't exist yet.</p>
<p><strong>The Old Way:</strong> Someone would have to leave the meeting, generate the report, save it, and then manually upload it. The meeting's momentum is lost.</p>
<p><strong>The New Way with the API:</strong></p>
<ol>
<li class="">Your application has a "Generate Live Report" button integrated into its dashboard.</li>
<li class="">A user in the meeting clicks the button and selects the required parameters.</li>
<li class="">Your backend generates the report (e.g., a PDF of a graph) on the fly.</li>
<li class="">As soon as the file is created, your backend calls the <code>uploadWhiteboardFile</code> API.</li>
</ol>
<p><strong>The Result:</strong> A report is generated and delivered into the live meeting in seconds, enabling true real-time, data-driven decision-making.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="use-case-4-moodle-integration---bridging-content-and-classroom">Use Case 4: Moodle Integration - Bridging Content and Classroom<a href="https://www.plugnmeet.org/blog/programmatic-whiteboard-uploads-api#use-case-4-moodle-integration---bridging-content-and-classroom" class="hash-link" aria-label="Direct link to Use Case 4: Moodle Integration - Bridging Content and Classroom" title="Direct link to Use Case 4: Moodle Integration - Bridging Content and Classroom" translate="no">​</a></h3>
<p><strong>The Scenario:</strong> Our official <a class="" href="https://www.plugnmeet.org/docs/user-guide/moodle-integration#upload-to-whiteboard-from-moodle">Plug-N-Meet Moodle Plugin</a> already leverages this API to create a seamless experience for educators. Teachers can manage a central repository of course materials within Moodle.</p>
<p><strong>The New Way with the API:</strong></p>
<ol>
<li class="">A teacher is conducting a live class using the Plug-N-Meet activity in Moodle.</li>
<li class="">They decide they need to show a specific PDF or presentation from their Moodle course files.</li>
<li class="">From an interface within Moodle (outside the live session window), the teacher selects the file.</li>
<li class="">The Moodle backend calls the <code>uploadWhiteboardFile</code> API, instantly pushing the selected document into the live virtual classroom.</li>
</ol>
<p><strong>The Result:</strong> The teacher never has to leave their Moodle environment. They can inject course materials into the live session on the fly, creating a fluid and uninterrupted teaching experience. This showcases how the API can bridge an external content management system directly with a live session.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="technical-quick-look--important-considerations">Technical Quick-Look &amp; Important Considerations<a href="https://www.plugnmeet.org/blog/programmatic-whiteboard-uploads-api#technical-quick-look--important-considerations" class="hash-link" aria-label="Direct link to Technical Quick-Look &amp; Important Considerations" title="Direct link to Technical Quick-Look &amp; Important Considerations" translate="no">​</a></h3>
<p>This endpoint uses a <code>multipart/form-data</code> request, which requires a different authentication method than our standard JSON APIs.</p>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="authentication">Authentication<a href="https://www.plugnmeet.org/blog/programmatic-whiteboard-uploads-api#authentication" class="hash-link" aria-label="Direct link to Authentication" title="Direct link to Authentication" translate="no">​</a></h4>
<p>The <code>HASH-SIGNATURE</code> must be generated using your <code>API-SECRET</code> with the value of the <code>Room-Id</code> header as the message body. This is different from other APIs where the signature is generated from the request body.</p>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="file-constraints">File Constraints<a href="https://www.plugnmeet.org/blog/programmatic-whiteboard-uploads-api#file-constraints" class="hash-link" aria-label="Direct link to File Constraints" title="Direct link to File Constraints" translate="no">​</a></h4>
<ul>
<li class=""><strong>Supported File Types</strong>: This API is optimized for office documents and presentations (<code>PDF</code>, <code>PPT</code>, <code>DOC</code>, etc.). Image files like <code>JPG</code> or <code>PNG</code> are <strong>not</strong> supported and will be rejected.</li>
<li class=""><strong>File Size</strong>: The file must not exceed the <code>max_size_whiteboard_file</code> limit defined in your server's configuration.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="server-behavior">Server Behavior<a href="https://www.plugnmeet.org/blog/programmatic-whiteboard-uploads-api#server-behavior" class="hash-link" aria-label="Direct link to Server Behavior" title="Direct link to Server Behavior" translate="no">​</a></h4>
<ul>
<li class=""><strong>Concurrent Uploads</strong>: The server processes only one upload at a time per room. If you send a new upload request while another is in progress for the same room, you will receive a <code>409 Conflict</code> error.</li>
<li class=""><strong>Timeouts &amp; Background Processing</strong>: File conversion can be resource-intensive. If your initial API call times out, don't worry. The server continues to process the file in the background. Once complete, the file will appear in the room, and the upload lock will be released.</li>
</ul>
<p>For a complete <code>curl</code> example and detailed parameter descriptions, please refer to the official <strong><a class="" href="https://www.plugnmeet.org/docs/api/room/upload-whiteboard-file">uploadWhiteboardFile API Documentation</a></strong>.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="conclusion-your-application-is-now-the-co-presenter">Conclusion: Your Application is Now the Co-Presenter<a href="https://www.plugnmeet.org/blog/programmatic-whiteboard-uploads-api#conclusion-your-application-is-now-the-co-presenter" class="hash-link" aria-label="Direct link to Conclusion: Your Application is Now the Co-Presenter" title="Direct link to Conclusion: Your Application is Now the Co-Presenter" translate="no">​</a></h3>
<p>The <code>uploadWhiteboardFile</code> API transforms the whiteboard from a simple user-driven tool into a programmable, dynamic canvas. It allows your application to become an active participant in the meeting, delivering relevant content exactly when it's needed.</p>
<p>This feature deepens the potential for integration, enabling you to build smarter, more automated, and highly professional workflows that set your application apart.</p>
<hr>
<p><strong>Ready to start building?</strong></p>
<ul>
<li class=""><strong><a class="" href="https://www.plugnmeet.org/docs/api/room/upload-whiteboard-file">Explore the <code>uploadWhiteboardFile</code> API Documentation</a></strong></li>
<li class=""><strong><a class="" href="https://www.plugnmeet.org/docs/api/intro">Check out our full API Reference</a></strong></li>
<li class=""><strong><a href="https://demo.plugnmeet.com/landing.html" target="_blank" rel="noopener noreferrer" class="">Try our Live Demo</a> to see the whiteboard in action.</strong></li>
</ul>]]></content:encoded>
            <category>api</category>
            <category>developer</category>
            <category>whiteboard</category>
            <category>integration</category>
            <category>automation</category>
            <category>real-time</category>
            <category>file-upload</category>
            <category>use-case</category>
            <category>moodle</category>
            <category>moodle video conference plugin</category>
            <category>video call server</category>
            <category>video conference server</category>
        </item>
        <item>
            <title><![CDATA[Beyond the Presentation: Designing Interactive Webinars with Plug-N-Meet]]></title>
            <link>https://www.plugnmeet.org/blog/designing-interactive-webinars-with-plugnmeet</link>
            <guid>https://www.plugnmeet.org/blog/designing-interactive-webinars-with-plugnmeet</guid>
            <pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[We've all been there: a webinar that feels less like a live event and more like a glorified slideshow. The presenter talks at the audience, the chat scrolls by unnoticed, and engagement dwindles. In today's digital-first world, simply broadcasting information isn't enough. Your audience expects to participate, to contribute, and to feel like an active part of the experience.]]></description>
            <content:encoded><![CDATA[<p>We've all been there: a webinar that feels less like a live event and more like a glorified slideshow. The presenter talks <em>at</em> the audience, the chat scrolls by unnoticed, and engagement dwindles. In today's digital-first world, simply broadcasting information isn't enough. Your audience expects to participate, to contribute, and to feel like an active part of the experience.</p>
<p>At Plug-N-Meet, we believe webinars should be dynamic, engaging, and truly interactive. It's not about replacing your presentation, but enhancing it with tools that foster real-time collaboration and feedback. This guide will show you how to leverage Plug-N-Meet's powerful features to design webinars that captivate your audience and deliver measurable results.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="the-problem-with-passive-webinars">The Problem with Passive Webinars<a href="https://www.plugnmeet.org/blog/designing-interactive-webinars-with-plugnmeet#the-problem-with-passive-webinars" class="hash-link" aria-label="Direct link to The Problem with Passive Webinars" title="Direct link to The Problem with Passive Webinars" translate="no">​</a></h3>
<p>Traditional webinars often fall short because they treat the audience as passive consumers. This leads to:</p>
<ul>
<li class=""><strong>Low Engagement:</strong> Attendees tune out, multitask, or simply leave.</li>
<li class=""><strong>Missed Opportunities:</strong> Valuable insights and questions from the audience are lost.</li>
<li class=""><strong>Ineffective Learning:</strong> Information retention is poor without active participation.</li>
<li class=""><strong>Generic Experience:</strong> Your event feels indistinguishable from countless others.</li>
</ul>
<p>Plug-N-Meet empowers you to break free from this mold and create memorable, impactful webinars.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="plug-n-meets-interactive-toolkit">Plug-N-Meet's Interactive Toolkit<a href="https://www.plugnmeet.org/blog/designing-interactive-webinars-with-plugnmeet#plug-n-meets-interactive-toolkit" class="hash-link" aria-label="Direct link to Plug-N-Meet's Interactive Toolkit" title="Direct link to Plug-N-Meet's Interactive Toolkit" translate="no">​</a></h3>
<p>Our platform is packed with features designed to turn your audience into active participants. Here’s how you can use them:</p>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="1-live-polls-instant-feedback--decision-making">1. Live Polls: Instant Feedback &amp; Decision Making<a href="https://www.plugnmeet.org/blog/designing-interactive-webinars-with-plugnmeet#1-live-polls-instant-feedback--decision-making" class="hash-link" aria-label="Direct link to 1. Live Polls: Instant Feedback &amp; Decision Making" title="Direct link to 1. Live Polls: Instant Feedback &amp; Decision Making" translate="no">​</a></h4>
<p>Forget trying to tally responses in a chaotic chat. Live Polls allow you to ask structured questions and get immediate, quantifiable feedback from your entire audience.</p>
<ul>
<li class=""><strong>How to use it:</strong> Launch quick quizzes to check comprehension, gauge opinions on a new product feature, or even make group decisions. You can see results in real-time and publish them for discussion. For more ideas, read our post on <a class="" href="https://www.plugnmeet.org/blog/engaging-audience-with-live-polls">Engaging Audience with Live Polls</a>.</li>
<li class=""><strong>Impact:</strong> Boosts engagement, provides valuable data, and keeps the audience invested in the content.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="2-breakout-rooms-small-group-collaboration-at-scale">2. Breakout Rooms: Small Group Collaboration at Scale<a href="https://www.plugnmeet.org/blog/designing-interactive-webinars-with-plugnmeet#2-breakout-rooms-small-group-collaboration-at-scale" class="hash-link" aria-label="Direct link to 2. Breakout Rooms: Small Group Collaboration at Scale" title="Direct link to 2. Breakout Rooms: Small Group Collaboration at Scale" translate="no">​</a></h4>
<p>For workshops, training sessions, or brainstorming, small group discussions are invaluable. Breakout Rooms allow you to split your large audience into smaller, private sub-meetings.</p>
<ul>
<li class=""><strong>How to use it:</strong> Assign participants randomly or manually to groups. Each room gets its own private whiteboard, shared notepad, and full audio/video capabilities. As a moderator, you can broadcast messages to all rooms or join specific groups. Learn more in our guide to <a class="" href="https://www.plugnmeet.org/blog/mastering-breakout-rooms">Mastering Breakout Rooms</a>.</li>
<li class=""><strong>Impact:</strong> Fosters deeper collaboration, encourages quieter participants to speak up, and allows for focused problem-solving.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="3-interactive-whiteboard--shared-notepad-visual--textual-collaboration">3. Interactive Whiteboard &amp; Shared Notepad: Visual &amp; Textual Collaboration<a href="https://www.plugnmeet.org/blog/designing-interactive-webinars-with-plugnmeet#3-interactive-whiteboard--shared-notepad-visual--textual-collaboration" class="hash-link" aria-label="Direct link to 3. Interactive Whiteboard &amp; Shared Notepad: Visual &amp; Textual Collaboration" title="Direct link to 3. Interactive Whiteboard &amp; Shared Notepad: Visual &amp; Textual Collaboration" translate="no">​</a></h4>
<p>Move beyond static slides. Our integrated whiteboard and shared notepad provide dynamic canvases for collective ideation and note-taking.</p>
<ul>
<li class=""><strong>How to use it:</strong> Upload presentations or documents to the whiteboard and annotate them in real-time. Enable multi-user drawing for collaborative brainstorming. Use the shared notepad for collective note-taking, drafting ideas, or creating action item lists. Dive deeper into our <a class="" href="https://www.plugnmeet.org/blog/integrated-whiteboard-experience">Integrated Whiteboard Experience</a>.</li>
<li class=""><strong>Impact:</strong> Enhances visual learning, makes abstract concepts clearer, and creates shared artifacts of the session.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="4-qa--raise-hand-structured-audience-interaction">4. Q&amp;A / Raise Hand: Structured Audience Interaction<a href="https://www.plugnmeet.org/blog/designing-interactive-webinars-with-plugnmeet#4-qa--raise-hand-structured-audience-interaction" class="hash-link" aria-label="Direct link to 4. Q&amp;A / Raise Hand: Structured Audience Interaction" title="Direct link to 4. Q&amp;A / Raise Hand: Structured Audience Interaction" translate="no">​</a></h4>
<p>Manage questions effectively without interrupting the flow of your presentation.</p>
<ul>
<li class=""><strong>How to use it:</strong> Encourage attendees to use the "Raise Hand" feature to signal they have a question. As a moderator, you can then unmute them individually. Use the public chat for general comments, but direct specific questions to a dedicated Q&amp;A segment. Our <a class="" href="https://www.plugnmeet.org/blog/moderator-guide-room-lock-settings">Moderator Guide to Room Lock Settings</a> provides more details on managing interactions.</li>
<li class=""><strong>Impact:</strong> Maintains order, ensures all questions are addressed, and gives every participant a chance to be heard.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="5-embed-web-content-dynamic-presentations">5. Embed Web Content: Dynamic Presentations<a href="https://www.plugnmeet.org/blog/designing-interactive-webinars-with-plugnmeet#5-embed-web-content-dynamic-presentations" class="hash-link" aria-label="Direct link to 5. Embed Web Content: Dynamic Presentations" title="Direct link to 5. Embed Web Content: Dynamic Presentations" translate="no">​</a></h4>
<p>Bring the web directly into your meeting without clunky screen sharing.</p>
<ul>
<li class=""><strong>How to use it:</strong> Share any website, online application (like a Google Doc, Miro board, or project management tool), or interactive content directly within the meeting window. Find out more in <a class="" href="https://www.plugnmeet.org/blog/embed-web-content-dynamic-collaboration">Bring the Web into Your Meeting</a>.</li>
<li class=""><strong>Impact:</strong> Creates a seamless, integrated presentation experience, reduces distractions, and enables real-time collaborative work on external resources.</li>
</ul>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="designing-your-interactive-webinar-a-workflow-example">Designing Your Interactive Webinar: A Workflow Example<a href="https://www.plugnmeet.org/blog/designing-interactive-webinars-with-plugnmeet#designing-your-interactive-webinar-a-workflow-example" class="hash-link" aria-label="Direct link to Designing Your Interactive Webinar: A Workflow Example" title="Direct link to Designing Your Interactive Webinar: A Workflow Example" translate="no">​</a></h3>
<p>Here’s how you might structure a 60-minute interactive webinar using Plug-N-Meet:</p>
<ul>
<li class="">
<p><strong>Pre-Webinar Setup:</strong></p>
<ul>
<li class=""><strong>Enable Features:</strong> When creating your room (via API or dashboard), ensure <code>polls_features</code>, <code>breakout_room_features</code>, <code>whiteboard_features</code>, <code>shared_note_pad_features</code>, and <code>display_external_link_features</code> are all enabled. You can find detailed API parameters in our <a class="" href="https://www.plugnmeet.org/docs/api/room/create">Create Room API Documentation</a>.</li>
<li class=""><strong>Default Lock Settings:</strong> For a webinar, you might start with microphones and webcams locked for attendees by default to maintain control. Refer to our <a class="" href="https://www.plugnmeet.org/docs/user-guide/moderator">Moderator Guide</a> for more on lock settings.</li>
<li class=""><strong>Webhooks:</strong> Set up a webhook to automate post-webinar tasks like sending recordings or summaries. Learn how in <a class="" href="https://www.plugnmeet.org/blog/how-to-build-your-first-webhook-workflow">How to Build Your First Automated Workflow with Webhooks</a>.</li>
</ul>
</li>
<li class="">
<p><strong>0-5 Minutes: Welcome &amp; Icebreaker (Interactive Whiteboard)</strong></p>
<ul>
<li class="">Start with a simple, engaging activity. Upload a world map to the whiteboard and ask participants to mark their location using the multi-user drawing tool. This gets everyone comfortable with the tools and creates a visual representation of your global audience.</li>
</ul>
</li>
<li class="">
<p><strong>5-20 Minutes: Core Presentation &amp; Quick Check (Live Polls)</strong></p>
<ul>
<li class="">Deliver your initial content. After a key segment, launch a quick poll to check for understanding or gather opinions. "On a scale of 1-5, how relevant is this topic to your work?" Publish the results and briefly discuss.</li>
</ul>
</li>
<li class="">
<p><strong>20-40 Minutes: Collaborative Activity (Breakout Rooms with Whiteboard/Notepad)</strong></p>
<ul>
<li class="">Introduce a problem or discussion topic. Divide your audience into small groups using Breakout Rooms. Instruct them to use their private whiteboards for brainstorming or shared notepads for outlining solutions. Broadcast a "5 minutes left!" message before bringing them back.</li>
</ul>
</li>
<li class="">
<p><strong>40-50 Minutes: Debrief &amp; Q&amp;A (Live Polls &amp; Raise Hand)</strong></p>
<ul>
<li class="">Once back in the main room, launch another poll: "Which solution did your group find most promising?" Publish results. Then, open the floor for questions using the "Raise Hand" feature, unmuting participants one by one.</li>
</ul>
</li>
<li class="">
<p><strong>50-60 Minutes: Dynamic Content &amp; Call to Action (Embed Web Content)</strong></p>
<ul>
<li class="">Instead of just telling people where to go, use "Share External Link" to display your website, a sign-up form, or a relevant resource directly in the meeting. Conclude with a final poll for overall feedback.</li>
</ul>
</li>
</ul>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="conclusion-your-audience-deserves-more">Conclusion: Your Audience Deserves More<a href="https://www.plugnmeet.org/blog/designing-interactive-webinars-with-plugnmeet#conclusion-your-audience-deserves-more" class="hash-link" aria-label="Direct link to Conclusion: Your Audience Deserves More" title="Direct link to Conclusion: Your Audience Deserves More" translate="no">​</a></h3>
<p>Moving beyond the passive presentation transforms your webinars from forgettable broadcasts into memorable, high-impact events. With Plug-N-Meet, you have a comprehensive, open-source toolkit to design truly interactive experiences that engage your audience, foster collaboration, and deliver real value.</p>
<p>Stop talking <em>at</em> your audience. Start working <em>with</em> them.</p>
<hr>
<p><strong>Ready to design your next interactive webinar?</strong></p>
<ul>
<li class=""><strong><a href="https://demo.plugnmeet.com/landing.html" target="_blank" rel="noopener noreferrer" class="">Try these features in our Live Demo</a></strong></li>
<li class=""><strong><a href="https://github.com/mynaparrot/plugNmeet-server" target="_blank" rel="noopener noreferrer" class="">Explore our Open-Source Project on GitHub</a></strong></li>
<li class=""><strong><a class="" href="https://www.plugnmeet.org/docs/user-guide/moderator">Read our Moderator Guide</a> for more tips on managing interactive sessions.</strong></li>
</ul>]]></content:encoded>
            <category>webinar</category>
            <category>interactive-webinar</category>
            <category>engagement</category>
            <category>polling</category>
            <category>breakout-rooms</category>
            <category>whiteboard</category>
            <category>q&amp;a</category>
            <category>moderator</category>
            <category>features</category>
            <category>open-source</category>
        </item>
        <item>
            <title><![CDATA[5 Ways an AI Assistant Can Transform Your Virtual Classroom]]></title>
            <link>https://www.plugnmeet.org/blog/ai-transforms-virtual-classroom</link>
            <guid>https://www.plugnmeet.org/blog/ai-transforms-virtual-classroom</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The shift to online learning has opened up incredible opportunities, but it also comes with unique challenges. How do you keep students engaged when they're just another face in a grid? How do you cater to different learning styles and language needs through a screen?]]></description>
            <content:encoded><![CDATA[<p>The shift to online learning has opened up incredible opportunities, but it also comes with unique challenges. How do you keep students engaged when they're just another face in a grid? How do you cater to different learning styles and language needs through a screen?</p>
<p>The answer isn't to work harder; it's to teach smarter. Imagine having a silent partner in every session, one that makes your virtual classroom more inclusive, accessible, and effective. This is the power of an <strong>AI Teaching Assistant</strong>. Here are 5 ways it can revolutionize your online teaching.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="1-make-every-student-feel-included-with-live-translation">1. Make Every Student Feel Included with Live Translation<a href="https://www.plugnmeet.org/blog/ai-transforms-virtual-classroom#1-make-every-student-feel-included-with-live-translation" class="hash-link" aria-label="Direct link to 1. Make Every Student Feel Included with Live Translation" title="Direct link to 1. Make Every Student Feel Included with Live Translation" translate="no">​</a></h3>
<p><strong>The Challenge:</strong> A student’s primary language isn't the one being spoken in class. They struggle to keep up, hesitate to participate, and quickly become disengaged.</p>
<p><strong>The AI Solution:</strong> With a single click, that student can enable live, real-time translation. As you speak, they see captions in their native language, allowing them to understand the material and formulate questions. This simple tool breaks down language barriers and fosters a truly global, inclusive classroom where every student has a voice.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="2-boost-comprehension-for-every-learning-style">2. Boost Comprehension for Every Learning Style<a href="https://www.plugnmeet.org/blog/ai-transforms-virtual-classroom#2-boost-comprehension-for-every-learning-style" class="hash-link" aria-label="Direct link to 2. Boost Comprehension for Every Learning Style" title="Direct link to 2. Boost Comprehension for Every Learning Style" translate="no">​</a></h3>
<p><strong>The Challenge:</strong> Students have diverse learning needs. Some are visual learners, some may be in a noisy environment, and others may have hearing impairments.</p>
<p><strong>The AI Solution:</strong> Live transcription provides real-time captions of everything you say. This reinforces your lesson visually, helps students catch anything they might have missed, and provides a critical accessibility tool. It ensures that all students can follow along, improving focus and knowledge retention for everyone.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="3-get-instant-answers-with-a-built-in-research-assistant">3. Get Instant Answers with a Built-in Research Assistant<a href="https://www.plugnmeet.org/blog/ai-transforms-virtual-classroom#3-get-instant-answers-with-a-built-in-research-assistant" class="hash-link" aria-label="Direct link to 3. Get Instant Answers with a Built-in Research Assistant" title="Direct link to 3. Get Instant Answers with a Built-in Research Assistant" translate="no">​</a></h3>
<p><strong>The Challenge:</strong> You mention a concept or historical figure that a student isn't familiar with. To understand it, the student has to open a new browser tab, search, and read, causing them to miss the next part of the lesson.</p>
<p><strong>The AI Solution:</strong> The AI Assistant acts as a built-in research tool. A student can privately ask the AI general knowledge questions like, "Who was Marie Curie?" or "What is the Pythagorean theorem?" and get a quick, concise answer without ever leaving the meeting window. This helps them fill knowledge gaps instantly and stay focused on the live lesson.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="4-create-perfect-searchable-study-guidesautomatically">4. Create Perfect, Searchable Study Guides—Automatically<a href="https://www.plugnmeet.org/blog/ai-transforms-virtual-classroom#4-create-perfect-searchable-study-guidesautomatically" class="hash-link" aria-label="Direct link to 4. Create Perfect, Searchable Study Guides—Automatically" title="Direct link to 4. Create Perfect, Searchable Study Guides—Automatically" translate="no">​</a></h3>
<p><strong>The Challenge:</strong> After a long lecture, you need to share your notes, and students need a reliable way to review the material.</p>
<p><strong>The AI Solution:</strong> Forget manual note-taking. Once the session is over, the AI Assistant automatically generates a concise summary of the entire lesson, complete with key concepts and action items. This becomes a perfect, searchable study guide that saves both you and your students hours of work.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="5-focus-on-teaching-not-juggling-tasks">5. Focus on Teaching, Not Juggling Tasks<a href="https://www.plugnmeet.org/blog/ai-transforms-virtual-classroom#5-focus-on-teaching-not-juggling-tasks" class="hash-link" aria-label="Direct link to 5. Focus on Teaching, Not Juggling Tasks" title="Direct link to 5. Focus on Teaching, Not Juggling Tasks" translate="no">​</a></h3>
<p><strong>The Challenge:</strong> As an educator, you're juggling multiple roles at once: presenting content, managing participants, monitoring the chat, and trying to take notes.</p>
<p><strong>The AI Solution:</strong> By offloading the tasks of transcription and post-meeting summarization to the AI, you are free to do what you do best: teach. You can focus entirely on student-interaction, gauge understanding, and deliver a more dynamic and engaging lesson.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_y2Co" id="your-new-superpower">Your New Superpower<a href="https://www.plugnmeet.org/blog/ai-transforms-virtual-classroom#your-new-superpower" class="hash-link" aria-label="Direct link to Your New Superpower" title="Direct link to Your New Superpower" translate="no">​</a></h2>
<p>AI isn't about replacing great teachers; it's about giving them superpowers. It automates the tedious tasks, breaks down barriers to participation, and allows you to create a more powerful and equitable learning experience for every student.</p>
<p>At plugNmeet, we believe this technology should be simple and accessible for everyone.</p>
<p><strong>For educators</strong>, our platform integrates seamlessly into the tools you already use. Get started in minutes with our guides for <a class="" href="https://www.plugnmeet.org/docs/user-guide/moodle-integration">Moodle</a>, <a class="" href="https://www.plugnmeet.org/docs/user-guide/wordPress-integration">WordPress</a>, or <a class="" href="https://www.plugnmeet.org/docs/user-guide/joomla-integration">Joomla</a>.</p>
<p><strong>For developers</strong>, our flexible, open-source foundation is so powerful you can <a class="" href="https://www.plugnmeet.org/blog/build-video-conferencing-app-in-under-an-hour">build a complete video conferencing app in under an hour</a>.</p>
<p><strong>Ready to see how an AI assistant can transform your classroom?</strong></p>
<ul>
<li class=""><strong><a href="https://demo.plugnmeet.com/landing.html" target="_blank" rel="noopener noreferrer" class="">Try our Live Demo</a></strong> to experience these features firsthand.</li>
<li class=""><strong>Want to learn how it works?</strong> Read our technical guide on <a class="" href="https://www.plugnmeet.org/blog/how-to-add-ai-meeting-assistant-features">how to add an AI meeting assistant</a>.</li>
</ul>]]></content:encoded>
            <category>ai</category>
            <category>online-classroom</category>
            <category>virtual-classroom</category>
            <category>student-engagement</category>
            <category>ai-for-education</category>
            <category>teaching-assistant</category>
            <category>inclusive-classroom</category>
            <category>online-teaching</category>
        </item>
        <item>
            <title><![CDATA[Deep Integration, Powerful Features: The All-New plugNmeet Plugin for Moodle is Here!]]></title>
            <link>https://www.plugnmeet.org/blog/new-plugnmeet-moodle-plugin-deep-integration</link>
            <guid>https://www.plugnmeet.org/blog/new-plugnmeet-moodle-plugin-deep-integration</guid>
            <pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Discover the completely rebuilt plugNmeet plugin for Moodle 4.5+. Featuring deep integration with Moodle's core systems, cumulative attendance, AI artifacts, and a seamless, white-label experience.]]></description>
            <content:encoded><![CDATA[<p>Sending students to an external video conferencing link breaks the learning flow, creates a disjointed experience, and pulls them away from the Moodle environment you've carefully built. What if your virtual classroom wasn't a detour, but a destination—a native part of your course?</p>
<p>Today, we're thrilled to announce the launch of the completely rebuilt plugNmeet plugin for Moodle. This isn't just an update; it's a ground-up redesign focused on one thing: deep, seamless integration that makes your virtual classroom feel like a core Moodle activity.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="a-major-leap-forward">A Major Leap Forward<a href="https://www.plugnmeet.org/blog/new-plugnmeet-moodle-plugin-deep-integration#a-major-leap-forward" class="hash-link" aria-label="Direct link to A Major Leap Forward" title="Direct link to A Major Leap Forward" translate="no">​</a></h3>
<p>While our previous plugin offered basic branding and recording features, this new version is in a different league. We've rebuilt it from scratch with a laser focus on <strong>Moodle 4.5+ standards</strong>, creating a robust, secure, and deeply integrated solution. The user interface is now cleaner and more intuitive, with features logically placed within the Moodle activity context, just as you'd expect.</p>
<p>So, what makes this new version so special? Let's dive into the features that will change the way you teach online.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="more-than-a-pluginits-part-of-moodle">More Than a Plugin—It's Part of Moodle<a href="https://www.plugnmeet.org/blog/new-plugnmeet-moodle-plugin-deep-integration#more-than-a-pluginits-part-of-moodle" class="hash-link" aria-label="Direct link to More Than a Plugin—It's Part of Moodle" title="Direct link to More Than a Plugin—It's Part of Moodle" translate="no">​</a></h3>
<p>We moved beyond simple embedding to deeply integrate plugNmeet into Moodle’s core systems.</p>
<ul>
<li class=""><strong>Advanced Completion Tracking:</strong> Go beyond simple "viewed" metrics. Our plugin introduces <strong>cumulative completion criteria</strong>. Track user engagement across <em>all</em> sessions within a single Moodle activity. Mark the activity complete based on:<!-- -->
<ul>
<li class="">Total minutes attended</li>
<li class="">Total webcam or microphone duration</li>
<li class="">Number of chat messages sent</li>
<li class="">Raised hand, voted in a poll, and more...</li>
</ul>
</li>
<li class=""><strong>Automatic Calendar Integration:</strong> When you schedule a session using the "Available from" date, the plugin automatically creates an event in the Moodle Calendar. Your students will see upcoming classes on their dashboard and course calendars, boosting visibility and attendance.</li>
<li class=""><strong>Gradebook Integration:</strong> Assign a grade for your plugNmeet activity. The plugin can automatically calculate a grade based on the completion progress of the criteria you set.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="transparency-and-data-driven-insights">Transparency and Data-Driven Insights<a href="https://www.plugnmeet.org/blog/new-plugnmeet-moodle-plugin-deep-integration#transparency-and-data-driven-insights" class="hash-link" aria-label="Direct link to Transparency and Data-Driven Insights" title="Direct link to Transparency and Data-Driven Insights" translate="no">​</a></h3>
<p>Knowledge is power—not just for teachers, but for students too. This plugin gives you the data you need to understand engagement like never before. For a deeper dive into how to use this data, see our guide on <a class="" href="https://www.plugnmeet.org/blog/classroom-analytics-for-educators">Classroom Analytics for Educators</a>.</p>
<ul>
<li class=""><strong>New Student Self-Reporting Dashboard:</strong> Students no longer have to wonder about their progress. They now have access to a beautiful, personalized dashboard that shows their cumulative participation data in a modern, card-based layout.</li>
<li class=""><strong>Visual Progress Tracking:</strong> If completion criteria are set, students see color-coded status cards (Green for met, Yellow for pending) with clear badges indicating exactly what they need to do to complete the activity.</li>
<li class=""><strong>Cumulative Attendance Reporting:</strong> Teachers get a consolidated attendance list for the entire activity. See at a glance who is attending and for how long across a series of classes, with the ability to export the data to Excel.</li>
<li class=""><strong>Live Session Dashboard:</strong> Need to know what's happening in a live class right now? Teachers can view a real-time dashboard showing the number of participants, active webcams, microphones, and more.</li>
<li class=""><strong>Session Artifacts in Moodle:</strong> After a session, all generated files—including AI-powered meeting summaries, full transcriptions (VTT files), and detailed analytics reports—are available directly on the Moodle activity page. To learn more about the AI capabilities, read our guide on <a class="" href="https://www.plugnmeet.org/blog/how-to-add-ai-meeting-assistant-features">how to add AI features to your video conferences</a>.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="built-for-administrators-and-developers">Built for Administrators and Developers<a href="https://www.plugnmeet.org/blog/new-plugnmeet-moodle-plugin-deep-integration#built-for-administrators-and-developers" class="hash-link" aria-label="Direct link to Built for Administrators and Developers" title="Direct link to Built for Administrators and Developers" translate="no">​</a></h3>
<p>We built this plugin to be as powerful for administrators as it is for teachers.</p>
<ul>
<li class=""><strong>100% White-Label Experience:</strong> Using the <code>Remote (Embedded)</code> client mode, the plugNmeet classroom loads directly within your Moodle site's layout. There are no redirects and no third-party branding. To your users, it’s simply <em>your</em> virtual classroom, powered by Moodle.</li>
<li class=""><strong>Granular, Role-Based Access:</strong> We've implemented a comprehensive set of Moodle capabilities to give you fine-grained control over who can manage rooms, view recordings, download artifacts, and see attendance reports.</li>
<li class=""><strong>Extensible Events API:</strong> The plugin receives real-time data from your plugNmeet server via webhooks and immediately re-broadcasts them as standard Moodle events. This allows developers to easily hook into events like <code>participant_joined</code> or <code>recording_proceeded</code> to build custom integrations and extend functionality.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="a-seamless-experience-for-everyone">A Seamless Experience for Everyone<a href="https://www.plugnmeet.org/blog/new-plugnmeet-moodle-plugin-deep-integration#a-seamless-experience-for-everyone" class="hash-link" aria-label="Direct link to A Seamless Experience for Everyone" title="Direct link to A Seamless Experience for Everyone" translate="no">​</a></h3>
<ul>
<li class=""><strong>Secure Guest Access:</strong> A new, secure workflow allows you to generate time-limited, single-use guest links for guest speakers or external participants, without compromising your site's security. For maximum security in sensitive meetings, you can also enable <a class="" href="https://www.plugnmeet.org/blog/e2ee-key-models-guide">end-to-end encryption</a>.</li>
<li class=""><strong>Redesigned Recordings Page:</strong> Managing cloud recordings is now a breeze. View and control the visibility of your recordings from a clean and intuitive interface within the activity page.</li>
</ul>
<p>To get started, check out our <a class="" href="https://www.plugnmeet.org/blog/moodle-video-conferencing-guide">Ultimate Guide to Moodle Video Conferencing</a> or our tutorial on <a class="" href="https://www.plugnmeet.org/blog/no-code-video-conferencing-moodle">How to Add No-Code Video Conferencing to Your Moodle Courses</a>.</p>
<hr>
<p><strong>Ready to enhance your Moodle courses?</strong></p>
<ul>
<li class=""><strong><a href="https://moodle.org/plugins/mod_plugnmeet" target="_blank" rel="noopener noreferrer" class="">Download the official Moodle Plugin</a></strong></li>
<li class=""><strong><a href="https://demo.plugnmeet.com/landing.html" target="_blank" rel="noopener noreferrer" class="">Try the Live Demo</a> to explore the teaching tools.</strong></li>
<li class=""><strong>Follow our <a class="" href="https://www.plugnmeet.org/docs/installation">Installation Guide</a> to get your server running.</strong></li>
</ul>]]></content:encoded>
            <category>moodle</category>
            <category>plugnmeet</category>
            <category>virtual classroom</category>
            <category>e-learning</category>
            <category>video conferencing</category>
            <category>moodle-virtual-classroom</category>
            <category>moodle-plugin</category>
            <category>moodle-integration</category>
            <category>online-learning</category>
            <category>education-technology</category>
        </item>
        <item>
            <title><![CDATA[Unlock True Control: Why Self-Hosted, Open Source Webinar Software is Your Best Bet]]></title>
            <link>https://www.plugnmeet.org/blog/self-hosted-open-source-webinar-software</link>
            <guid>https://www.plugnmeet.org/blog/self-hosted-open-source-webinar-software</guid>
            <pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[In an era dominated by digital communication, webinars and online meetings have become indispensable. Yet, many organizations find themselves trapped in the rigid, often expensive, ecosystems of proprietary software like Zoom or GoToWebinar. These tools, while convenient, often come with hidden costs, limited customization, and significant concerns about data privacy and ownership.]]></description>
            <content:encoded><![CDATA[<p>In an era dominated by digital communication, webinars and online meetings have become indispensable. Yet, many organizations find themselves trapped in the rigid, often expensive, ecosystems of proprietary software like Zoom or GoToWebinar. These tools, while convenient, often come with hidden costs, limited customization, and significant concerns about data privacy and ownership.</p>
<p>What if you could host professional webinars and meetings with unparalleled control, complete data privacy, and the flexibility to tailor every aspect to your brand and workflow? This is the promise of <strong>open source webinar software</strong> and <strong>self-hosted meeting</strong> platforms. At plugNmeet, we believe in empowering you to reclaim ownership of your digital interactions.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_y2Co" id="the-power-of-open-source-webinar-software-more-than-just-a-tool">The Power of Open Source Webinar Software: More Than Just a Tool<a href="https://www.plugnmeet.org/blog/self-hosted-open-source-webinar-software#the-power-of-open-source-webinar-software-more-than-just-a-tool" class="hash-link" aria-label="Direct link to The Power of Open Source Webinar Software: More Than Just a Tool" title="Direct link to The Power of Open Source Webinar Software: More Than Just a Tool" translate="no">​</a></h2>
<p>When you search for "open source webinar software," you're looking for freedom. You want to own your brand, manage your audience, and create a unique, professional presentation without being locked into a vendor's ecosystem.</p>
<p>Proprietary webinar tools often treat a webinar like a glorified meeting, lacking the specific features needed for a structured, engaging event. An open-source platform, however, allows for:</p>
<ol>
<li class=""><strong>Clear Roles &amp; Moderation:</strong> Distinguish between presenters and attendees, with granular control over permissions. A dedicated admin can manage the audience, while the presenter focuses on content delivery, as detailed in our post on <a class="" href="https://www.plugnmeet.org/blog/open-source-webinar-software-platform">open source webinar software platforms</a>.</li>
<li class=""><strong>Structured Engagement:</strong> Move beyond chaotic chat. Implement live polls for Q&amp;A, quizzes, and use features like "Raise Hand" for organized interaction.</li>
<li class=""><strong>Complete Branding:</strong> Your webinar is your show. Open-source solutions, especially those built with an API-first approach like plugNmeet, allow for deep customization – from logos and colors to entirely rebuilding the layout to match your brand identity perfectly.</li>
<li class=""><strong>Content Ownership:</strong> Recordings are valuable assets. With open-source, you own your content, saving it to your servers and automating post-webinar workflows (e.g., uploading to YouTube, sending to attendees).</li>
</ol>
<p>Open source isn't just about cost; it's about community, transparency, and the ability to adapt the software to your exact needs, rather than adapting your needs to the software.</p>
<h2 class="anchor anchorTargetStickyNavbar_y2Co" id="why-self-hosted-meeting-solutions-are-non-negotiable-for-control--privacy">Why Self-Hosted Meeting Solutions are Non-Negotiable for Control &amp; Privacy<a href="https://www.plugnmeet.org/blog/self-hosted-open-source-webinar-software#why-self-hosted-meeting-solutions-are-non-negotiable-for-control--privacy" class="hash-link" aria-label="Direct link to Why Self-Hosted Meeting Solutions are Non-Negotiable for Control &amp; Privacy" title="Direct link to Why Self-Hosted Meeting Solutions are Non-Negotiable for Control &amp; Privacy" translate="no">​</a></h2>
<p>The "self-hosted meeting" aspect takes control to the next level. When you host your own video conferencing infrastructure, you gain benefits that proprietary cloud services simply cannot offer:</p>
<ul>
<li class=""><strong>Unmatched Data Ownership &amp; Privacy:</strong> Your conversations, recordings, and user data reside entirely within your infrastructure. This is critical for compliance with regulations like GDPR, HIPAA, and other industry-specific privacy standards. You are in command of your data, not a third-party vendor.</li>
<li class=""><strong>Cost-Effectiveness at Scale:</strong> Proprietary solutions often charge per-user or per-minute, leading to escalating costs. Self-hosting offers predictable infrastructure costs, making it a significantly more cost-effective solution for long-term, large-scale deployments. For strategies on <a class="" href="https://www.plugnmeet.org/blog/hosting-large-scale-events-the-smart-way">hosting large-scale events</a>, we recommend a broadcast studio model to maximize scalability and minimize costs.</li>
<li class=""><strong>Tailored Performance &amp; Reliability:</strong> By hosting on your own servers, you can optimize network and resources specifically for your users. This ensures a smoother, more reliable experience, especially when combined with smart streaming techniques like Simulcast and Dynacast, which adapt video quality to individual network conditions and pause off-screen video streams to save bandwidth, as explained in our article on <a class="" href="https://www.plugnmeet.org/blog/smart-video-streaming">smart video streaming</a>.</li>
<li class=""><strong>Deep Customization &amp; Integration:</strong> Beyond just branding, self-hosting allows for profound customization. You can integrate video conferencing directly into your existing applications and workflows, using powerful APIs to define feature sets for each room, embed web content, and even connect with traditional telephony via <a class="" href="https://www.plugnmeet.org/blog/sip-dial-in-for-video-conferencing">SIP Dial-In</a> for participants without internet access.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_y2Co" id="plugnmeet-your-foundation-for-open-source-self-hosted-excellence">plugNmeet: Your Foundation for Open Source, Self-Hosted Excellence<a href="https://www.plugnmeet.org/blog/self-hosted-open-source-webinar-software#plugnmeet-your-foundation-for-open-source-self-hosted-excellence" class="hash-link" aria-label="Direct link to plugNmeet: Your Foundation for Open Source, Self-Hosted Excellence" title="Direct link to plugNmeet: Your Foundation for Open Source, Self-Hosted Excellence" translate="no">​</a></h2>
<p>plugNmeet is built from the ground up to deliver on these promises. As an open-source, WebRTC-based platform, it provides the flexible, powerful, and secure foundation you need to build a professional, branded, and automated webinar and meeting experience that is truly your own.</p>
<p>Key features that highlight our commitment to open source and self-hosting include:</p>
<ul>
<li class=""><strong>Adaptive Streaming (Simulcast &amp; Dynacast):</strong> Ensures smooth, uninterrupted calls even on challenging networks by intelligently managing video streams.</li>
<li class=""><strong>RTMP &amp; WHIP Ingress:</strong> Stream like a pro by bringing professional tools like OBS Studio directly into your meeting room, appearing as a participant, as detailed in our guide on <a class="" href="https://www.plugnmeet.org/blog/obs-rtmp-whip-ingress">OBS RTMP WHIP Ingress</a>.</li>
<li class=""><strong>SIP Dial-In:</strong> Bridge the gap for participants without internet access, allowing them to join audio via any standard telephone.</li>
<li class=""><strong>AI Meeting Agent:</strong> Enhance productivity with live spoken translations, automated summaries, and full transcriptions.</li>
<li class=""><strong>End-to-End Encryption (E2EE):</strong> For the <a class="" href="https://www.plugnmeet.org/docs/security-overview">highest level of privacy</a>, ensuring your conversations remain completely confidential.</li>
<li class=""><strong>Comprehensive APIs &amp; SDKs:</strong> For developers to build custom solutions and integrate deeply with existing systems.</li>
<li class=""><strong>CMS Plugins:</strong> Ready-to-use plugins for WordPress, Joomla, and Moodle for easy integration without coding. For example, you can <a class="" href="https://www.plugnmeet.org/blog/no-code-video-conferencing-service-with-wordpress">start your Webinar meeting with WordPress</a> in minutes.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_y2Co" id="take-control-of-your-communication-future">Take Control of Your Communication Future<a href="https://www.plugnmeet.org/blog/self-hosted-open-source-webinar-software#take-control-of-your-communication-future" class="hash-link" aria-label="Direct link to Take Control of Your Communication Future" title="Direct link to Take Control of Your Communication Future" translate="no">​</a></h2>
<p>In a world where digital interactions are paramount, settling for generic, proprietary solutions means sacrificing control, privacy, and the ability to truly brand and tailor your user experience.</p>
<p>Choose an <strong>open source webinar software</strong> and <strong>self-hosted meeting</strong> platform like plugNmeet to empower your organization with a secure, scalable, and fully customized video conferencing solution. Reclaim ownership of your communication and deliver an unparalleled experience to your users.</p>
<hr>
<p><strong>Ready to build your perfect webinar and meeting platform?</strong></p>
<ul>
<li class=""><strong>Explore our <a href="https://demo.plugnmeet.com/landing.html" target="_blank" rel="noopener noreferrer" class="">Live Demo</a> to see the features in action.</strong></li>
<li class=""><strong>Visit our <a href="https://github.com/mynaparrot/plugNmeet-server" target="_blank" rel="noopener noreferrer" class="">GitHub Repository</a> to get started with self-hosting.</strong></li>
<li class=""><strong>Dive into our <a class="" href="https://www.plugnmeet.org/docs/api/intro">API Documentation</a> to begin building your custom solution.</strong></li>
</ul>]]></content:encoded>
            <category>webinar</category>
            <category>open-source</category>
            <category>self-hosted</category>
            <category>video-conferencing</category>
            <category>platform</category>
            <category>privacy</category>
            <category>customization</category>
            <category>control</category>
            <category>scalability</category>
            <category>events</category>
        </item>
        <item>
            <title><![CDATA[Why Self-Hosted, Customizable Video Conferencing with plugNmeet Outperforms Proprietary Solutions]]></title>
            <link>https://www.plugnmeet.org/blog/self-hosted-customizable-video-conferencing</link>
            <guid>https://www.plugnmeet.org/blog/self-hosted-customizable-video-conferencing</guid>
            <pubDate>Mon, 30 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[In today's interconnected world, video conferencing has become indispensable. But as businesses, educators, and healthcare professionals rely more heavily on these tools, a critical question arises: who truly controls your communication? Proprietary solutions often come with hidden costs, limited flexibility, and significant privacy concerns.]]></description>
            <content:encoded><![CDATA[<p>In today's interconnected world, video conferencing has become indispensable. But as businesses, educators, and healthcare professionals rely more heavily on these tools, a critical question arises: <strong>who truly controls your communication?</strong> Proprietary solutions often come with hidden costs, limited flexibility, and significant privacy concerns.</p>
<p>Enter plugNmeet: an open-source, self-hosted WebRTC platform designed to give you ultimate control, unparalleled customization, and robust security, fundamentally outperforming generic, off-the-shelf alternatives.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_y2Co" id="the-power-of-self-hosting-unmatched-control--privacy">The Power of Self-Hosting: Unmatched Control &amp; Privacy<a href="https://www.plugnmeet.org/blog/self-hosted-customizable-video-conferencing#the-power-of-self-hosting-unmatched-control--privacy" class="hash-link" aria-label="Direct link to The Power of Self-Hosting: Unmatched Control &amp; Privacy" title="Direct link to The Power of Self-Hosting: Unmatched Control &amp; Privacy" translate="no">​</a></h2>
<p>When you choose a proprietary video conferencing service, your data resides on their servers, subject to their policies, security practices, and potential data mining. Self-hosting with plugNmeet flips this script, putting you firmly in command.</p>
<ul>
<li class=""><strong>Data Ownership &amp; Privacy:</strong> Your conversations, recordings, and user data remain entirely within your infrastructure. This is crucial for compliance with regulations like HIPAA, GDPR, and other industry-specific privacy standards. With plugNmeet, you own your data, ensuring maximum privacy and peace of mind. For a deeper dive into our security architecture, refer to our <a class="" href="https://www.plugnmeet.org/docs/security-overview">Security Overview</a>.</li>
<li class=""><strong>Cost-Effectiveness at Scale:</strong> Proprietary solutions often charge per-user or per-minute, leading to escalating costs as your needs grow. Self-hosting offers predictable infrastructure costs, making it a significantly more cost-effective solution for long-term, large-scale deployments.</li>
<li class=""><strong>Reliability &amp; Performance:</strong> By hosting on your own servers, you can optimize your network and resources specifically for your users, ensuring a smoother, more reliable experience tailored to your audience's geographical location and bandwidth.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_y2Co" id="beyond-branding-true-customization-for-your-unique-needs">Beyond Branding: True Customization for Your Unique Needs<a href="https://www.plugnmeet.org/blog/self-hosted-customizable-video-conferencing#beyond-branding-true-customization-for-your-unique-needs" class="hash-link" aria-label="Direct link to Beyond Branding: True Customization for Your Unique Needs" title="Direct link to Beyond Branding: True Customization for Your Unique Needs" translate="no">​</a></h2>
<p>Many "white-label" solutions merely allow you to swap a logo. plugNmeet offers a level of customization that transforms the platform into an integral part of your ecosystem, not just an embedded tool.</p>
<ul>
<li class=""><strong>Pixel-Perfect Branding:</strong> From custom URLs and logos to colors and layouts, plugNmeet allows you to tailor every visual aspect to match your brand identity seamlessly. For more on this, see our post on <a class="" href="https://www.plugnmeet.org/blog/true-white-label-video-conferencing">True White-Label Video Conferencing</a>. Our <code>getClientFiles</code> API even allows you to inject the client directly into your application for a truly native feel, as detailed in our <a class="" href="https://www.plugnmeet.org/docs/developer-guide/design-customisation">Design Customization Guide</a> and <a class="" href="https://www.plugnmeet.org/docs/api/get-client-files">getClientFiles API Documentation</a>.</li>
<li class=""><strong>Feature Control via API:</strong> Our powerful server-side API lets you define the exact feature set for each room. Need a minimalist one-to-one chat? Disable the whiteboard and polls. Building a virtual classroom? Enable breakout rooms, shared notepads, and advanced moderation tools. This granular control ensures your users only see what's relevant, creating a streamlined and focused experience.</li>
<li class=""><strong>Tailored Workflows:</strong> Whether you're building a telehealth platform, an online learning environment, or a secure corporate communication hub, plugNmeet's flexibility allows you to integrate video conferencing directly into your existing workflows and applications.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_y2Co" id="feature-spotlight-what-makes-plugnmeet-stand-out">Feature Spotlight: What Makes plugNmeet Stand Out<a href="https://www.plugnmeet.org/blog/self-hosted-customizable-video-conferencing#feature-spotlight-what-makes-plugnmeet-stand-out" class="hash-link" aria-label="Direct link to Feature Spotlight: What Makes plugNmeet Stand Out" title="Direct link to Feature Spotlight: What Makes plugNmeet Stand Out" translate="no">​</a></h2>
<p>While control and customization are paramount, plugNmeet also boasts a rich set of features that rival, and often surpass, proprietary offerings.</p>
<ul>
<li class=""><strong>AI Meeting Agent:</strong> Transform your meetings into actionable insights with live spoken translations, automated summaries, and full transcriptions. This intelligent agent enhances productivity and accessibility. Learn more about <a class="" href="https://www.plugnmeet.org/blog/how-to-add-ai-meeting-assistant-features">How to Add AI Features</a>.</li>
<li class=""><strong>End-to-End Encryption (E2EE):</strong> Beyond standard WebRTC security, plugNmeet adds an additional layer of true E2EE, ensuring that even the server cannot access the content of your private conversations. This is privacy by design. Explore our <a class="" href="https://www.plugnmeet.org/blog/e2ee-key-models-guide">E2EE Key Models Guide</a> and <a class="" href="https://www.plugnmeet.org/blog/how-to-enable-end-to-end-encryption">How to Enable End-to-End Encryption</a>.</li>
<li class=""><strong>Advanced Collaboration Tools:</strong> Boost productivity with interactive whiteboards, collaborative notepads, screen sharing, and breakout rooms for focused group discussions.</li>
<li class=""><strong>Scalability &amp; Performance:</strong> Built with modern technologies like Go, LiveKit, and NATS, plugNmeet is engineered for horizontal scaling, supporting hundreds of participants with optimal performance, even on challenging networks thanks to adaptive streaming. Discover how our <a class="" href="https://www.plugnmeet.org/blog/scaling-architecture-saves-money">Scaling Architecture Saves Money</a> and dive into our <a class="" href="https://www.plugnmeet.org/blog/backend-architecture-deep-dive">Backend Architecture Deep Dive</a>.</li>
<li class=""><strong>Recording &amp; Broadcasting:</strong> Capture sessions in HD as portable MP4 files to your own server, or stream live to platforms like YouTube and Facebook using built-in RTMP/WHIP support. You own your content, always. Read our <a class="" href="https://www.plugnmeet.org/blog/guide-to-managing-meeting-recordings">Guide to Managing Meeting Recordings</a> and learn about <a class="" href="https://www.plugnmeet.org/blog/smart-scaling-ha-recorder">Smart Scaling HA Recorder</a>.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_y2Co" id="seamless-integration--migration">Seamless Integration &amp; Migration<a href="https://www.plugnmeet.org/blog/self-hosted-customizable-video-conferencing#seamless-integration--migration" class="hash-link" aria-label="Direct link to Seamless Integration &amp; Migration" title="Direct link to Seamless Integration &amp; Migration" translate="no">​</a></h2>
<p>Worried about switching from an existing platform? plugNmeet makes it easy.</p>
<ul>
<li class=""><strong>Easy Migration:</strong> For users looking to move away from platforms like BigBlueButton, plugNmeet offers a modern, performant, and highly customizable alternative. Our architecture simplifies the transition, allowing you to leverage your existing knowledge while gaining superior control and features. See our guide on <a class="" href="https://www.plugnmeet.org/docs/tutorials/migration-from-bbb">Migration from BigBlueButton</a>.</li>
<li class=""><strong>CMS Plugins:</strong> Integrate plugNmeet effortlessly into popular content management systems like WordPress, Joomla, and Moodle with our official plugins, requiring no coding. Find out more in our guides for <a class="" href="https://www.plugnmeet.org/blog/wordpress-video-conferencing-guide">WordPress Video Conferencing</a>, <a class="" href="https://www.plugnmeet.org/blog/joomla-video-conferencing-guide">Joomla Video Conferencing</a>, and <a class="" href="https://www.plugnmeet.org/blog/moodle-video-conferencing-guide">Moodle Video Conferencing</a>.</li>
<li class=""><strong>Developer-Friendly SDKs:</strong> For custom applications, our comprehensive <a class="" href="https://www.plugnmeet.org/docs/api/intro">API Documentation</a> and SDKs (PHP, JavaScript, Python) provide the tools developers need for deep integration.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_y2Co" id="conclusion-choose-control-choose-customization-choose-plugnmeet">Conclusion: Choose Control, Choose Customization, Choose plugNmeet<a href="https://www.plugnmeet.org/blog/self-hosted-customizable-video-conferencing#conclusion-choose-control-choose-customization-choose-plugnmeet" class="hash-link" aria-label="Direct link to Conclusion: Choose Control, Choose Customization, Choose plugNmeet" title="Direct link to Conclusion: Choose Control, Choose Customization, Choose plugNmeet" translate="no">​</a></h2>
<p>In a world increasingly reliant on digital communication, settling for generic, proprietary video conferencing solutions means sacrificing control, privacy, and the ability to truly brand and tailor your user experience.</p>
<p>plugNmeet offers a powerful, open-source alternative that empowers you to build a secure, scalable, and fully customized video conferencing platform that is truly your own. Reclaim ownership of your communication and deliver an unparalleled experience to your users.</p>
<p><strong>Ready to take control of your video conferencing?</strong></p>
<ul>
<li class=""><strong>Explore our <a href="https://demo.plugnmeet.com/landing.html" target="_blank" rel="noopener noreferrer" class="">Live Demo</a> to see the features in action.</strong></li>
<li class=""><strong>Visit our <a href="https://github.com/mynaparrot/plugNmeet-server" target="_blank" rel="noopener noreferrer" class="">GitHub Repository</a> to get started with self-hosting.</strong></li>
<li class=""><strong>Dive into our <a class="" href="https://www.plugnmeet.org/docs/api/intro">API Documentation</a> to begin building your custom solution.</strong></li>
</ul>]]></content:encoded>
            <category>self-hosted</category>
            <category>open-source</category>
            <category>customization</category>
            <category>white-label</category>
            <category>security</category>
            <category>webrtc</category>
            <category>zoom-alternative</category>
            <category>video-conferencing</category>
            <category>platform</category>
        </item>
        <item>
            <title><![CDATA[How to Reduce Video Conferencing Costs by up to 80% with Open-Source Software]]></title>
            <link>https://www.plugnmeet.org/blog/how-to-reduce-video-conferencing-costs-with-open-source</link>
            <guid>https://www.plugnmeet.org/blog/how-to-reduce-video-conferencing-costs-with-open-source</guid>
            <pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Your organization relies on video conferencing. It's essential for team meetings, sales demos, and customer support. But as your company grows, your monthly bill from services like Zoom, Google Meet, or Microsoft Teams is growing with it. That predictable per-user, per-month fee is starting to look less like a convenience and more like a major operational expense.]]></description>
            <content:encoded><![CDATA[<p>Your organization relies on video conferencing. It's essential for team meetings, sales demos, and customer support. But as your company grows, your monthly bill from services like Zoom, Google Meet, or Microsoft Teams is growing with it. That predictable per-user, per-month fee is starting to look less like a convenience and more like a major operational expense.</p>
<p>What if you could cut that bill by up to 80% while gaining more control and better branding?</p>
<p>It's not a fantasy. By switching from a proprietary SaaS "rental" model to a self-hosted "ownership" model with an open-source platform like <strong>Plug-N-Meet</strong>, you can dramatically reduce your Total Cost of Ownership (TCO). This article will break down the numbers and show you how.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="the-saas-rental-model-a-penalty-on-growth">The SaaS "Rental" Model: A Penalty on Growth<a href="https://www.plugnmeet.org/blog/how-to-reduce-video-conferencing-costs-with-open-source#the-saas-rental-model-a-penalty-on-growth" class="hash-link" aria-label="Direct link to The SaaS &quot;Rental&quot; Model: A Penalty on Growth" title="Direct link to The SaaS &quot;Rental&quot; Model: A Penalty on Growth" translate="no">​</a></h3>
<p>The pricing model for most SaaS video platforms is simple and seductive: a flat fee per host, per month. It's easy to budget for when you have 10 employees. But what happens when you have 100?</p>
<p>Let's look at a common scenario.</p>
<p><strong>Scenario: A Company with 50 Hosts</strong></p>
<ul>
<li class=""><strong>SaaS Provider Cost (e.g., Zoom Pro):</strong>
<ul>
<li class="">Price per host: ~$15.99 / month</li>
<li class="">Total monthly cost: 50 hosts * $15.99 = <strong>$799.50 / month</strong></li>
<li class="">Total annual cost: <strong>$9,594 / year</strong></li>
</ul>
</li>
</ul>
<p>This is a significant, recurring operational expense (OpEx). And it gets worse. This model penalizes you for success. If your company grows to 100 hosts, your bill doubles to nearly <strong>$20,000 per year</strong>. You are paying more for the exact same service, simply because your team is bigger.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="the-self-hosted-ownership-model-predictable-and-scalable">The Self-Hosted "Ownership" Model: Predictable and Scalable<a href="https://www.plugnmeet.org/blog/how-to-reduce-video-conferencing-costs-with-open-source#the-self-hosted-ownership-model-predictable-and-scalable" class="hash-link" aria-label="Direct link to The Self-Hosted &quot;Ownership&quot; Model: Predictable and Scalable" title="Direct link to The Self-Hosted &quot;Ownership&quot; Model: Predictable and Scalable" translate="no">​</a></h3>
<p>Now, let's compare this to a self-hosted model using the open-source Plug-N-Meet platform. With this model, you don't pay any license fees. Your only significant cost is the server hardware you run the software on.</p>
<p><strong>Scenario: The Same Company with 50 Hosts (or 100, or 200)</strong></p>
<ul>
<li class=""><strong>Self-Hosted Infrastructure Cost (e.g., Hetzner Cloud Server):</strong>
<ul>
<li class="">Recommended server: A powerful cloud instance like the Hetzner CCX33 (8 vCPUs, 32 GB RAM).</li>
<li class="">Total monthly cost: <strong>~€55 / month (approx. $60 / month)</strong></li>
<li class="">Total annual cost: <strong>~$720 / year</strong></li>
</ul>
</li>
</ul>
<p>Let's compare the annual costs:</p>
<ul>
<li class=""><strong>SaaS Model:</strong> <strong>$9,594</strong></li>
<li class=""><strong>Self-Hosted Model:</strong> <strong>$720</strong></li>
</ul>
<p>That's a cost reduction of <strong>over 92%</strong>.</p>
<p>Even if you choose a more expensive cloud provider or a larger server for higher capacity, the savings are dramatic. A comparable server on DigitalOcean or AWS might cost $150-$250 per month, which still represents a <strong>cost saving of over 80%</strong> compared to the SaaS alternative.</p>
<p>The best part? This cost is <strong>fixed</strong>. If your company grows from 50 to 100 hosts, your server cost doesn't change. You can accommodate more users for the same price, rewarding your growth instead of penalizing it.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="but-what-about-hidden-costs">But What About "Hidden" Costs?<a href="https://www.plugnmeet.org/blog/how-to-reduce-video-conferencing-costs-with-open-source#but-what-about-hidden-costs" class="hash-link" aria-label="Direct link to But What About &quot;Hidden&quot; Costs?" title="Direct link to But What About &quot;Hidden&quot; Costs?" translate="no">​</a></h3>
<p>Skeptics of self-hosting often point to hidden costs like maintenance and setup. Let's address those directly.</p>
<ul>
<li class=""><strong>Setup Complexity:</strong> This used to be a valid concern. Today, with automated tools, it's largely a solved problem. Plug-N-Meet provides a <strong><a class="" href="https://www.plugnmeet.org/docs/installation">one-line installation script</a></strong> that sets up a production-ready server in about 15 minutes. You don't need to be a systems administration expert.</li>
<li class=""><strong>Maintenance:</strong> The server requires minimal maintenance. Running a software update is as simple as executing another one-line script. For most organizations, this amounts to less than an hour of work per month.</li>
<li class=""><strong>Reliability:</strong> Modern cloud providers offer extremely high uptime (often 99.99%). Your self-hosted solution, running on reliable infrastructure, is just as dependable as a SaaS service, with the added benefit that you aren't affected by their widespread outages.</li>
</ul>
<p>When you weigh a few hours of optional maintenance per year against a potential saving of thousands of dollars, the financial case becomes overwhelmingly clear.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="conclusion-stop-renting-start-owning">Conclusion: Stop Renting, Start Owning<a href="https://www.plugnmeet.org/blog/how-to-reduce-video-conferencing-costs-with-open-source#conclusion-stop-renting-start-owning" class="hash-link" aria-label="Direct link to Conclusion: Stop Renting, Start Owning" title="Direct link to Conclusion: Stop Renting, Start Owning" translate="no">​</a></h3>
<p>The per-user, per-month SaaS model is a brilliant business strategy—for the provider. For the customer, it's a treadmill of escalating costs that actively works against your growth.</p>
<p>By switching to a self-hosted, open-source platform like Plug-N-Meet, you move from being a tenant to an owner. You gain a predictable, low-cost infrastructure that scales with your success. You also get the invaluable strategic benefits of full brand control, deeper integration, and absolute data privacy.</p>
<p>If your organization is feeling the pain of rising SaaS subscription costs, it's time to run the numbers. The move to self-hosting isn't just a technical decision; it's one of the smartest financial decisions you can make.</p>
<hr>
<p><strong>Ready to slash your video conferencing costs?</strong></p>
<ul>
<li class=""><strong>See our detailed <a class="" href="https://www.plugnmeet.org/blog/scaling-architecture-saves-money">Server Recommendations</a>.</strong></li>
<li class=""><strong>Follow our simple <a class="" href="https://www.plugnmeet.org/docs/installation">Installation Guide</a> to get started.</strong></li>
<li class=""><strong>Read more about the <a class="" href="https://www.plugnmeet.org/blog/own-vs-rent-video-platform">Business Case for Self-Hosting</a>.</strong></li>
</ul>]]></content:encoded>
            <category>business</category>
            <category>cost-saving</category>
            <category>tco</category>
            <category>open-source</category>
            <category>saas-alternative</category>
            <category>pricing</category>
            <category>self-hosting</category>
        </item>
        <item>
            <title><![CDATA[How to Secure Your Online Classroom: A Teacher's Guide to Privacy and Safety]]></title>
            <link>https://www.plugnmeet.org/blog/how-to-secure-your-online-classroom-for-teachers</link>
            <guid>https://www.plugnmeet.org/blog/how-to-secure-your-online-classroom-for-teachers</guid>
            <pubDate>Sat, 28 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[As an educator, your primary goal is to create a safe, respectful, and effective learning environment. In a physical classroom, you have established routines for this: you close the door to prevent interruptions, you set rules for speaking, and you manage the flow of the conversation.]]></description>
            <content:encoded><![CDATA[<p>As an educator, your primary goal is to create a safe, respectful, and effective learning environment. In a physical classroom, you have established routines for this: you close the door to prevent interruptions, you set rules for speaking, and you manage the flow of the conversation.</p>
<p>But how do you replicate this in a virtual classroom? An unsecured online meeting can quickly devolve into chaos, with uninvited guests, background noise, and constant interruptions.</p>
<p>This guide will walk you through the simple but powerful tools available in Plug-N-Meet that allow you to take control of your digital classroom. Think of these features as your new classroom management toolkit, designed to ensure your online sessions are as safe, private, and productive as your in-person ones.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="1-lock-the-door-the-waiting-room">1. Lock the Door: The Waiting Room<a href="https://www.plugnmeet.org/blog/how-to-secure-your-online-classroom-for-teachers#1-lock-the-door-the-waiting-room" class="hash-link" aria-label="Direct link to 1. Lock the Door: The Waiting Room" title="Direct link to 1. Lock the Door: The Waiting Room" translate="no">​</a></h3>
<p>You wouldn't let just anyone walk into your classroom off the street. The same principle should apply online. The <strong>Waiting Room</strong> is your digital lobby, giving you complete control over who enters your session.</p>
<ul>
<li class=""><strong>How it Works:</strong> When you enable the Waiting Room for your class, any student who clicks the join link is placed on a "waiting" screen. You, the teacher, will see a notification and a list of everyone waiting to get in. You can then admit them one by one or all at once.</li>
<li class=""><strong>Why it's Essential:</strong>
<ul>
<li class=""><strong>Prevents "Zoombombing":</strong> This is the single most effective way to stop uninvited guests from disrupting your class. If you don't recognize a name, you don't have to let them in.</li>
<li class=""><strong>Control the Start Time:</strong> It allows you to prepare your lesson materials and admit all students at the same time, ensuring everyone starts on the same page.</li>
</ul>
</li>
</ul>
<p><strong>How to Enable it:</strong> You can enable the Waiting Room in your room settings when you create the class in your LMS (like <strong><a class="" href="https://www.plugnmeet.org/blog/no-code-video-conferencing-moodle">Moodle</a></strong>) or via the API.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="2-set-the-rules-granular-lock-settings">2. Set the Rules: Granular Lock Settings<a href="https://www.plugnmeet.org/blog/how-to-secure-your-online-classroom-for-teachers#2-set-the-rules-granular-lock-settings" class="hash-link" aria-label="Direct link to 2. Set the Rules: Granular Lock Settings" title="Direct link to 2. Set the Rules: Granular Lock Settings" translate="no">​</a></h3>
<p>Once your students are in the room, you need to set the ground rules for participation. Plug-N-Meet's <strong><a class="" href="https://www.plugnmeet.org/blog/moderator-guide-room-lock-settings">Room Lock Settings</a></strong> panel is your command center for this.</p>
<ul>
<li class=""><strong>Lock Microphones (Your Most-Used Tool):</strong> This is the equivalent of asking the class to be quiet while you're speaking. It mutes all participants and prevents them from unmuting themselves. This is essential for lectures, presentations, or when a specific student is speaking.</li>
<li class=""><strong>Lock Webcams:</strong> In large classes, having dozens of webcams active can be distracting and consume a lot of bandwidth. Locking webcams helps focus attention on the speaker or the shared content.</li>
<li class=""><strong>Lock Public Chat:</strong> While chat is a great tool, it can sometimes become a source of distraction. You can temporarily lock the chat to bring focus back to the lesson, and then unlock it for a dedicated Q&amp;A session.</li>
<li class=""><strong>Lock Screen Sharing:</strong> Keep this locked by default to prevent students from accidentally taking over the presentation. You can unlock it when you want a student to share their work.</li>
</ul>
<p><strong>Pro Tip:</strong> Use these settings dynamically. Start your class with everything unlocked for a few minutes of social time, then lock microphones and chat when the formal lesson begins.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="3-the-gold-standard-of-privacy-end-to-end-encryption-e2ee">3. The Gold Standard of Privacy: End-to-End Encryption (E2EE)<a href="https://www.plugnmeet.org/blog/how-to-secure-your-online-classroom-for-teachers#3-the-gold-standard-of-privacy-end-to-end-encryption-e2ee" class="hash-link" aria-label="Direct link to 3. The Gold Standard of Privacy: End-to-End Encryption (E2EE)" title="Direct link to 3. The Gold Standard of Privacy: End-to-End Encryption (E2EE)" translate="no">​</a></h3>
<p>For sensitive conversations, such as a one-on-one meeting with a student or a parent, you may need the highest possible level of privacy. <strong>End-to-End Encryption (E2EE)</strong> provides a mathematical guarantee that no one—not even the server administrator—can access the audio or video of your conversation.</p>
<ul>
<li class=""><strong>How it Works:</strong> When E2EE is enabled, the video and audio are encrypted on your device and only decrypted on the recipient's device.</li>
<li class=""><strong>When to Use It:</strong> This is ideal for any situation requiring absolute confidentiality, such as discussions about grades, student well-being, or any other private matter.</li>
</ul>
<p><strong>How to Enable it:</strong> E2EE can be enabled on a per-room basis. Our guide on <strong><a class="" href="https://www.plugnmeet.org/blog/how-to-enable-end-to-end-encryption">How to Enable E2EE</a></strong> explains the simple steps. It's important to note that when you enable the highest level of E2EE, features that require the server to "see" the media, like cloud recording, are automatically disabled for your protection.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="conclusion-you-are-in-control">Conclusion: You Are in Control<a href="https://www.plugnmeet.org/blog/how-to-secure-your-online-classroom-for-teachers#conclusion-you-are-in-control" class="hash-link" aria-label="Direct link to Conclusion: You Are in Control" title="Direct link to Conclusion: You Are in Control" translate="no">​</a></h3>
<p>A secure and productive online classroom doesn't happen by accident. It happens by design. By using these simple but powerful features, you can move from being a passive host to an active and effective classroom manager.</p>
<p>Start with the Waiting Room to control who enters, use the Lock Settings to manage the flow of conversation, and deploy E2EE for sensitive discussions. With these tools at your fingertips, you can create a virtual learning environment that is just as safe, private, and conducive to learning as your physical classroom.</p>
<hr>
<p><strong>Ready to take control of your virtual classroom?</strong></p>
<ul>
<li class=""><strong>Try these moderator features in our <a href="https://demo.plugnmeet.com/landing.html" target="_blank" rel="noopener noreferrer" class="">Live Demo</a>.</strong></li>
<li class=""><strong>Read our full <a class="" href="https://www.plugnmeet.org/docs/user-guide/moderator">Moderator Guide</a> for more tips.</strong></li>
<li class=""><strong>Learn more about our commitment to <a class="" href="https://www.plugnmeet.org/blog/privacy-by-design-zero-trust">Privacy by Design</a>.</strong></li>
</ul>]]></content:encoded>
            <category>tutorial</category>
            <category>how-to</category>
            <category>security</category>
            <category>privacy</category>
            <category>education</category>
            <category>teacher</category>
            <category>moderator</category>
            <category>virtual-classroom</category>
        </item>
        <item>
            <title><![CDATA[Why Your Business Needs a White-Labeled Video Conferencing Solution]]></title>
            <link>https://www.plugnmeet.org/blog/why-your-business-needs-a-white-labeled-video-conferencing-solution</link>
            <guid>https://www.plugnmeet.org/blog/why-your-business-needs-a-white-labeled-video-conferencing-solution</guid>
            <pubDate>Mon, 23 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Your brand is your most valuable asset. You've invested countless hours and resources into building a unique identity, a memorable customer experience, and a relationship of trust with your audience.]]></description>
            <content:encoded><![CDATA[<p>Your brand is your most valuable asset. You've invested countless hours and resources into building a unique identity, a memorable customer experience, and a relationship of trust with your audience.</p>
<p>So why, at the most critical moment of interaction—a sales demo, a customer support call, or a training session—do you send your customers to a third-party platform with someone else's logo on it?</p>
<p>Using a generic, off-the-shelf video conferencing tool is like a Michelin-starred restaurant serving its food in a McDonald's box. It breaks the experience, erodes brand value, and misses a huge opportunity. This is why forward-thinking businesses are moving away from generic SaaS tools and embracing <strong>white-labeled video conferencing solutions</strong> like Plug-N-Meet.</p>
<p>A white-label platform isn't just about changing the logo. It's about owning the entire customer journey and transforming a simple utility into a powerful strategic asset.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="1-it-builds-brand-trust-and-professionalism">1. It Builds Brand Trust and Professionalism<a href="https://www.plugnmeet.org/blog/why-your-business-needs-a-white-labeled-video-conferencing-solution#1-it-builds-brand-trust-and-professionalism" class="hash-link" aria-label="Direct link to 1. It Builds Brand Trust and Professionalism" title="Direct link to 1. It Builds Brand Trust and Professionalism" translate="no">​</a></h3>
<p>Imagine a new client is paying you for a premium consultation. You send them a meeting link. Which of these inspires more confidence?</p>
<ul>
<li class=""><code>your-company.zoom.us</code></li>
<li class=""><code>meet.your-company.com</code></li>
</ul>
<p>The answer is obvious. When the entire experience—from the URL to the logo in the corner to the brand colors of the interface—is yours, it sends a powerful message: you are professional, you are established, and you have invested in your own platform. It removes the jarring feeling of being handed off to another company and keeps the focus entirely on your brand.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="2-it-creates-a-seamless-frictionless-customer-experience">2. It Creates a Seamless, Frictionless Customer Experience<a href="https://www.plugnmeet.org/blog/why-your-business-needs-a-white-labeled-video-conferencing-solution#2-it-creates-a-seamless-frictionless-customer-experience" class="hash-link" aria-label="Direct link to 2. It Creates a Seamless, Frictionless Customer Experience" title="Direct link to 2. It Creates a Seamless, Frictionless Customer Experience" translate="no">​</a></h3>
<p>A white-labeled solution, especially one that can be deeply integrated, eliminates the "context switching" that plagues generic tools. Instead of your user having to open a separate app or a new tab that looks completely different from your website, the video experience feels like a natural extension of your own digital property.</p>
<p>With a platform like Plug-N-Meet, you can use the <strong><a class="" href="https://www.plugnmeet.org/blog/deep-integration-white-label-guide"><code>getClientFiles</code> API</a></strong> to embed the video client directly into your own application or customer portal. This means you can:</p>
<ul>
<li class="">Place the video call next to relevant customer data for your support agents.</li>
<li class="">Allow users to join a webinar directly from your community page without ever leaving your site.</li>
<li class="">Create a "single pane of glass" experience where the video is just one integrated component of a larger workflow.</li>
</ul>
<p>This seamlessness reduces friction, improves usability, and keeps your user engaged within your ecosystem.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="3-you-control-the-feature-set-and-user-journey">3. You Control the Feature Set and User Journey<a href="https://www.plugnmeet.org/blog/why-your-business-needs-a-white-labeled-video-conferencing-solution#3-you-control-the-feature-set-and-user-journey" class="hash-link" aria-label="Direct link to 3. You Control the Feature Set and User Journey" title="Direct link to 3. You Control the Feature Set and User Journey" translate="no">​</a></h3>
<p>Not all conversations are the same. A one-on-one sales call has very different needs than a 100-person training webinar.</p>
<p>Generic platforms offer a one-size-fits-all approach. A white-label, API-first platform gives you granular control to tailor the experience to the specific use case.</p>
<ul>
<li class=""><strong>For a simple support call:</strong> You can disable all features except video, audio, and chat to create a clean, minimalist interface.</li>
<li class=""><strong>For an interactive workshop:</strong> You can enable the whiteboard, breakout rooms, and polling to foster collaboration.</li>
<li class=""><strong>For a formal presentation:</strong> You can lock down all participant controls to ensure the focus remains on the speaker.</li>
</ul>
<p>This ability to programmatically define the user journey means you can deliver the perfect, purpose-built tool for every interaction, which is a level of service generic platforms can't match.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="4-it-turns-a-cost-center-into-a-potential-revenue-stream">4. It Turns a Cost Center into a Potential Revenue Stream<a href="https://www.plugnmeet.org/blog/why-your-business-needs-a-white-labeled-video-conferencing-solution#4-it-turns-a-cost-center-into-a-potential-revenue-stream" class="hash-link" aria-label="Direct link to 4. It Turns a Cost Center into a Potential Revenue Stream" title="Direct link to 4. It Turns a Cost Center into a Potential Revenue Stream" translate="no">​</a></h3>
<p>When you pay a per-user subscription for a generic SaaS tool, video conferencing is a cost center that grows as your team grows.</p>
<p>When you own your platform, you flip the model. Because a self-hosted solution like Plug-N-Meet has no per-user fees, you can offer video conferencing services to your own customers. With our official plugins for <strong><a class="" href="https://www.plugnmeet.org/blog/no-code-video-conferencing-service-with-wordpress">WordPress</a></strong> and <strong><a class="" href="https://www.plugnmeet.org/blog/no-code-video-conferencing-service-with-joomla">Joomla</a></strong>, you can even use membership and e-commerce extensions to sell access to premium, branded meeting rooms—no coding required.</p>
<p>You transform a monthly expense into a revenue-generating product.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="conclusion-stop-advertising-for-other-brands">Conclusion: Stop Advertising for Other Brands<a href="https://www.plugnmeet.org/blog/why-your-business-needs-a-white-labeled-video-conferencing-solution#conclusion-stop-advertising-for-other-brands" class="hash-link" aria-label="Direct link to Conclusion: Stop Advertising for Other Brands" title="Direct link to Conclusion: Stop Advertising for Other Brands" translate="no">​</a></h3>
<p>Every time a customer joins a meeting on a generic platform, you are paying to advertise for that platform.</p>
<p>A white-labeled video conferencing solution is an investment in your own brand. It enhances trust, creates a superior customer experience, and gives you the control to build a communication tool that perfectly fits your business. In a competitive market, owning this critical touchpoint is not a luxury; it's a strategic necessity.</p>
<hr>
<p><strong>Ready to put your brand front and center?</strong></p>
<ul>
<li class=""><strong>Learn more about our <a class="" href="https://www.plugnmeet.org/blog/deep-integration-white-label-guide">Deep Integration and White-Labeling Capabilities</a>.</strong></li>
<li class=""><strong>Try our <a href="https://demo.plugnmeet.com/landing.html" target="_blank" rel="noopener noreferrer" class="">Live Demo</a> and imagine it with your own branding.</strong></li>
<li class=""><strong>Follow our <a class="" href="https://www.plugnmeet.org/docs/installation">Installation Guide</a> to start building your own platform.</strong></li>
</ul>]]></content:encoded>
            <category>business</category>
            <category>branding</category>
            <category>white-label</category>
            <category>customer-experience</category>
            <category>marketing</category>
            <category>saas-alternative</category>
        </item>
        <item>
            <title><![CDATA[The Ultimate Guide to Joomla Video Conferencing: Integrate Live Meetings & Webinars]]></title>
            <link>https://www.plugnmeet.org/blog/joomla-video-conferencing-guide</link>
            <guid>https://www.plugnmeet.org/blog/joomla-video-conferencing-guide</guid>
            <pubDate>Wed, 18 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Joomla is a powerhouse for building robust, flexible websites, from community portals to sophisticated business sites. But when it's time to engage your audience with live video, you might find yourself sending them away from the beautiful site you've built to a generic, third-party conferencing tool. This breaks the user experience and undermines your brand.]]></description>
            <content:encoded><![CDATA[<p>Joomla is a powerhouse for building robust, flexible websites, from community portals to sophisticated business sites. But when it's time to engage your audience with live video, you might find yourself sending them away from the beautiful site you've built to a generic, third-party conferencing tool. This breaks the user experience and undermines your brand.</p>
<p>What if you could integrate a secure, fully-branded, and powerful video conferencing solution directly into your Joomla site, making it a native part of your user's journey?</p>
<p>With the official <strong>Plug-N-Meet component for Joomla</strong>, you can. This guide will show you how to transform your Joomla website into a dynamic communication platform, perfect for community meetings, webinars, online training, and even monetized services.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="why-a-native-joomla-integration-beats-external-tools">Why a Native Joomla Integration Beats External Tools<a href="https://www.plugnmeet.org/blog/joomla-video-conferencing-guide#why-a-native-joomla-integration-beats-external-tools" class="hash-link" aria-label="Direct link to Why a Native Joomla Integration Beats External Tools" title="Direct link to Why a Native Joomla Integration Beats External Tools" translate="no">​</a></h3>
<p>Before we get into the setup, let's be clear about the strategic advantages of using a self-hosted, integrated solution like Plug-N-Meet instead of an external SaaS tool.</p>
<ol>
<li class=""><strong>A Seamless, Professional Brand Experience:</strong> Your users join meetings on your own domain, with your logo and brand colors. This reinforces professionalism and trust, keeping the user experience consistent with the rest of your site.</li>
<li class=""><strong>Full Control Over User Data:</strong> All user data and meeting recordings are stored on your own server, not in a third-party cloud. This is critical for maintaining data sovereignty and complying with privacy regulations like GDPR.</li>
<li class=""><strong>Cost-Effective Scaling:</strong> You escape the expensive per-user, per-month subscription fees that penalize growth. With a self-hosted model, your primary cost is a predictable server fee, allowing you to serve more users without your bill spiraling out of control.</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="the-3-step-guide-to-your-first-joomla-meeting">The 3-Step Guide to Your First Joomla Meeting<a href="https://www.plugnmeet.org/blog/joomla-video-conferencing-guide#the-3-step-guide-to-your-first-joomla-meeting" class="hash-link" aria-label="Direct link to The 3-Step Guide to Your First Joomla Meeting" title="Direct link to The 3-Step Guide to Your First Joomla Meeting" translate="no">​</a></h3>
<p>You can have a live video meeting room on your Joomla site in under 15 minutes.</p>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="step-1-get-your-video-conferencing-engine">Step 1: Get Your Video Conferencing Engine<a href="https://www.plugnmeet.org/blog/joomla-video-conferencing-guide#step-1-get-your-video-conferencing-engine" class="hash-link" aria-label="Direct link to Step 1: Get Your Video Conferencing Engine" title="Direct link to Step 1: Get Your Video Conferencing Engine" translate="no">​</a></h4>
<p>First, you need the server that will power your video calls. You can either self-host the open-source version with our <strong><a class="" href="https://www.plugnmeet.org/docs/installation">simple installation script</a></strong> or get an instant, managed server from <strong><a href="https://www.plugnmeet.cloud/" target="_blank" rel="noopener noreferrer" class="">plugnmeet Cloud</a></strong>. Both will provide you with an <strong>API Key</strong> and <strong>API Secret</strong>.</p>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="step-2-install-the-free-plug-n-meet-component">Step 2: Install the Free Plug-N-Meet Component<a href="https://www.plugnmeet.org/blog/joomla-video-conferencing-guide#step-2-install-the-free-plug-n-meet-component" class="hash-link" aria-label="Direct link to Step 2: Install the Free Plug-N-Meet Component" title="Direct link to Step 2: Install the Free Plug-N-Meet Component" translate="no">​</a></h4>
<p>From your Joomla administrator panel:</p>
<ol>
<li class="">Go to <strong>System &gt; Install &gt; Extensions</strong>.</li>
<li class="">Install the Plug-N-Meet component, which you can download from the official <a href="https://extensions.joomla.org/extension/plugnmeet/" target="_blank" rel="noopener noreferrer" class="">Joomla Extensions Directory</a>.</li>
<li class="">After installation, navigate to <strong>System &gt; Global Configuration</strong> and select <strong>plugNmeet</strong> from the components list.</li>
<li class="">Enter your <strong>API Key</strong> and <strong>API Secret</strong> and save the configuration.</li>
</ol>
<p>Your Joomla site is now fully connected to your video conferencing engine.</p>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="step-3-create-and-display-your-room">Step 3: Create and Display Your Room<a href="https://www.plugnmeet.org/blog/joomla-video-conferencing-guide#step-3-create-and-display-your-room" class="hash-link" aria-label="Direct link to Step 3: Create and Display Your Room" title="Direct link to Step 3: Create and Display Your Room" translate="no">​</a></h4>
<ol>
<li class="">Go to <strong>Components &gt; Plug N Meet &gt; Manage Rooms</strong> and click <strong>+ New</strong>.</li>
<li class="">Configure your room's features, such as its name, participant limits, and a welcome message.</li>
<li class="">To display the room, go to <strong>Menus &gt; Main Menu</strong> and click <strong>+ Add New Menu Item</strong>.</li>
<li class="">For the <strong>Menu Item Type</strong>, select <strong>Plug N Meet &gt; Single room</strong>.</li>
<li class="">In the <strong>Select a room</strong> dropdown, choose the room you just created and save the menu item.</li>
</ol>
<p>That's it. A new link will appear on your site's main menu, leading directly to your fully functional, branded video conferencing room.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="level-up-3-powerful-ways-to-use-video-on-your-joomla-site">Level Up: 3 Powerful Ways to Use Video on Your Joomla Site<a href="https://www.plugnmeet.org/blog/joomla-video-conferencing-guide#level-up-3-powerful-ways-to-use-video-on-your-joomla-site" class="hash-link" aria-label="Direct link to Level Up: 3 Powerful Ways to Use Video on Your Joomla Site" title="Direct link to Level Up: 3 Powerful Ways to Use Video on Your Joomla Site" translate="no">​</a></h3>
<p>With the basics in place, you can now leverage Plug-N-Meet to build sophisticated video-based services.</p>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="use-case-1-the-private-client-portal">Use Case 1: The Private Client Portal<a href="https://www.plugnmeet.org/blog/joomla-video-conferencing-guide#use-case-1-the-private-client-portal" class="hash-link" aria-label="Direct link to Use Case 1: The Private Client Portal" title="Direct link to Use Case 1: The Private Client Portal" translate="no">​</a></h4>
<p>If you're a consultant, coach, or provide any one-on-one service, you can create private, secure meeting rooms for your clients.</p>
<ul>
<li class=""><strong>How to do it:</strong> Use Joomla's built-in Access Control Levels (ACL) to create a user group for each client. Create a dedicated menu item for their private meeting room and set its <strong>Access</strong> level to their specific user group. Now, only that logged-in client can see and access their private session link.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="use-case-2-the-community-webinar-platform">Use Case 2: The Community Webinar Platform<a href="https://www.plugnmeet.org/blog/joomla-video-conferencing-guide#use-case-2-the-community-webinar-platform" class="hash-link" aria-label="Direct link to Use Case 2: The Community Webinar Platform" title="Direct link to Use Case 2: The Community Webinar Platform" translate="no">​</a></h4>
<p>Host live webinars and events directly on your site to engage your community.</p>
<ul>
<li class=""><strong>How to do it:</strong> Create a new room and configure it for a webinar. In the room settings, you can disable webcams for attendees, enable <strong>Cloud Recording</strong>, and activate features like <strong>Polling</strong> and <strong>Raise Hand</strong>. Set the menu item's access to "Public" or "Registered" and you have an instant webinar platform.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="use-case-3-the-monetized-membership-service">Use Case 3: The Monetized Membership Service<a href="https://www.plugnmeet.org/blog/joomla-video-conferencing-guide#use-case-3-the-monetized-membership-service" class="hash-link" aria-label="Direct link to Use Case 3: The Monetized Membership Service" title="Direct link to Use Case 3: The Monetized Membership Service" translate="no">​</a></h4>
<p>This is where you can turn your Joomla site into a revenue-generating business. By combining Plug-N-Meet with a Joomla membership or e-commerce extension, you can sell access to premium video content. For a detailed walkthrough, see our guide on <strong><a class="" href="https://www.plugnmeet.org/blog/no-code-video-conferencing-service-with-joomla">How to Launch Your Own No-Code Video Conferencing Service with Joomla</a></strong>.</p>
<ul>
<li class=""><strong>How to do it:</strong>
<ol>
<li class="">Use your membership extension to create a "Premium Members" user group that paying subscribers are automatically added to.</li>
<li class="">Create a new menu item that links to your premium Plug-N-Meet room.</li>
<li class="">Set the <strong>Access</strong> level for this menu item to "Premium Members."</li>
</ol>
</li>
</ul>
<p>Now, only paying subscribers will be able to see the link and join your exclusive video sessions, creating an automated paywall.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="conclusion-the-professional-video-solution-for-joomla">Conclusion: The Professional Video Solution for Joomla<a href="https://www.plugnmeet.org/blog/joomla-video-conferencing-guide#conclusion-the-professional-video-solution-for-joomla" class="hash-link" aria-label="Direct link to Conclusion: The Professional Video Solution for Joomla" title="Direct link to Conclusion: The Professional Video Solution for Joomla" translate="no">​</a></h3>
<p>Don't let external tools dictate your user experience. With the Plug-N-Meet component, you can seamlessly integrate a secure, scalable, and fully-branded video conferencing platform into the Joomla ecosystem.</p>
<p>It's a solution that's simple enough to get started in minutes but powerful enough to build a business on.</p>
<hr>
<p><strong>Ready to power up your Joomla site?</strong></p>
<ul>
<li class=""><strong><a href="https://extensions.joomla.org/extension/plugnmeet/" target="_blank" rel="noopener noreferrer" class="">Download the official Joomla Component</a></strong></li>
<li class=""><strong><a href="https://demo.plugnmeet.com/landing.html" target="_blank" rel="noopener noreferrer" class="">Try the Live Demo</a> to see all the features in action.</strong></li>
<li class=""><strong>Follow our <a class="" href="https://www.plugnmeet.org/docs/installation">Installation Guide</a> to get your server running.</strong></li>
</ul>]]></content:encoded>
            <category>joomla</category>
            <category>video-conferencing</category>
            <category>component</category>
            <category>no-code</category>
            <category>webinar</category>
            <category>membership</category>
            <category>joomla-video-conferencing</category>
        </item>
        <item>
            <title><![CDATA[The Ultimate Guide to Moodle Video Conferencing: From Virtual Classrooms to Collaborative Workshops]]></title>
            <link>https://www.plugnmeet.org/blog/moodle-video-conferencing-guide</link>
            <guid>https://www.plugnmeet.org/blog/moodle-video-conferencing-guide</guid>
            <pubDate>Sat, 14 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[As an educator or administrator on Moodle, your goal is to create a seamless and engaging learning environment. But when it's time for a live virtual class, many are forced to compromise, sending students to an external Zoom or Teams link. This breaks the learning flow, creates a disjointed user experience, and raises valid concerns about student data privacy.]]></description>
            <content:encoded><![CDATA[<p>As an educator or administrator on Moodle, your goal is to create a seamless and engaging learning environment. But when it's time for a live virtual class, many are forced to compromise, sending students to an external Zoom or Teams link. This breaks the learning flow, creates a disjointed user experience, and raises valid concerns about student data privacy.</p>
<p>What if your virtual classroom was just another native Moodle activity, as easy to add as a quiz or a forum? What if it was a powerful, interactive space designed specifically for teaching, not just a generic meeting room?</p>
<p>With the official <strong>Plug-N-Meet plugin for Moodle</strong>, this is not just possible; it's simple. This guide will show you how to transform your Moodle site into a world-class, interactive e-learning platform.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="why-a-native-moodle-integration-is-a-game-changer">Why a Native Moodle Integration is a Game-Changer<a href="https://www.plugnmeet.org/blog/moodle-video-conferencing-guide#why-a-native-moodle-integration-is-a-game-changer" class="hash-link" aria-label="Direct link to Why a Native Moodle Integration is a Game-Changer" title="Direct link to Why a Native Moodle Integration is a Game-Changer" translate="no">​</a></h3>
<p>Before we get to the "how," let's focus on the "why." Choosing a deeply integrated, self-hosted solution like Plug-N-Meet over a generic SaaS tool provides three critical advantages for any educational institution.</p>
<ol>
<li class=""><strong>A Seamless Student Experience:</strong> Students never leave your Moodle site. They join the live class directly from their course page, with the same branding and interface they already know. This reduces confusion and keeps them focused on the learning, not the technology.</li>
<li class=""><strong>Absolute Control Over Student Data:</strong> In education, privacy is paramount. With a self-hosted platform, all student data and class recordings are stored on your own servers, not on a third-party cloud. This gives you full control to ensure compliance with privacy regulations like GDPR and FERPA.</li>
<li class=""><strong>Predictable, Scalable Costs:</strong> Instead of paying a costly per-host, per-month subscription that penalizes you for adding more teachers, you have a fixed, predictable cost for your server infrastructure. This is a far more sustainable and cost-effective model for schools and universities.</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="the-3-step-guide-to-your-first-moodle-virtual-classroom">The 3-Step Guide to Your First Moodle Virtual Classroom<a href="https://www.plugnmeet.org/blog/moodle-video-conferencing-guide#the-3-step-guide-to-your-first-moodle-virtual-classroom" class="hash-link" aria-label="Direct link to The 3-Step Guide to Your First Moodle Virtual Classroom" title="Direct link to The 3-Step Guide to Your First Moodle Virtual Classroom" translate="no">​</a></h3>
<p>Getting started is incredibly fast. You can have your first meeting room live in under 15 minutes. For a more detailed walkthrough, you can also read our popular guide on <strong><a class="" href="https://www.plugnmeet.org/blog/no-code-video-conferencing-moodle">How to Add No-Code Video Conferencing to Your Moodle Courses</a></strong>.</p>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="step-1-get-your-video-conferencing-engine">Step 1: Get Your Video Conferencing Engine<a href="https://www.plugnmeet.org/blog/moodle-video-conferencing-guide#step-1-get-your-video-conferencing-engine" class="hash-link" aria-label="Direct link to Step 1: Get Your Video Conferencing Engine" title="Direct link to Step 1: Get Your Video Conferencing Engine" translate="no">​</a></h4>
<p>First, you need the server that will power your video calls. You can either self-host the open-source version with our <strong><a class="" href="https://www.plugnmeet.org/docs/installation">simple installation script</a></strong> or get an instant, managed server from <strong><a href="https://www.plugnmeet.cloud/" target="_blank" rel="noopener noreferrer" class="">plugnmeet Cloud</a></strong>. Both will provide you with an <strong>API Key</strong> and <strong>API Secret</strong>.</p>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="step-2-install-the-free-plug-n-meet-plugin">Step 2: Install the Free Plug-N-Meet Plugin<a href="https://www.plugnmeet.org/blog/moodle-video-conferencing-guide#step-2-install-the-free-plug-n-meet-plugin" class="hash-link" aria-label="Direct link to Step 2: Install the Free Plug-N-Meet Plugin" title="Direct link to Step 2: Install the Free Plug-N-Meet Plugin" translate="no">​</a></h4>
<p>From your Moodle Site Administration panel:</p>
<ol>
<li class="">Go to <strong>Site administration &gt; Plugins &gt; Install plugins</strong>.</li>
<li class="">Install the Plug-N-Meet plugin, which you can download from the official <a href="https://moodle.org/plugins/mod_plugnmeet" target="_blank" rel="noopener noreferrer" class="">Moodle plugins directory</a>.</li>
<li class="">After installation, navigate to the plugin settings page (<strong>Site administration &gt; Plugins &gt; Activity modules &gt; PlugNmeet</strong>).</li>
<li class="">Enter your <strong>API Key</strong> and <strong>API Secret</strong> and save the changes.</li>
</ol>
<p>Your Moodle site is now fully integrated with your video conferencing engine.</p>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="step-3-add-the-plugnmeet-activity-to-your-course">Step 3: Add the "PlugNmeet" Activity to Your Course<a href="https://www.plugnmeet.org/blog/moodle-video-conferencing-guide#step-3-add-the-plugnmeet-activity-to-your-course" class="hash-link" aria-label="Direct link to Step 3: Add the &quot;PlugNmeet&quot; Activity to Your Course" title="Direct link to Step 3: Add the &quot;PlugNmeet&quot; Activity to Your Course" translate="no">​</a></h4>
<ol>
<li class="">Navigate to the Moodle course where you want to add the live class.</li>
<li class="">Turn <strong>Edit mode</strong> on.</li>
<li class="">Click <strong>Add an activity or resource</strong> and select <strong>PlugNmeet</strong> from the list.</li>
<li class="">Configure your virtual classroom, giving it a name, a welcome message, and setting the schedule.</li>
</ol>
<p>That's it. Your students can now join a powerful, interactive virtual classroom directly from their Moodle course page.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="level-up-3-powerful-ways-to-use-video-in-moodle">Level Up: 3 Powerful Ways to Use Video in Moodle<a href="https://www.plugnmeet.org/blog/moodle-video-conferencing-guide#level-up-3-powerful-ways-to-use-video-in-moodle" class="hash-link" aria-label="Direct link to Level Up: 3 Powerful Ways to Use Video in Moodle" title="Direct link to Level Up: 3 Powerful Ways to Use Video in Moodle" translate="no">​</a></h3>
<p>Plug-N-Meet is more than just a lecture tool. It's a suite of features designed for modern pedagogy.</p>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="use-case-1-the-interactive-virtual-classroom">Use Case 1: The Interactive Virtual Classroom<a href="https://www.plugnmeet.org/blog/moodle-video-conferencing-guide#use-case-1-the-interactive-virtual-classroom" class="hash-link" aria-label="Direct link to Use Case 1: The Interactive Virtual Classroom" title="Direct link to Use Case 1: The Interactive Virtual Classroom" translate="no">​</a></h4>
<p>Transform a passive lecture into an engaging, two-way experience.</p>
<ul>
<li class=""><strong>How to do it:</strong> Use the <strong><a class="" href="https://www.plugnmeet.org/blog/integrated-whiteboard-experience">Interactive Whiteboard</a></strong> to upload your presentation slides and annotate them in real-time. Use the <strong>Live Polling</strong> feature to quickly check for student understanding or run a quick quiz. All class sessions can be recorded to the cloud and automatically made available back in the Moodle course for students who missed the live session.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="use-case-2-the-collaborative-workshop-with-breakout-rooms">Use Case 2: The Collaborative Workshop with Breakout Rooms<a href="https://www.plugnmeet.org/blog/moodle-video-conferencing-guide#use-case-2-the-collaborative-workshop-with-breakout-rooms" class="hash-link" aria-label="Direct link to Use Case 2: The Collaborative Workshop with Breakout Rooms" title="Direct link to Use Case 2: The Collaborative Workshop with Breakout Rooms" translate="no">​</a></h4>
<p>For project-based learning and group work, the <strong><a class="" href="https://www.plugnmeet.org/blog/mastering-breakout-rooms">Breakout Rooms</a></strong> feature is essential.</p>
<ul>
<li class=""><strong>How to do it:</strong> From within the live session, the teacher can split the students into smaller groups. Each breakout room gets its own private, fully-functional whiteboard and shared notepad, allowing for true small-group collaboration. The teacher can broadcast messages to all rooms or drop in to a specific group to check on their progress.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="use-case-3-the-secure-one-on-one-or-parent-teacher-conference">Use Case 3: The Secure One-on-One or Parent-Teacher Conference<a href="https://www.plugnmeet.org/blog/moodle-video-conferencing-guide#use-case-3-the-secure-one-on-one-or-parent-teacher-conference" class="hash-link" aria-label="Direct link to Use Case 3: The Secure One-on-One or Parent-Teacher Conference" title="Direct link to Use Case 3: The Secure One-on-One or Parent-Teacher Conference" translate="no">​</a></h4>
<p>For private conversations, you need a higher level of security.</p>
<ul>
<li class=""><strong>How to do it:</strong> Create a PlugNmeet activity and, in the room settings, enable <strong><a class="" href="https://www.plugnmeet.org/blog/privacy-by-design-zero-trust">End-to-End Encryption (E2EE)</a></strong>. This provides a mathematical guarantee that the conversation is completely private and that not even the server administrator can access the audio or video. This is ideal for one-on-one student support, counseling sessions, or parent-teacher conferences where confidentiality is critical.</li>
</ul>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="conclusion-the-virtual-classroom-moodle-deserves">Conclusion: The Virtual Classroom Moodle Deserves<a href="https://www.plugnmeet.org/blog/moodle-video-conferencing-guide#conclusion-the-virtual-classroom-moodle-deserves" class="hash-link" aria-label="Direct link to Conclusion: The Virtual Classroom Moodle Deserves" title="Direct link to Conclusion: The Virtual Classroom Moodle Deserves" translate="no">​</a></h3>
<p>Stop compromising with external tools that break the learning experience. By integrating Plug-N-Meet, you can offer your teachers and students a powerful, secure, and seamlessly integrated virtual classroom that lives right where it belongs: inside Moodle.</p>
<p>It's a solution that's simple enough for any teacher to use but powerful enough to support the most innovative online teaching methods.</p>
<hr>
<p><strong>Ready to enhance your Moodle courses?</strong></p>
<ul>
<li class=""><strong><a href="https://moodle.org/plugins/mod_plugnmeet" target="_blank" rel="noopener noreferrer" class="">Download the official Moodle Plugin</a></strong></li>
<li class=""><strong><a href="https://demo.plugnmeet.com/landing.html" target="_blank" rel="noopener noreferrer" class="">Try the Live Demo</a> to explore the teaching tools.</strong></li>
<li class=""><strong>Follow our <a class="" href="https://www.plugnmeet.org/docs/installation">Installation Guide</a> to get your server running.</strong></li>
</ul>]]></content:encoded>
            <category>moodle</category>
            <category>video-conferencing</category>
            <category>plugin</category>
            <category>no-code</category>
            <category>virtual-classroom</category>
            <category>e-learning</category>
            <category>moodle-plugin</category>
            <category>moodle-video-conferencing</category>
        </item>
        <item>
            <title><![CDATA[The Ultimate Guide to WordPress Video Conferencing]]></title>
            <link>https://www.plugnmeet.org/blog/wordpress-video-conferencing-guide</link>
            <guid>https://www.plugnmeet.org/blog/wordpress-video-conferencing-guide</guid>
            <pubDate>Tue, 10 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[WordPress has empowered millions to build anything from a simple blog to a complex e-commerce empire. But when it comes to one of the most critical forms of modern communication—live video—many site owners hit a wall. You're often left juggling clunky Zoom links, sending your users to third-party platforms, and sacrificing the professional, branded experience your website was designed to provide.]]></description>
            <content:encoded><![CDATA[<p>WordPress has empowered millions to build anything from a simple blog to a complex e-commerce empire. But when it comes to one of the most critical forms of modern communication—live video—many site owners hit a wall. You're often left juggling clunky Zoom links, sending your users to third-party platforms, and sacrificing the professional, branded experience your website was designed to provide.</p>
<p>What if you could integrate a powerful, secure, and fully-branded video conferencing solution directly into your WordPress site as easily as you add a new page?</p>
<p>This is not just possible; it's simple. This guide will show you how to use the <strong>Plug-N-Meet plugin</strong> to transform your WordPress site into a true communication hub, whether you need a simple meeting room, a platform for webinars, or a full-fledged, monetized video service.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="why-self-hosted-is-the-smart-choice-for-wordpress">Why Self-Hosted is the Smart Choice for WordPress<a href="https://www.plugnmeet.org/blog/wordpress-video-conferencing-guide#why-self-hosted-is-the-smart-choice-for-wordpress" class="hash-link" aria-label="Direct link to Why Self-Hosted is the Smart Choice for WordPress" title="Direct link to Why Self-Hosted is the Smart Choice for WordPress" translate="no">​</a></h3>
<p>Before we dive into the "how," let's cover the "why." While embedding a Zoom meeting is an option, a self-hosted solution like Plug-N-Meet offers three transformative advantages for any serious WordPress site owner:</p>
<ol>
<li class=""><strong>You Own Your Brand:</strong> Every meeting happens on your own domain, with your logo and your colors. You're not providing free advertising for a SaaS giant; you're reinforcing your own brand's professionalism and trust.</li>
<li class=""><strong>You Control Your Data:</strong> All data—from user information to recordings—stays on your own server. This gives you absolute control over privacy and is critical for compliance in sensitive industries.</li>
<li class=""><strong>You Escape Per-User Pricing:</strong> Instead of paying a fee for every host on your team, you have a predictable, fixed cost for your server. This model rewards your growth instead of penalizing it.</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="the-3-step-guide-to-your-first-wordpress-meeting">The 3-Step Guide to Your First WordPress Meeting<a href="https://www.plugnmeet.org/blog/wordpress-video-conferencing-guide#the-3-step-guide-to-your-first-wordpress-meeting" class="hash-link" aria-label="Direct link to The 3-Step Guide to Your First WordPress Meeting" title="Direct link to The 3-Step Guide to Your First WordPress Meeting" translate="no">​</a></h3>
<p>Getting started is incredibly fast. You can have your first meeting room live in under 15 minutes.</p>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="step-1-install-the-engine-your-plug-n-meet-server">Step 1: Install the Engine (Your Plug-N-Meet Server)<a href="https://www.plugnmeet.org/blog/wordpress-video-conferencing-guide#step-1-install-the-engine-your-plug-n-meet-server" class="hash-link" aria-label="Direct link to Step 1: Install the Engine (Your Plug-N-Meet Server)" title="Direct link to Step 1: Install the Engine (Your Plug-N-Meet Server)" translate="no">​</a></h4>
<p>First, you need the server that will power your video calls. You can either self-host the open-source version with our <strong><a class="" href="https://www.plugnmeet.org/docs/installation">simple installation script</a></strong> or get an instant, managed server from <strong><a href="https://www.plugnmeet.cloud/" target="_blank" rel="noopener noreferrer" class="">plugnmeet Cloud</a></strong>. Both will provide you with an <strong>API Key</strong> and <strong>API Secret</strong>.</p>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="step-2-install-the-free-plug-n-meet-plugin">Step 2: Install the Free Plug-N-Meet Plugin<a href="https://www.plugnmeet.org/blog/wordpress-video-conferencing-guide#step-2-install-the-free-plug-n-meet-plugin" class="hash-link" aria-label="Direct link to Step 2: Install the Free Plug-N-Meet Plugin" title="Direct link to Step 2: Install the Free Plug-N-Meet Plugin" translate="no">​</a></h4>
<p>From your WordPress dashboard:</p>
<ol>
<li class="">Go to <strong>Plugins &gt; Add New</strong>.</li>
<li class="">Search for <strong>"plugnmeet"</strong>.</li>
<li class="">Click <strong>Install Now</strong>, then <strong>Activate</strong>.</li>
<li class="">Navigate to the new <strong>Plug-N-Meet &gt; Settings</strong> menu.</li>
<li class="">Enter your <strong>API Key</strong> and <strong>API Secret</strong> and save.</li>
</ol>
<p>Your WordPress site is now fully integrated with your video conferencing engine.</p>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="step-3-create-and-embed-your-room">Step 3: Create and Embed Your Room<a href="https://www.plugnmeet.org/blog/wordpress-video-conferencing-guide#step-3-create-and-embed-your-room" class="hash-link" aria-label="Direct link to Step 3: Create and Embed Your Room" title="Direct link to Step 3: Create and Embed Your Room" translate="no">​</a></h4>
<ol>
<li class="">Go to <strong>Plug-N-Meet &gt; Rooms</strong> and click <strong>Add New</strong>.</li>
<li class="">Configure your room's features (e.g., name, max participants, welcome message) and get the <strong>Room ID</strong>.</li>
<li class="">After saving, the plugin will generate a unique <strong>Shortcode</strong> for that room (e.g., <code>[plugnmeet_room_view id="your_room_id"]</code>).</li>
<li class="">Create a new WordPress Page, paste the shortcode into the content, and click <strong>Publish</strong>.</li>
</ol>
<p>That's it. You now have a fully functional, branded video conferencing room running directly on your own website.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="level-up-3-powerful-ways-to-use-video-on-your-wordpress-site">Level Up: 3 Powerful Ways to Use Video on Your WordPress Site<a href="https://www.plugnmeet.org/blog/wordpress-video-conferencing-guide#level-up-3-powerful-ways-to-use-video-on-your-wordpress-site" class="hash-link" aria-label="Direct link to Level Up: 3 Powerful Ways to Use Video on Your WordPress Site" title="Direct link to Level Up: 3 Powerful Ways to Use Video on Your WordPress Site" translate="no">​</a></h3>
<p>Once you've mastered the basics, you can leverage Plug-N-Meet to power a wide range of professional services.</p>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="use-case-1-the-private-coaching-or-consultation-room">Use Case 1: The Private Coaching or Consultation Room<a href="https://www.plugnmeet.org/blog/wordpress-video-conferencing-guide#use-case-1-the-private-coaching-or-consultation-room" class="hash-link" aria-label="Direct link to Use Case 1: The Private Coaching or Consultation Room" title="Direct link to Use Case 1: The Private Coaching or Consultation Room" translate="no">​</a></h4>
<p>Are you a coach, consultant, or therapist? You can easily create secure, private rooms for your client sessions.</p>
<ul>
<li class=""><strong>How to do it:</strong> Create a separate, password-protected page for each client. Embed the shortcode for a unique meeting room on that page. Only the person with the password can access the session, ensuring complete privacy.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="use-case-2-the-community-webinar-or-live-event">Use Case 2: The Community Webinar or Live Event<a href="https://www.plugnmeet.org/blog/wordpress-video-conferencing-guide#use-case-2-the-community-webinar-or-live-event" class="hash-link" aria-label="Direct link to Use Case 2: The Community Webinar or Live Event" title="Direct link to Use Case 2: The Community Webinar or Live Event" translate="no">​</a></h4>
<p>Want to host a webinar for your audience? Plug-N-Meet is a powerful open-source webinar platform.</p>
<ul>
<li class=""><strong>How to do it:</strong> Create a room and configure its features specifically for a webinar. In the room settings, you can disable webcams and microphones for attendees by default, enable <strong>Cloud Recording</strong>, and use features like <strong>Polling</strong> and <strong>Raise Hand</strong> to manage audience interaction. Embed the room's shortcode on your "Events" page and you're ready to go live.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="use-case-3-the-monetized-membership-site">Use Case 3: The Monetized Membership Site<a href="https://www.plugnmeet.org/blog/wordpress-video-conferencing-guide#use-case-3-the-monetized-membership-site" class="hash-link" aria-label="Direct link to Use Case 3: The Monetized Membership Site" title="Direct link to Use Case 3: The Monetized Membership Site" translate="no">​</a></h4>
<p>This is where you can turn your video feature into a revenue stream. By combining Plug-N-Meet with a popular membership plugin (like Paid Memberships Pro, MemberPress, or Restrict Content Pro), you can create premium video content exclusively for paying subscribers. For a detailed walkthrough of this business model, see our guide on <strong><a class="" href="https://www.plugnmeet.org/blog/no-code-video-conferencing-service-with-wordpress">How to Launch Your Own No-Code Video Conferencing Service with WordPress</a></strong>.</p>
<ul>
<li class=""><strong>How to do it:</strong>
<ol>
<li class="">Use your membership plugin to create a "Premium" subscription tier.</li>
<li class="">Create a new WordPress page for your premium content (e.g., "Weekly Mastermind Call").</li>
<li class="">Paste the Plug-N-Meet room shortcode onto this page.</li>
<li class="">Use your membership plugin's settings to <strong>restrict access</strong> to this page so that only users with an active "Premium" subscription can view it.</li>
</ol>
</li>
</ul>
<p>Now, you have a secure, automated paywall for your exclusive video content.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="unlocking-advanced-features-ai-and-zero-trust-security">Unlocking Advanced Features: AI and Zero-Trust Security<a href="https://www.plugnmeet.org/blog/wordpress-video-conferencing-guide#unlocking-advanced-features-ai-and-zero-trust-security" class="hash-link" aria-label="Direct link to Unlocking Advanced Features: AI and Zero-Trust Security" title="Direct link to Unlocking Advanced Features: AI and Zero-Trust Security" translate="no">​</a></h3>
<p>The Plug-N-Meet WordPress plugin isn't just for basic meetings. It gives you simple, one-click access to enterprise-grade features directly from your room settings.</p>
<ul>
<li class=""><strong>AI-Powered Meeting Assistants:</strong> Imagine having every meeting automatically transcribed and summarized. With the AI features enabled, you can turn your conversations into actionable intelligence. Learn <strong><a class="" href="https://www.plugnmeet.org/blog/how-to-add-ai-meeting-assistant-features">how to add AI features</a></strong> with a simple toggle.</li>
<li class=""><strong>Zero-Trust Security:</strong> For telehealth, legal consultations, or any conversation requiring absolute confidentiality, you can enable End-to-End Encryption (E2EE). This ensures that not even your server can access the meeting's content. Discover more about our <strong><a class="" href="https://www.plugnmeet.org/blog/privacy-by-design-zero-trust">privacy-by-design philosophy</a></strong>.</li>
</ul>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="conclusion-the-professional-video-solution-wordpress-deserves">Conclusion: The Professional Video Solution WordPress Deserves<a href="https://www.plugnmeet.org/blog/wordpress-video-conferencing-guide#conclusion-the-professional-video-solution-wordpress-deserves" class="hash-link" aria-label="Direct link to Conclusion: The Professional Video Solution WordPress Deserves" title="Direct link to Conclusion: The Professional Video Solution WordPress Deserves" translate="no">​</a></h3>
<p>Stop treating live video as an afterthought. With Plug-N-Meet, you can seamlessly integrate a secure, scalable, and fully-branded video conferencing platform into the WordPress ecosystem you already know and love.</p>
<p>It's a solution that's simple enough to start in minutes but powerful enough to grow with your biggest ambitions.</p>
<hr>
<p><strong>Ready to power up your WordPress site?</strong></p>
<ul>
<li class=""><strong><a href="https://wordpress.org/plugins/plugnmeet/" target="_blank" rel="noopener noreferrer" class="">Download the official WordPress Plugin</a></strong></li>
<li class=""><strong><a href="https://demo.plugnmeet.com/landing.html" target="_blank" rel="noopener noreferrer" class="">Try the Live Demo</a> to see all the features in action.</strong></li>
<li class=""><strong>Follow our <a class="" href="https://www.plugnmeet.org/docs/installation">Installation Guide</a> to get your server running.</strong></li>
</ul>]]></content:encoded>
            <category>wordpress</category>
            <category>video-conferencing</category>
            <category>plugin</category>
            <category>no-code</category>
            <category>webinar</category>
            <category>coaching</category>
            <category>membership</category>
            <category>wordpress-video-conferencing</category>
        </item>
        <item>
            <title><![CDATA[A Developer's Guide to Building a Custom Video Chat UI with Plug-N-Meet's Headless API]]></title>
            <link>https://www.plugnmeet.org/blog/developer-guide-custom-video-chat-ui-headless-api</link>
            <guid>https://www.plugnmeet.org/blog/developer-guide-custom-video-chat-ui-headless-api</guid>
            <pubDate>Sat, 07 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[You've successfully integrated Plug-N-Meet into your application. You can create rooms, generate join tokens, and embed the client in an `. It's fast and it works. But now you want to go deeper. You want to break out of the ` box and build a truly seamless user experience where the video client feels like a native part of your application's UI.]]></description>
            <content:encoded><![CDATA[<p>You've successfully integrated Plug-N-Meet into your application. You can create rooms, generate join tokens, and embed the client in an <code>&lt;iframe&gt;</code>. It's fast and it works. But now you want to go deeper. You want to break out of the <code>&lt;iframe&gt;</code> box and build a truly seamless user experience where the video client feels like a native part of your application's UI.</p>
<p>This is where Plug-N-Meet's "headless" integration mode comes in.</p>
<p>This guide is for developers who want to move beyond basic embedding. We'll show you how to use the powerful <code>getClientFiles</code> API to render the Plug-N-Meet client directly into your own page's DOM, giving you ultimate control over layout, branding, and the user experience.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="the-problem-with-iframes">The Problem with Iframes<a href="https://www.plugnmeet.org/blog/developer-guide-custom-video-chat-ui-headless-api#the-problem-with-iframes" class="hash-link" aria-label="Direct link to The Problem with Iframes" title="Direct link to The Problem with Iframes" translate="no">​</a></h3>
<p>An <code>&lt;iframe&gt;</code> is a simple way to embed content, but it's essentially a "window" into another website. This creates several limitations for developers aiming for a professional, deeply integrated product:</p>
<ul>
<li class=""><strong>The Black Box:</strong> The <code>&lt;iframe&gt;</code> creates a hard boundary between your parent application and the video client, making communication between them complex and limited.</li>
<li class=""><strong>Layout Restrictions:</strong> You are stuck with the layout provided by the <code>src</code> URL. You can't easily place your own application's components (like a custom header or a sidebar with user data) "inside" the video experience.</li>
<li class=""><strong>Styling and Branding:</strong> While you can pass some branding parameters, your ability to deeply customize the look and feel is limited.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="the-solution-headless-integration-with-getclientfiles">The Solution: Headless Integration with <code>getClientFiles</code><a href="https://www.plugnmeet.org/blog/developer-guide-custom-video-chat-ui-headless-api#the-solution-headless-integration-with-getclientfiles" class="hash-link" aria-label="Direct link to the-solution-headless-integration-with-getclientfiles" title="Direct link to the-solution-headless-integration-with-getclientfiles" translate="no">​</a></h3>
<p>The <code>getClientFiles</code> API is the key to unlocking a truly "headless" video integration. Instead of providing you with a URL to embed, it gives you a list of the exact CSS and JavaScript assets you need to render the client yourself.</p>
<p>This approach transforms Plug-N-Meet from a separate application into a UI component library that you control.</p>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="the-three-step-workflow">The Three-Step Workflow<a href="https://www.plugnmeet.org/blog/developer-guide-custom-video-chat-ui-headless-api#the-three-step-workflow" class="hash-link" aria-label="Direct link to The Three-Step Workflow" title="Direct link to The Three-Step Workflow" translate="no">​</a></h4>
<p>The logic is simple and can be implemented in any backend language (PHP, Node.js, Python, etc.).</p>
<ol>
<li class=""><strong>Your Backend Fetches the Asset List:</strong> Your server makes a secure, server-to-server API call to the <code>/auth/getClientFiles</code> endpoint.</li>
<li class=""><strong>Plug-N-Meet Responds with a JSON Object:</strong> This object contains two arrays: <code>css</code> and <code>js</code>, listing the filenames of all the necessary assets.</li>
<li class=""><strong>Your Template Renders the <code>&lt;link&gt;</code> and <code>&lt;script&gt;</code> Tags:</strong> Your server-side templating engine loops through these arrays and dynamically injects the required tags into the HTML page that will be sent to the user's browser.</li>
</ol>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="a-practical-example-nodejs-with-ejs">A Practical Example (Node.js with EJS)<a href="https://www.plugnmeet.org/blog/developer-guide-custom-video-chat-ui-headless-api#a-practical-example-nodejs-with-ejs" class="hash-link" aria-label="Direct link to A Practical Example (Node.js with EJS)" title="Direct link to A Practical Example (Node.js with EJS)" translate="no">​</a></h3>
<p>Let's walk through a simplified example using Node.js and the EJS templating engine.</p>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="step-1-the-backend-route-eg-in-serverjs">Step 1: The Backend Route (e.g., in <code>server.js</code>)<a href="https://www.plugnmeet.org/blog/developer-guide-custom-video-chat-ui-headless-api#step-1-the-backend-route-eg-in-serverjs" class="hash-link" aria-label="Direct link to step-1-the-backend-route-eg-in-serverjs" title="Direct link to step-1-the-backend-route-eg-in-serverjs" translate="no">​</a></h4>
<p>This route will handle the API calls and render the final page.</p>
<div class="language-javascript codeBlockContainer_ZFFP theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_JM6y"><pre tabindex="0" class="prism-code language-javascript codeBlock_Gv80 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_N0jv"><div class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">express</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'express'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">PlugNmeet</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'plugnmeet-sdk-js'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> app </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">express</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">set</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'view engine'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'ejs'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Your Plug-N-Meet credentials (use environment variables in production)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">API_KEY</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'plugnmeet'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">API_SECRET</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'zumyyYWqv7KR2kUqvYdq4z4sXg7XTBD2ljT6'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">PLUGNMEET_URL</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'https://demo.plugnmeet.com'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> pnm </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">PlugNmeet</span><span class="token punctuation" style="color:#393A34">(</span><span class="token constant" style="color:#36acaa">PLUGNMEET_URL</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">API_KEY</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">API_SECRET</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'/meeting'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">req</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> res</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">try</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// 1. Get the asset files</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> clientFiles </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> pnm</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">getClientFiles</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// 2. Create a room and generate a join token for the user</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> room </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">room_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'my-custom-room'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">metadata</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token literal-property property" style="color:#36acaa">room_title</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'My Custom UI Room'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token literal-property property" style="color:#36acaa">room_features</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token literal-property property" style="color:#36acaa">allow_webcams</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token comment" style="color:#999988;font-style:italic">// ... other features</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> pnm</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">createRoom</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">room</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> joinToken </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> pnm</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">getJoinToken</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">room_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'my-custom-room'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">user_info</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token literal-property property" style="color:#36acaa">name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'John Doe'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token literal-property property" style="color:#36acaa">user_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'user-123'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// 3. Define dynamic branding options</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> designOptions </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">primary_color</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'#004D90'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">secondary_color</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'#24AEF7'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">custom_logo</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'https://my-app.com/logo.png'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// 4. Render the view, passing all the necessary data</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    res</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">render</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'meeting'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">plugnmeetUrl</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">PLUGNMEET_URL</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">clientFiles</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> clientFiles</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">res</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">accessToken</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> joinToken</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">res</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">token</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">designOptions</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token known-class-name class-name">JSON</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">stringify</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">designOptions</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">catch</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    res</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">status</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">500</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">send</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Error setting up meeting'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">listen</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">3000</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Server started on port 3000'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="step-2-the-frontend-template-eg-in-viewsmeetingejs">Step 2: The Frontend Template (e.g., in <code>views/meeting.ejs</code>)<a href="https://www.plugnmeet.org/blog/developer-guide-custom-video-chat-ui-headless-api#step-2-the-frontend-template-eg-in-viewsmeetingejs" class="hash-link" aria-label="Direct link to step-2-the-frontend-template-eg-in-viewsmeetingejs" title="Direct link to step-2-the-frontend-template-eg-in-viewsmeetingejs" translate="no">​</a></h4>
<p>This EJS file will take the data from the backend and construct the HTML page.</p>
<div class="language-html codeBlockContainer_ZFFP theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_JM6y"><pre tabindex="0" class="prism-code language-html codeBlock_Gv80 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_N0jv"><div class="token-line" style="color:#393A34"><span class="token doctype punctuation" style="color:#393A34;font-style:italic">&lt;!</span><span class="token doctype doctype-tag" style="color:#999988;font-style:italic">DOCTYPE</span><span class="token doctype" style="color:#999988;font-style:italic"> </span><span class="token doctype name" style="color:#999988;font-style:italic">html</span><span class="token doctype punctuation" style="color:#393A34;font-style:italic">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">html</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">lang</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">en</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">head</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">title</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">My Custom Video App</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">title</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- Dynamically inject CSS files --&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  &lt;% clientFiles.css.forEach(file =&gt; { %&gt;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">link</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">href</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">&lt;%= plugnmeetUrl %&gt;/assets/css/&lt;%= file %&gt;</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">rel</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">stylesheet</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  &lt;% }); %&gt;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- Inject essential window variables BEFORE loading scripts --&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">script</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">text/javascript</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript">    </span><span class="token script language-javascript dom variable" style="color:#36acaa">window</span><span class="token script language-javascript punctuation" style="color:#393A34">.</span><span class="token script language-javascript property-access">plugNmeetConfig</span><span class="token script language-javascript"> </span><span class="token script language-javascript operator" style="color:#393A34">=</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:#393A34">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript">      </span><span class="token script language-javascript comment" style="color:#999988;font-style:italic">// Required: The URL of your plugNmeet server.</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript">      </span><span class="token script language-javascript literal-property property" style="color:#36acaa">serverUrl</span><span class="token script language-javascript operator" style="color:#393A34">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:#e3116c">"&lt;%= plugnmeetUrl %&gt;"</span><span class="token script language-javascript punctuation" style="color:#393A34">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript">      </span><span class="token script language-javascript comment" style="color:#999988;font-style:italic">// Required: The public path to the assets directory.</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript">      </span><span class="token script language-javascript literal-property property" style="color:#36acaa">staticAssetsPath</span><span class="token script language-javascript operator" style="color:#393A34">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:#e3116c">"&lt;%= plugnmeetUrl %&gt;/assets"</span><span class="token script language-javascript punctuation" style="color:#393A34">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript">      </span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript">      </span><span class="token script language-javascript comment" style="color:#999988;font-style:italic">// Required: Pass the design customization options.</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript">      </span><span class="token script language-javascript literal-property property" style="color:#36acaa">designCustomization</span><span class="token script language-javascript operator" style="color:#393A34">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript operator" style="color:#393A34">&lt;</span><span class="token script language-javascript operator" style="color:#393A34">%</span><span class="token script language-javascript operator" style="color:#393A34">-</span><span class="token script language-javascript"> designOptions </span><span class="token script language-javascript operator" style="color:#393A34">%</span><span class="token script language-javascript operator" style="color:#393A34">&gt;</span><span class="token script language-javascript punctuation" style="color:#393A34">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript">      </span><span class="token script language-javascript comment" style="color:#999988;font-style:italic">// Optional: Add any other custom configurations.</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript">      </span><span class="token script language-javascript comment" style="color:#999988;font-style:italic">// See: https://github.com/mynaparrot/plugNmeet-client/blob/main/src/assets/config_sample.js</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript">      </span><span class="token script language-javascript literal-property property" style="color:#36acaa">enableSimulcast</span><span class="token script language-javascript operator" style="color:#393A34">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript boolean" style="color:#36acaa">true</span><span class="token script language-javascript punctuation" style="color:#393A34">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript">      </span><span class="token script language-javascript literal-property property" style="color:#36acaa">enableDynacast</span><span class="token script language-javascript operator" style="color:#393A34">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript boolean" style="color:#36acaa">true</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript">    </span><span class="token script language-javascript punctuation" style="color:#393A34">}</span><span class="token script language-javascript punctuation" style="color:#393A34">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">script</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">head</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">body</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- Your Custom Application UI --&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">header</span><span class="token tag" style="color:#00009f"> </span><span class="token tag special-attr attr-name" style="color:#00a4db">style</span><span class="token tag special-attr attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag special-attr attr-value punctuation" style="color:#393A34">"</span><span class="token tag special-attr attr-value value css language-css property" style="color:#36acaa">background</span><span class="token tag special-attr attr-value value css language-css punctuation" style="color:#393A34">:</span><span class="token tag special-attr attr-value value css language-css" style="color:#e3116c"> </span><span class="token tag special-attr attr-value value css language-css hexcode color" style="color:#e3116c">#0A1929</span><span class="token tag special-attr attr-value value css language-css punctuation" style="color:#393A34">;</span><span class="token tag special-attr attr-value value css language-css" style="color:#e3116c"> </span><span class="token tag special-attr attr-value value css language-css property" style="color:#36acaa">color</span><span class="token tag special-attr attr-value value css language-css punctuation" style="color:#393A34">:</span><span class="token tag special-attr attr-value value css language-css" style="color:#e3116c"> </span><span class="token tag special-attr attr-value value css language-css color" style="color:#e3116c">white</span><span class="token tag special-attr attr-value value css language-css punctuation" style="color:#393A34">;</span><span class="token tag special-attr attr-value value css language-css" style="color:#e3116c"> </span><span class="token tag special-attr attr-value value css language-css property" style="color:#36acaa">padding</span><span class="token tag special-attr attr-value value css language-css punctuation" style="color:#393A34">:</span><span class="token tag special-attr attr-value value css language-css" style="color:#e3116c"> </span><span class="token tag special-attr attr-value value css language-css number" style="color:#36acaa">1</span><span class="token tag special-attr attr-value value css language-css unit" style="color:#e3116c">rem</span><span class="token tag special-attr attr-value value css language-css punctuation" style="color:#393A34">;</span><span class="token tag special-attr attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">h1</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">My Application Header</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">h1</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">header</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">div</span><span class="token tag" style="color:#00009f"> </span><span class="token tag special-attr attr-name" style="color:#00a4db">style</span><span class="token tag special-attr attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag special-attr attr-value punctuation" style="color:#393A34">"</span><span class="token tag special-attr attr-value value css language-css property" style="color:#36acaa">display</span><span class="token tag special-attr attr-value value css language-css punctuation" style="color:#393A34">:</span><span class="token tag special-attr attr-value value css language-css" style="color:#e3116c"> flex</span><span class="token tag special-attr attr-value value css language-css punctuation" style="color:#393A34">;</span><span class="token tag special-attr attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- The Plug-N-Meet client will mount itself in this div --&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">div</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">id</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">plugNmeet-app</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag special-attr attr-name" style="color:#00a4db">style</span><span class="token tag special-attr attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag special-attr attr-value punctuation" style="color:#393A34">"</span><span class="token tag special-attr attr-value value css language-css property" style="color:#36acaa">flex-grow</span><span class="token tag special-attr attr-value value css language-css punctuation" style="color:#393A34">:</span><span class="token tag special-attr attr-value value css language-css" style="color:#e3116c"> </span><span class="token tag special-attr attr-value value css language-css number" style="color:#36acaa">1</span><span class="token tag special-attr attr-value value css language-css punctuation" style="color:#393A34">;</span><span class="token tag special-attr attr-value value css language-css" style="color:#e3116c"> </span><span class="token tag special-attr attr-value value css language-css property" style="color:#36acaa">height</span><span class="token tag special-attr attr-value value css language-css punctuation" style="color:#393A34">:</span><span class="token tag special-attr attr-value value css language-css" style="color:#e3116c"> </span><span class="token tag special-attr attr-value value css language-css number" style="color:#36acaa">90</span><span class="token tag special-attr attr-value value css language-css unit" style="color:#e3116c">vh</span><span class="token tag special-attr attr-value value css language-css punctuation" style="color:#393A34">;</span><span class="token tag special-attr attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- Your Custom Application Sidebar --&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">aside</span><span class="token tag" style="color:#00009f"> </span><span class="token tag special-attr attr-name" style="color:#00a4db">style</span><span class="token tag special-attr attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag special-attr attr-value punctuation" style="color:#393A34">"</span><span class="token tag special-attr attr-value value css language-css property" style="color:#36acaa">width</span><span class="token tag special-attr attr-value value css language-css punctuation" style="color:#393A34">:</span><span class="token tag special-attr attr-value value css language-css" style="color:#e3116c"> </span><span class="token tag special-attr attr-value value css language-css number" style="color:#36acaa">250</span><span class="token tag special-attr attr-value value css language-css unit" style="color:#e3116c">px</span><span class="token tag special-attr attr-value value css language-css punctuation" style="color:#393A34">;</span><span class="token tag special-attr attr-value value css language-css" style="color:#e3116c"> </span><span class="token tag special-attr attr-value value css language-css property" style="color:#36acaa">background</span><span class="token tag special-attr attr-value value css language-css punctuation" style="color:#393A34">:</span><span class="token tag special-attr attr-value value css language-css" style="color:#e3116c"> </span><span class="token tag special-attr attr-value value css language-css hexcode color" style="color:#e3116c">#f4f4f4</span><span class="token tag special-attr attr-value value css language-css punctuation" style="color:#393A34">;</span><span class="token tag special-attr attr-value value css language-css" style="color:#e3116c"> </span><span class="token tag special-attr attr-value value css language-css property" style="color:#36acaa">padding</span><span class="token tag special-attr attr-value value css language-css punctuation" style="color:#393A34">:</span><span class="token tag special-attr attr-value value css language-css" style="color:#e3116c"> </span><span class="token tag special-attr attr-value value css language-css number" style="color:#36acaa">1</span><span class="token tag special-attr attr-value value css language-css unit" style="color:#e3116c">rem</span><span class="token tag special-attr attr-value value css language-css punctuation" style="color:#393A34">;</span><span class="token tag special-attr attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">h2</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Meeting Notes</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">h2</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">p</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">This sidebar is part of my parent application!</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">p</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">aside</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- Dynamically inject JavaScript files --&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  &lt;% clientFiles.js.forEach(file =&gt; { %&gt;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    &lt;% if (file.startsWith('main-module.')) { %&gt;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">script</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">src</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">&lt;%= plugnmeetUrl %&gt;/assets/js/&lt;%= file %&gt;</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">module</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">script</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    &lt;% } else { %&gt;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">script</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">src</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">&lt;%= plugnmeetUrl %&gt;/assets/js/&lt;%= file %&gt;</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">defer</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">script</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    &lt;% } %&gt;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  &lt;% }); %&gt;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">script</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript">    </span><span class="token script language-javascript comment" style="color:#999988;font-style:italic">// Add the access token to the URL without reloading the page</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript">    </span><span class="token script language-javascript keyword" style="color:#00009f">const</span><span class="token script language-javascript"> url </span><span class="token script language-javascript operator" style="color:#393A34">=</span><span class="token script language-javascript"> </span><span class="token script language-javascript keyword" style="color:#00009f">new</span><span class="token script language-javascript"> </span><span class="token script language-javascript class-name">URL</span><span class="token script language-javascript punctuation" style="color:#393A34">(</span><span class="token script language-javascript dom variable" style="color:#36acaa">window</span><span class="token script language-javascript punctuation" style="color:#393A34">.</span><span class="token script language-javascript property-access">location</span><span class="token script language-javascript punctuation" style="color:#393A34">)</span><span class="token script language-javascript punctuation" style="color:#393A34">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript">    url</span><span class="token script language-javascript punctuation" style="color:#393A34">.</span><span class="token script language-javascript property-access">searchParams</span><span class="token script language-javascript punctuation" style="color:#393A34">.</span><span class="token script language-javascript method function property-access" style="color:#d73a49">set</span><span class="token script language-javascript punctuation" style="color:#393A34">(</span><span class="token script language-javascript string" style="color:#e3116c">'access_token'</span><span class="token script language-javascript punctuation" style="color:#393A34">,</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:#e3116c">'&lt;%= accessToken %&gt;'</span><span class="token script language-javascript punctuation" style="color:#393A34">)</span><span class="token script language-javascript punctuation" style="color:#393A34">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript">    </span><span class="token script language-javascript dom variable" style="color:#36acaa">window</span><span class="token script language-javascript punctuation" style="color:#393A34">.</span><span class="token script language-javascript property-access">history</span><span class="token script language-javascript punctuation" style="color:#393A34">.</span><span class="token script language-javascript method function property-access" style="color:#d73a49">pushState</span><span class="token script language-javascript punctuation" style="color:#393A34">(</span><span class="token script language-javascript punctuation" style="color:#393A34">{</span><span class="token script language-javascript punctuation" style="color:#393A34">}</span><span class="token script language-javascript punctuation" style="color:#393A34">,</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:#e3116c">''</span><span class="token script language-javascript punctuation" style="color:#393A34">,</span><span class="token script language-javascript"> url</span><span class="token script language-javascript punctuation" style="color:#393A34">)</span><span class="token script language-javascript punctuation" style="color:#393A34">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#393A34"><span class="token script language-javascript">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">script</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">body</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">html</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="the-result-a-truly-integrated-experience">The Result: A Truly Integrated Experience<a href="https://www.plugnmeet.org/blog/developer-guide-custom-video-chat-ui-headless-api#the-result-a-truly-integrated-experience" class="hash-link" aria-label="Direct link to The Result: A Truly Integrated Experience" title="Direct link to The Result: A Truly Integrated Experience" translate="no">​</a></h3>
<p>When a user visits <code>/meeting</code>, they will see your application's custom header and sidebar, with the Plug-N-Meet video client rendered seamlessly in the middle. The client will be styled with the dynamic brand colors you passed from the backend.</p>
<p>You have successfully broken out of the <code>&lt;iframe&gt;</code> box.</p>
<p>From here, the possibilities are endless. You can use your own application's state to interact with the meeting, build custom layouts that respond to meeting events, and create a user experience that is completely unique to your product.</p>
<p>This is the true power of a headless, API-first platform. It gives you the building blocks not just to add a feature, but to build a deeply integrated and professional product.</p>
<hr>
<p><strong>Ready to build your custom UI?</strong></p>
<ul>
<li class=""><strong>Review the full <a class="" href="https://www.plugnmeet.org/docs/api/get-client-files"><code>getClientFiles</code> API Documentation</a>.</strong></li>
<li class=""><strong>Explore our <a class="" href="https://www.plugnmeet.org/docs/developer-guide/design-customisation">Design Customization Guide</a> for more branding options.</strong></li>
<li class=""><strong>Check out our official <a href="https://github.com/mynaparrot/plugNmeet-sdk-js" target="_blank" rel="noopener noreferrer" class="">JavaScript SDK</a> to simplify your backend code.</strong></li>
</ul>]]></content:encoded>
            <category>developer</category>
            <category>tutorial</category>
            <category>how-to</category>
            <category>api</category>
            <category>headless</category>
            <category>getClientFiles</category>
            <category>white-label</category>
            <category>customization</category>
            <category>javascript</category>
        </item>
        <item>
            <title><![CDATA[Scaling Your Video Service: How Plug-N-Meet's Architecture Saves You Money]]></title>
            <link>https://www.plugnmeet.org/blog/scaling-architecture-saves-money</link>
            <guid>https://www.plugnmeet.org/blog/scaling-architecture-saves-money</guid>
            <pubDate>Sat, 31 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Your video service is a hit. User numbers are climbing, and engagement is high. But as you celebrate your success, a new problem emerges: your server bill is exploding. To keep up with demand, you keep buying bigger and bigger servers, paying a premium for resources that sit idle most of the day.]]></description>
            <content:encoded><![CDATA[<p>Your video service is a hit. User numbers are climbing, and engagement is high. But as you celebrate your success, a new problem emerges: your server bill is exploding. To keep up with demand, you keep buying bigger and bigger servers, paying a premium for resources that sit idle most of the day.</p>
<p>What went wrong? You've fallen into the monolith trap.</p>
<p>This post explains how Plug-N-Meet's modern, decoupled architecture is designed to prevent this exact problem, enabling you to scale your service efficiently and control your costs. For a business, this isn't just a technical detail—it's a core financial advantage.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="the-monolith-trap-paying-for-empty-seats">The Monolith Trap: Paying for Empty Seats<a href="https://www.plugnmeet.org/blog/scaling-architecture-saves-money#the-monolith-trap-paying-for-empty-seats" class="hash-link" aria-label="Direct link to The Monolith Trap: Paying for Empty Seats" title="Direct link to The Monolith Trap: Paying for Empty Seats" translate="no">​</a></h3>
<p>Many traditional video conferencing platforms are built as <strong>monoliths</strong>. This means the core application, the media processing, and the recording services are all bundled into a single, massive application.</p>
<p>This creates a huge problem when it's time to scale:</p>
<ul>
<li class=""><strong>If you need to support more concurrent users</strong>, you have to upgrade the <em>entire</em> server, even if your recording service is barely being used.</li>
<li class=""><strong>If a few large recording jobs are using all the CPU</strong>, your live meetings will lag and stutter, forcing you to buy a bigger server just to handle a temporary workload.</li>
</ul>
<p>A monolithic server is like renting a giant bus for a single passenger. You pay for all the empty seats, and if one part of the bus breaks down, the whole trip is canceled.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="the-plug-n-meet-way-a-decoupled-intelligent-architecture">The Plug-N-Meet Way: A Decoupled, Intelligent Architecture<a href="https://www.plugnmeet.org/blog/scaling-architecture-saves-money#the-plug-n-meet-way-a-decoupled-intelligent-architecture" class="hash-link" aria-label="Direct link to The Plug-N-Meet Way: A Decoupled, Intelligent Architecture" title="Direct link to The Plug-N-Meet Way: A Decoupled, Intelligent Architecture" translate="no">​</a></h3>
<p>Plug-N-Meet was designed from the ground up to avoid this trap. It is not one giant application; it is a set of specialized, independent services that work together.</p>
<p>The three core components are:</p>
<ol>
<li class=""><strong><code>plugnmeet-server</code> (The Brain):</strong> A lightweight Go application that handles all the API calls, authentication, and business logic.</li>
<li class=""><strong><code>LiveKit</code> (The Media Highway):</strong> A high-performance, open-source media server that manages all the real-time audio and video traffic.</li>
<li class=""><strong><code>plugnmeet-recorder</code> (The Factory):</strong> A dedicated Go application that handles CPU-intensive tasks like MP4 recording and RTMP broadcasting.</li>
</ol>
<p>These components are designed to be scaled <strong>independently</strong>. This is the key to cost-effective growth.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="benefit-1-scale-only-what-you-need-elastic-scaling">Benefit 1: Scale Only What You Need (Elastic Scaling)<a href="https://www.plugnmeet.org/blog/scaling-architecture-saves-money#benefit-1-scale-only-what-you-need-elastic-scaling" class="hash-link" aria-label="Direct link to Benefit 1: Scale Only What You Need (Elastic Scaling)" title="Direct link to Benefit 1: Scale Only What You Need (Elastic Scaling)" translate="no">​</a></h3>
<p>With a decoupled architecture, you can scale each component based on your actual needs.</p>
<ul>
<li class=""><strong>Expecting a huge webinar?</strong> You don't need to touch your main application server. Simply spin up a few extra <code>LiveKit</code> media servers for the duration of the event, then spin them down afterward.</li>
<li class=""><strong>Seeing more users in a specific region?</strong> Deploy media servers in that geographic area to reduce latency, without having to replicate your entire backend.</li>
</ul>
<p>This is like adding more cashiers to a store only during the holiday rush. You get the performance you need when you need it, and you don't pay for idle resources during quiet periods.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="benefit-2-isolate-your-workloads-improved-quality-of-service">Benefit 2: Isolate Your Workloads (Improved Quality of Service)<a href="https://www.plugnmeet.org/blog/scaling-architecture-saves-money#benefit-2-isolate-your-workloads-improved-quality-of-service" class="hash-link" aria-label="Direct link to Benefit 2: Isolate Your Workloads (Improved Quality of Service)" title="Direct link to Benefit 2: Isolate Your Workloads (Improved Quality of Service)" translate="no">​</a></h3>
<p>In a monolith, a resource-hungry task can degrade the entire user experience. If someone starts a large recording, everyone's live video call could suffer.</p>
<p>Plug-N-Meet's architecture prevents this. Because the <code>plugnmeet-recorder</code> is a separate service, you can run it on entirely different machines from your live media servers.</p>
<ul>
<li class=""><strong>The Result:</strong> A CPU-intensive MP4 transcoding job will have <strong>zero impact</strong> on the quality and stability of your live meetings.</li>
<li class=""><strong>The Benefit:</strong> Your users always get a smooth, high-quality experience, which is critical for customer satisfaction and retention.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_y2Co" id="conclusion-a-lower-total-cost-of-ownership-tco">Conclusion: A Lower Total Cost of Ownership (TCO)<a href="https://www.plugnmeet.org/blog/scaling-architecture-saves-money#conclusion-a-lower-total-cost-of-ownership-tco" class="hash-link" aria-label="Direct link to Conclusion: A Lower Total Cost of Ownership (TCO)" title="Direct link to Conclusion: A Lower Total Cost of Ownership (TCO)" translate="no">​</a></h2>
<p>"Scalable" isn't just a technical buzzword; it's a business feature. The ability to scale components independently and isolate workloads means you are not constantly over-provisioning your hardware. You pay only for the resources you actually use.</p>
<p>As your platform grows, this intelligent design leads to a dramatically <strong>lower Total Cost of Ownership (TCO)</strong> compared to a monolithic solution. You can grow your user base sustainably without your infrastructure costs spiraling out of control.</p>
<p>Plug-N-Meet's architecture isn't just a technical implementation detail; it's a strategic advantage designed to help your business succeed at scale.</p>
<hr>
<p><strong>Ready to learn more about scaling?</strong></p>
<ul>
<li class=""><strong>Read our detailed <a class="" href="https://www.plugnmeet.org/docs/developer-guide/scalable-setup">Scalable Deployment Guide</a></strong></li>
<li class=""><strong>Dive deep into our <a class="" href="https://www.plugnmeet.org/blog/backend-architecture-deep-dive">Backend Architecture</a></strong></li>
<li class=""><strong>Get started with the <a class="" href="https://www.plugnmeet.org/docs/installation">Installation Guide</a></strong></li>
</ul>]]></content:encoded>
            <category>scaling</category>
            <category>architecture</category>
            <category>tco</category>
            <category>cost-saving</category>
            <category>self-hosting</category>
            <category>business</category>
            <category>developer</category>
        </item>
        <item>
            <title><![CDATA[Beyond the Record Button: A Guide to Managing and Using Your Meeting Recordings]]></title>
            <link>https://www.plugnmeet.org/blog/guide-to-managing-meeting-recordings</link>
            <guid>https://www.plugnmeet.org/blog/guide-to-managing-meeting-recordings</guid>
            <pubDate>Sat, 24 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[For many platforms, the "record" button is the end of the story. You get an MP4 file, and that's it. But what if your recordings could be more? What if they could be a structured, searchable, and accessible content library for your students, your team, or your customers?]]></description>
            <content:encoded><![CDATA[<p>For many platforms, the "record" button is the end of the story. You get an MP4 file, and that's it. But what if your recordings could be more? What if they could be a structured, searchable, and accessible content library for your students, your team, or your customers?</p>
<p>With Plug-N-Meet's powerful API, your recordings aren't just video files; they are programmable assets.</p>
<p>This guide will show you how to move beyond simply recording a meeting and start building a true content management system using the Recordings API. We'll cover how to find your recordings, enrich them with metadata, and even attach subtitles.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_y2Co" id="the-goal">The Goal<a href="https://www.plugnmeet.org/blog/guide-to-managing-meeting-recordings#the-goal" class="hash-link" aria-label="Direct link to The Goal" title="Direct link to The Goal" translate="no">​</a></h2>
<p>By the end of this guide, you will be able to programmatically manage your entire recording lifecycle, turning a simple list of video files into a rich, queryable content library.</p>
<h2 class="anchor anchorTargetStickyNavbar_y2Co" id="prerequisites">Prerequisites<a href="https://www.plugnmeet.org/blog/guide-to-managing-meeting-recordings#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites" translate="no">​</a></h2>
<ul>
<li class="">A running Plug-N-Meet server.</li>
<li class="">Basic familiarity with making API calls (we'll use <code>cURL</code> for the examples).</li>
<li class="">Your Plug-N-Meet <code>API_KEY</code> and <code>API_SECRET</code>.</li>
</ul>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="step-1-enable-cloud-recording">Step 1: Enable Cloud Recording<a href="https://www.plugnmeet.org/blog/guide-to-managing-meeting-recordings#step-1-enable-cloud-recording" class="hash-link" aria-label="Direct link to Step 1: Enable Cloud Recording" title="Direct link to Step 1: Enable Cloud Recording" translate="no">​</a></h3>
<p>First, you need to ensure your meetings are being recorded. You can do this on a per-room basis when you create it. In your <code>createRoom</code> API call, include the <code>recording_features</code> block and set <code>is_allow_cloud</code> to <code>true</code>.</p>
<p>For a "record by default" experience, you can also enable <code>enable_auto_cloud_recording</code>.</p>
<div class="language-json codeBlockContainer_ZFFP theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_JM6y"><pre tabindex="0" class="prism-code language-json codeBlock_Gv80 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_N0jv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"room_id"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"my-recorded-session"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"metadata"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"room_features"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// ... other features</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"recording_features"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">"is_allow"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">"is_allow_cloud"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">"enable_auto_cloud_recording"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="step-2-find-your-recordings">Step 2: Find Your Recordings<a href="https://www.plugnmeet.org/blog/guide-to-managing-meeting-recordings#step-2-find-your-recordings" class="hash-link" aria-label="Direct link to Step 2: Find Your Recordings" title="Direct link to Step 2: Find Your Recordings" translate="no">​</a></h3>
<p>After your meetings are over, the first step is to get a list of your available recordings. You can do this using the <code>recording/fetch</code> endpoint. You can fetch recordings for one or more specific rooms by providing their IDs in the <code>room_ids</code> array.</p>
<p>This call will return a paginated list of all recordings for the specified room(s).</p>
<div class="language-bash codeBlockContainer_ZFFP theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_JM6y"><pre tabindex="0" class="prism-code language-bash codeBlock_Gv80 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_N0jv"><div class="token-line" style="color:#393A34"><span class="token plain"># The raw JSON body as a string</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">BODY='{"room_ids":["room01"],"from":0,"limit":20,"order_by":"DESC"}'</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Your API credentials</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">API_KEY="YOUR_API_KEY"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SECRET="YOUR_API_SECRET"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Generate the HMAC-SHA256 signature</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SIGNATURE=$(echo -n "$BODY" | openssl dgst -sha256 -mac HMAC -macopt key:"$SECRET" | awk '{print $2}')</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Make the POST request</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">curl -X POST https://YOUR_SERVER_URL/auth/recording/fetch \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -H "Content-Type: application/json" \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -H "API-KEY: $API_KEY" \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -H "HASH-SIGNATURE: $SIGNATURE" \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -d "$BODY"</span><br></div></code></pre></div></div>
<p>The response will give you a list that includes the <code>record_id</code>, <code>room_id</code>, <code>file_size</code>, and <code>creation_time</code> for each recording—the essential building blocks for your content library.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="step-3-make-your-recordings-discoverable-with-metadata">Step 3: Make Your Recordings Discoverable with Metadata<a href="https://www.plugnmeet.org/blog/guide-to-managing-meeting-recordings#step-3-make-your-recordings-discoverable-with-metadata" class="hash-link" aria-label="Direct link to Step 3: Make Your Recordings Discoverable with Metadata" title="Direct link to Step 3: Make Your Recordings Discoverable with Metadata" translate="no">​</a></h3>
<p>A filename like <code>rec_123.mp4</code> isn't very helpful. To make your recordings useful, you need to add context. The <code>recording/update-metadata</code> endpoint allows you to add a descriptive title, a detailed description, and even your own custom data.</p>
<p>Let's say you just finished a "Q4 Marketing Sync" and you want to tag it appropriately.</p>
<div class="language-bash codeBlockContainer_ZFFP theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_JM6y"><pre tabindex="0" class="prism-code language-bash codeBlock_Gv80 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_N0jv"><div class="token-line" style="color:#393A34"><span class="token plain"># The raw JSON body as a string</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">BODY='{"record_id":"f031a270-20ab-433d-96e9-aed34db97c0a-1761814595173","metadata":{"title":"Q4 Marketing Sync - Final Strategy","description":"A detailed review of the Q4 marketing plan, including budget allocation and final campaign targets.","extra_data":{"department":"Marketing","quarter":"Q4-2025","is_public":"true"}}}'</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Your API credentials</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">API_KEY="YOUR_API_KEY"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SECRET="YOUR_API_SECRET"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Generate the HMAC-SHA256 signature</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SIGNATURE=$(echo -n "$BODY" | openssl dgst -sha256 -mac HMAC -macopt key:"$SECRET" | awk '{print $2}')</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Make the POST request</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">curl -X POST https://YOUR_SERVER_URL/auth/recording/update-metadata \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -H "Content-Type: application/json" \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -H "API-KEY: $API_KEY" \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -H "HASH-SIGNATURE: $SIGNATURE" \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -d "$BODY"</span><br></div></code></pre></div></div>
<p>Now, when you fetch this recording, it will come with rich, structured data. You can use the <code>extra_data</code> field to build powerful filtering and search features in your own application (e.g., "show me all recordings from the Marketing department").</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="step-4-bonus-attach-subtitles-and-summaries">Step 4 (Bonus): Attach Subtitles and Summaries<a href="https://www.plugnmeet.org/blog/guide-to-managing-meeting-recordings#step-4-bonus-attach-subtitles-and-summaries" class="hash-link" aria-label="Direct link to Step 4 (Bonus): Attach Subtitles and Summaries" title="Direct link to Step 4 (Bonus): Attach Subtitles and Summaries" translate="no">​</a></h3>
<p>If you used the <strong>AI Meeting Assistant</strong> during your meeting, you can link the generated transcription file directly to your recording's metadata.</p>
<ol>
<li class="">First, use the <code>artifacts/fetch</code> API to get the URL of the VTT subtitle file.</li>
<li class="">Then, call <code>recording/update-metadata</code> again, this time adding a <code>subtitles</code> map.</li>
</ol>
<div class="language-bash codeBlockContainer_ZFFP theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_JM6y"><pre tabindex="0" class="prism-code language-bash codeBlock_Gv80 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_N0jv"><div class="token-line" style="color:#393A34"><span class="token plain"># The raw JSON body as a string</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">BODY='{"record_id":"f031a270-20ab-433d-96e9-aed34db97c0a-1761814595173","metadata":{"subtitles":{"en":{"label":"English","url":"https://YOUR_SERVER_URL/path/to/your/transcript.vtt"}}}}'</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Your API credentials</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">API_KEY="YOUR_API_KEY"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SECRET="YOUR_API_SECRET"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Generate the HMAC-SHA256 signature</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SIGNATURE=$(echo -n "$BODY" | openssl dgst -sha256 -mac HMAC -macopt key:"$SECRET" | awk '{print $2}')</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Make the POST request</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">curl -X POST https://YOUR_SERVER_URL/auth/recording/update-metadata \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -H "Content-Type: application/json" \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -H "API-KEY: $API_KEY" \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -H "HASH-SIGNATURE: $SIGNATURE" \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -d "$BODY"</span><br></div></code></pre></div></div>
<p>By linking these assets together, you create a far more valuable piece of content. Your users can now watch the recording with closed captions, improving accessibility and comprehension.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_y2Co" id="conclusion">Conclusion<a href="https://www.plugnmeet.org/blog/guide-to-managing-meeting-recordings#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>Stop thinking of your recordings as a simple archive. With Plug-N-Meet's API-first approach, you have the tools to build a sophisticated, searchable, and accessible content management system.</p>
<p>By programmatically fetching, enriching, and linking your recordings with other assets, you can transform a simple folder of MP4 files into a powerful knowledge base for your organization.</p>
<hr>
<p><strong>Ready to build your content library?</strong></p>
<ul>
<li class=""><strong>Explore the full <a class="" href="https://www.plugnmeet.org/docs/api/recording/fetch">Recording API Documentation</a></strong></li>
<li class=""><strong>Learn how to generate summaries with our <a class="" href="https://www.plugnmeet.org/blog/how-to-add-ai-meeting-assistant-features">AI Features Guide</a></strong></li>
<li class=""><strong>Automate this entire process with <a class="" href="https://www.plugnmeet.org/blog/how-to-build-your-first-webhook-workflow">Webhooks</a></strong></li>
</ul>]]></content:encoded>
            <category>tutorial</category>
            <category>how-to</category>
            <category>recordings</category>
            <category>api</category>
            <category>content-management</category>
            <category>developer</category>
        </item>
        <item>
            <title><![CDATA[Bridging the Gap: How SIP Dial-In Connects Your Meetings to Any Phone]]></title>
            <link>https://www.plugnmeet.org/blog/sip-dial-in-for-video-conferencing</link>
            <guid>https://www.plugnmeet.org/blog/sip-dial-in-for-video-conferencing</guid>
            <pubDate>Wed, 21 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[We've all been there: a crucial meeting is about to start, but a key participant has a spotty internet connection, is traveling, or simply doesn't have access to a computer. In a world increasingly reliant on video calls, how do you ensure everyone can still participate, even if they can't join online?]]></description>
            <content:encoded><![CDATA[<p>We've all been there: a crucial meeting is about to start, but a key participant has a spotty internet connection, is traveling, or simply doesn't have access to a computer. In a world increasingly reliant on video calls, how do you ensure everyone can still participate, even if they can't join online?</p>
<p>At Plug-N-Meet, we believe in inclusivity. That's why we're excited to introduce <strong>SIP Dial-In</strong>, a powerful feature that allows participants to join the audio of your video meetings using any standard telephone. No internet, no problem.</p>
<p>This feature seamlessly bridges the gap between your online conference and the traditional telephone network, ensuring that every voice can be heard, regardless of their connectivity.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="the-problem-when-internet-isnt-an-option">The Problem: When Internet Isn't an Option<a href="https://www.plugnmeet.org/blog/sip-dial-in-for-video-conferencing#the-problem-when-internet-isnt-an-option" class="hash-link" aria-label="Direct link to The Problem: When Internet Isn't an Option" title="Direct link to The Problem: When Internet Isn't an Option" translate="no">​</a></h3>
<p>While WebRTC-based video conferencing is incredibly powerful, it relies on a stable internet connection. This can be a barrier for:</p>
<ul>
<li class=""><strong>Travelers:</strong> On the road, in a car, or in areas with poor Wi-Fi.</li>
<li class=""><strong>Remote Locations:</strong> Participants in regions with limited internet infrastructure.</li>
<li class=""><strong>Accessibility Needs:</strong> Individuals who prefer or require telephone access.</li>
<li class=""><strong>Simple Audio-Only Participation:</strong> Sometimes, all you need is to listen and speak, without the video.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="the-solution-plug-n-meets-sip-dial-in">The Solution: Plug-N-Meet's SIP Dial-In<a href="https://www.plugnmeet.org/blog/sip-dial-in-for-video-conferencing#the-solution-plug-n-meets-sip-dial-in" class="hash-link" aria-label="Direct link to The Solution: Plug-N-Meet's SIP Dial-In" title="Direct link to The Solution: Plug-N-Meet's SIP Dial-In" translate="no">​</a></h3>
<p>Our SIP Dial-In feature integrates your Plug-N-Meet meetings with the global telephone network. It works by setting up a <strong>SIP Gateway</strong> that acts as a bridge, allowing traditional phone calls to connect directly into your online conference.</p>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="how-it-works-for-participants-simple--familiar">How It Works for Participants (Simple &amp; Familiar)<a href="https://www.plugnmeet.org/blog/sip-dial-in-for-video-conferencing#how-it-works-for-participants-simple--familiar" class="hash-link" aria-label="Direct link to How It Works for Participants (Simple &amp; Familiar)" title="Direct link to How It Works for Participants (Simple &amp; Familiar)" translate="no">​</a></h4>
<ol>
<li class="">A participant receives a standard phone number and a unique PIN for the meeting.</li>
<li class="">They dial the number from any phone (mobile or landline).</li>
<li class="">They enter the PIN when prompted.</li>
<li class="">They are instantly connected to the meeting's audio, able to hear and speak with everyone in the online session.</li>
</ol>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="how-it-works-for-moderators-easy-control">How It Works for Moderators (Easy Control)<a href="https://www.plugnmeet.org/blog/sip-dial-in-for-video-conferencing#how-it-works-for-moderators-easy-control" class="hash-link" aria-label="Direct link to How It Works for Moderators (Easy Control)" title="Direct link to How It Works for Moderators (Easy Control)" translate="no">​</a></h4>
<p>Moderators have full control over the SIP dial-in service from within the meeting:</p>
<ul>
<li class=""><strong>Enable/Disable:</strong> Start or stop the dial-in service for the current session.</li>
<li class=""><strong>View Information:</strong> See the active dial-in number(s) and PIN.</li>
<li class=""><strong>Share Instantly:</strong> With a single click, post the dial-in details directly into the public chat for all online participants.</li>
<li class=""><strong>Privacy Options:</strong> Choose to mask the dial-in number in the participant list, showing only the last four digits for added privacy.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="technical-deep-dive-powering-the-connection">Technical Deep Dive: Powering the Connection<a href="https://www.plugnmeet.org/blog/sip-dial-in-for-video-conferencing#technical-deep-dive-powering-the-connection" class="hash-link" aria-label="Direct link to Technical Deep Dive: Powering the Connection" title="Direct link to Technical Deep Dive: Powering the Connection" translate="no">​</a></h3>
<p>Under the hood, Plug-N-Meet leverages the robust <strong><a href="https://github.com/livekit/sip" target="_blank" rel="noopener noreferrer" class="">livekit/sip</a></strong> project as its SIP gateway. This component is responsible for managing the connection between your meeting and an external SIP trunking provider.</p>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="for-administrators-server-setup-is-key">For Administrators: Server Setup is Key<a href="https://www.plugnmeet.org/blog/sip-dial-in-for-video-conferencing#for-administrators-server-setup-is-key" class="hash-link" aria-label="Direct link to For Administrators: Server Setup is Key" title="Direct link to For Administrators: Server Setup is Key" translate="no">​</a></h4>
<p>To enable SIP Dial-In, your system administrator must perform a one-time server-side configuration:</p>
<ol>
<li class=""><strong><code>config.yaml</code> Setup:</strong> The <code>livekit_sip_info</code> section in your Plug-N-Meet server's <code>config.yaml</code> file must be configured with your SIP provider's details.</li>
<li class=""><strong>External SIP Provider:</strong> You will need an account with a SIP trunking provider (e.g., Twilio, SignalWire, etc.) to handle the actual phone calls to and from the public telephone network (PSTN).</li>
</ol>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="security-considerations-encrypting-the-phone-leg">Security Considerations: Encrypting the Phone Leg<a href="https://www.plugnmeet.org/blog/sip-dial-in-for-video-conferencing#security-considerations-encrypting-the-phone-leg" class="hash-link" aria-label="Direct link to Security Considerations: Encrypting the Phone Leg" title="Direct link to Security Considerations: Encrypting the Phone Leg" translate="no">​</a></h4>
<p>While the SIP audio stream itself cannot be end-to-end encrypted (as it must traverse the traditional phone network), the connection between your SIP gateway and your SIP provider <em>can</em> be secured. The <code>livekit/sip</code> service supports <code>SIPMediaEncryption</code> (SRTP), which encrypts the audio stream over the internet. It is the administrator's responsibility to enable this and ensure their chosen SIP provider supports it.</p>
<h4 class="anchor anchorTargetStickyNavbar_y2Co" id="e2ee-incompatibility">E2EE Incompatibility<a href="https://www.plugnmeet.org/blog/sip-dial-in-for-video-conferencing#e2ee-incompatibility" class="hash-link" aria-label="Direct link to E2EE Incompatibility" title="Direct link to E2EE Incompatibility" translate="no">​</a></h4>
<p>It's important to note that the SIP gateway must process unencrypted audio to bridge the call. Because of this, <strong>SIP Dial-In is automatically disabled for any room where End-to-End Encryption (E2EE) is active</strong>. This ensures that the integrity of your E2EE sessions is never compromised.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="conclusion-expanding-your-reach">Conclusion: Expanding Your Reach<a href="https://www.plugnmeet.org/blog/sip-dial-in-for-video-conferencing#conclusion-expanding-your-reach" class="hash-link" aria-label="Direct link to Conclusion: Expanding Your Reach" title="Direct link to Conclusion: Expanding Your Reach" translate="no">​</a></h3>
<p>Plug-N-Meet's SIP Dial-In feature is more than just a convenience; it's a powerful tool for inclusivity and accessibility. It ensures that your meetings can reach a wider audience, providing a reliable audio connection even when internet access is a challenge.</p>
<p>By bridging the gap between online and traditional telephony, Plug-N-Meet empowers you to connect with everyone, everywhere.</p>
<hr>
<p><strong>Ready to expand your meeting's reach?</strong></p>
<ul>
<li class=""><strong>Learn how to enable SIP Dial-In when creating a room via the <a class="" href="https://www.plugnmeet.org/docs/api/room/create">Create Room API</a>.</strong></li>
<li class=""><strong>Understand the security implications in our <a class="" href="https://www.plugnmeet.org/docs/security-overview">Security Overview</a>.</strong></li>
<li class=""><strong>Explore the <a href="https://github.com/livekit/sip" target="_blank" rel="noopener noreferrer" class="">livekit/sip GitHub repository</a> for detailed setup instructions.</strong></li>
<li class=""><strong><a href="https://demo.plugnmeet.com/landing.html" target="_blank" rel="noopener noreferrer" class="">Try the Live Demo</a> to experience Plug-N-Meet's features.</strong></li>
</ul>]]></content:encoded>
            <category>sip</category>
            <category>voip</category>
            <category>telephony</category>
            <category>integration</category>
            <category>accessibility</category>
            <category>feature</category>
            <category>moderator</category>
            <category>admin</category>
        </item>
        <item>
            <title><![CDATA[BigBlueButton vs. Plug-N-Meet: A Modern Alternative for Scalable Video Conferencing]]></title>
            <link>https://www.plugnmeet.org/blog/bigbluebutton-vs-plugnmeet-alternative</link>
            <guid>https://www.plugnmeet.org/blog/bigbluebutton-vs-plugnmeet-alternative</guid>
            <pubDate>Sun, 18 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[If you're in the world of open-source education or communication, you owe a debt of gratitude to BigBlueButton. It was a pioneering platform that showed the world what was possible. However, as the web has evolved, the demands for scalability, developer experience, and cost-effective performance have grown exponentially.]]></description>
            <content:encoded><![CDATA[<p>If you're in the world of open-source education or communication, you owe a debt of gratitude to BigBlueButton. It was a pioneering platform that showed the world what was possible. However, as the web has evolved, the demands for scalability, developer experience, and cost-effective performance have grown exponentially.</p>
<p>Many long-time BigBlueButton users are now looking for a next-generation solution, one designed from the ground up to meet the new demands for scalability and flexibility that the modern web requires. This is where Plug-N-Meet comes in.</p>
<p>This article provides a direct, head-to-head comparison to help you understand the key differences in philosophy and technology, so you can make an informed decision about which platform is right for you.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="at-a-glance-a-head-to-head-comparison">At a Glance: A Head-to-Head Comparison<a href="https://www.plugnmeet.org/blog/bigbluebutton-vs-plugnmeet-alternative#at-a-glance-a-head-to-head-comparison" class="hash-link" aria-label="Direct link to At a Glance: A Head-to-Head Comparison" title="Direct link to At a Glance: A Head-to-Head Comparison" translate="no">​</a></h3>
<table><thead><tr><th style="text-align:left">Feature / Aspect</th><th style="text-align:left">BigBlueButton (BBB)</th><th style="text-align:left">Plug-N-Meet</th><th style="text-align:left">Why It Matters</th></tr></thead><tbody><tr><td style="text-align:left"><strong>Core Architecture</strong></td><td style="text-align:left"><strong>Monolithic:</strong> Tightly coupled services (web, media, recording).</td><td style="text-align:left"><strong>Decoupled:</strong> Independent microservices for the app, media, and recorder.</td><td style="text-align:left">You can scale, update, or maintain one part of Plug-N-Meet without impacting the others, leading to higher stability and lower costs.</td></tr><tr><td style="text-align:left"><strong>Technology Stack</strong></td><td style="text-align:left"><strong>Complex Mix:</strong> A combination of Scala, Java, JavaScript, Ruby, etc.</td><td style="text-align:left"><strong>Unified &amp; Modern:</strong> Go for the entire backend, TypeScript/React for the frontend.</td><td style="text-align:left">A simpler, unified stack is far easier to maintain, debug, and contribute to, resulting in faster development cycles.</td></tr><tr><td style="text-align:left"><strong>Media Server</strong></td><td style="text-align:left"><strong>FreeSWITCH &amp; mediasoup</strong> (previously Kurento)</td><td style="text-align:left"><strong>LiveKit</strong> (a modern, high-performance SFU)</td><td style="text-align:left">LiveKit is purpose-built for scalable WebRTC, offering better performance, adaptive streaming (Simulcast/Dynacast), and lower resource usage out of the box.</td></tr><tr><td style="text-align:left"><strong>Security &amp; E2EE</strong></td><td style="text-align:left">Basic encryption. E2EE is not a native, fully integrated feature.</td><td style="text-align:left"><strong>Native End-to-End Encryption (E2EE):</strong> A core, API-controlled feature with multiple key management models.</td><td style="text-align:left">Plug-N-Meet provides true zero-trust security, ensuring not even the server can access meeting content. This is critical for privacy-sensitive applications.</td></tr><tr><td style="text-align:left"><strong>Recording</strong></td><td style="text-align:left">Reconstructs a presentation from separately recorded raw streams.</td><td style="text-align:left"><strong>High-Fidelity Capture:</strong> A headless browser records the final rendered output to a single MP4.</td><td style="text-align:left">Plug-N-Meet's method produces a perfect, "what you see is what you get" replica of the live session, ensuring perfect synchronization.</td></tr><tr><td style="text-align:left"><strong>Customization</strong></td><td style="text-align:left"><strong>Static Theming:</strong> Requires complex server-side configuration and often code modification.</td><td style="text-align:left"><strong>Multi-Layered &amp; Dynamic:</strong> Offers four levels of customization, from simple branding to a "headless" native integration.</td><td style="text-align:left">Plug-N-Meet's API-driven approach enables true multi-tenant branding and a vastly superior white-label experience.</td></tr><tr><td style="text-align:left"><strong>Installation</strong></td><td style="text-align:left">Scripted, but with heavy, specific OS dependencies.</td><td style="text-align:left"><strong>Automated script using Docker containers.</strong></td><td style="text-align:left">Plug-N-Meet's containerized setup is faster and avoids conflicts with other services on the host machine.</td></tr><tr><td style="text-align:left"><strong>Upgrades &amp; Maintenance</strong></td><td style="text-align:left"><strong>Full Rebuild Required:</strong> OS upgrades require a new server and manual data migration.</td><td style="text-align:left"><strong>Simple &amp; In-Place:</strong> Docker abstracts the OS, allowing safe, independent updates.</td><td style="text-align:left">You avoid the operational cost and risk of rebuilding your server for every major OS update.</td></tr><tr><td style="text-align:left"><strong>Multi-Tenancy</strong></td><td style="text-align:left"><strong>Domain-Coupled:</strong> Difficult to serve multiple domains from one instance.</td><td style="text-align:left"><strong>Domain-Agnostic:</strong> A single server can easily serve unlimited domains via a reverse proxy.</td><td style="text-align:left">Greatly simplifies offering a white-labeled service to multiple clients from a single, cost-effective server instance.</td></tr></tbody></table>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="key-difference-1-the-architectural-philosophy">Key Difference 1: The Architectural Philosophy<a href="https://www.plugnmeet.org/blog/bigbluebutton-vs-plugnmeet-alternative#key-difference-1-the-architectural-philosophy" class="hash-link" aria-label="Direct link to Key Difference 1: The Architectural Philosophy" title="Direct link to Key Difference 1: The Architectural Philosophy" translate="no">​</a></h3>
<p>The most fundamental difference is in the design philosophy.</p>
<p><strong>BigBlueButton</strong> is a <strong>monolith</strong>. Its core components are tightly interwoven. This means if your recording service is consuming all the CPU, it directly impacts the performance of your live meetings.</p>
<p><strong>Plug-N-Meet</strong> is built on a <strong>decoupled, microservices-based architecture</strong>. The application server, the LiveKit media server, and the recorder are all independent services. This allows you to isolate workloads and scale intelligently, leading to a significantly lower Total Cost of Ownership (TCO).</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="key-difference-2-a-multi-layered-approach-to-customization">Key Difference 2: A Multi-Layered Approach to Customization<a href="https://www.plugnmeet.org/blog/bigbluebutton-vs-plugnmeet-alternative#key-difference-2-a-multi-layered-approach-to-customization" class="hash-link" aria-label="Direct link to Key Difference 2: A Multi-Layered Approach to Customization" title="Direct link to Key Difference 2: A Multi-Layered Approach to Customization" translate="no">​</a></h3>
<p>This is a game-changer for anyone building a white-label or multi-tenant service.</p>
<p><strong>BigBlueButton</strong> uses a <strong>static theming</strong> approach. Customizing the look and feel is a complex, server-wide change that often requires modifying configuration files and restarting services.</p>
<p><strong>Plug-N-Meet</strong> is <strong>API-first and dynamic</strong>, offering a <strong><a class="" href="https://www.plugnmeet.org/blog/true-white-label-video-conferencing">multi-layered approach to white-labeling</a></strong> that allows you to choose the level of customization that fits your needs:</p>
<ul>
<li class=""><strong>Level 1: Quick Rebranding:</strong> Instantly change logos, colors, and backgrounds via a simple <strong><a class="" href="https://www.plugnmeet.org/docs/developer-guide/design-customisation">configuration object</a></strong>.</li>
<li class=""><strong>Level 2: API-Driven Feature Control:</strong> Programmatically enable or disable features (like the whiteboard or breakout rooms) to create purpose-built experiences for different use cases.</li>
<li class=""><strong>Level 3: Deep Styling with Custom CSS:</strong> Provide a URL to your own stylesheet for pixel-perfect control over any UI element.</li>
<li class=""><strong>Level 4: True Native Integration:</strong> Use the <strong><a class="" href="https://www.plugnmeet.org/docs/api/get-client-files"><code>getClientFiles</code> API</a></strong> to render the client "headless" directly within your own application, giving you complete control over the layout and user experience.</li>
</ul>
<p>This layered flexibility makes it easy to get started but provides a path to a truly unique and deeply integrated product.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="key-difference-3-security-by-design---native-end-to-end-encryption">Key Difference 3: Security by Design - Native End-to-End Encryption<a href="https://www.plugnmeet.org/blog/bigbluebutton-vs-plugnmeet-alternative#key-difference-3-security-by-design---native-end-to-end-encryption" class="hash-link" aria-label="Direct link to Key Difference 3: Security by Design - Native End-to-End Encryption" title="Direct link to Key Difference 3: Security by Design - Native End-to-End Encryption" translate="no">​</a></h3>
<p><strong>BigBlueButton</strong>'s architecture requires the server to have access to unencrypted media streams for features like recording. This architectural choice is incompatible with a zero-trust E2EE model.</p>
<p><strong>Plug-N-Meet</strong> was built with a <strong>"privacy by design"</strong> philosophy. E2EE is a <strong>core, native feature</strong> of the platform. As detailed in our <strong><a class="" href="https://www.plugnmeet.org/docs/security-overview">Security Overview</a></strong>, we provide multiple API-controlled models, including a zero-trust option where the encryption key never touches the server, providing a mathematical guarantee of privacy.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="key-difference-4-the-recording-philosophy---perfect-fidelity-vs-complex-reconstruction">Key Difference 4: The Recording Philosophy - Perfect Fidelity vs. Complex Reconstruction<a href="https://www.plugnmeet.org/blog/bigbluebutton-vs-plugnmeet-alternative#key-difference-4-the-recording-philosophy---perfect-fidelity-vs-complex-reconstruction" class="hash-link" aria-label="Direct link to Key Difference 4: The Recording Philosophy - Perfect Fidelity vs. Complex Reconstruction" title="Direct link to Key Difference 4: The Recording Philosophy - Perfect Fidelity vs. Complex Reconstruction" translate="no">​</a></h3>
<p><strong>BigBlueButton</strong> records individual streams and attempts to reassemble them in post-processing, which can be a complex task.</p>
<p><strong>Plug-N-Meet</strong>, as detailed in our <strong><a class="" href="https://www.plugnmeet.org/blog/recording-philosophy">Recording Philosophy</a></strong>, uses a headless browser to capture the final, rendered output. This produces a "what you see is what you get" MP4 file that is a perfect, high-fidelity replica of the live experience, ensuring all elements are perfectly synchronized.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="key-difference-5-long-term-maintainability-and-upgrades">Key Difference 5: Long-Term Maintainability and Upgrades<a href="https://www.plugnmeet.org/blog/bigbluebutton-vs-plugnmeet-alternative#key-difference-5-long-term-maintainability-and-upgrades" class="hash-link" aria-label="Direct link to Key Difference 5: Long-Term Maintainability and Upgrades" title="Direct link to Key Difference 5: Long-Term Maintainability and Upgrades" translate="no">​</a></h3>
<p>This is a significant consideration for any administrator.</p>
<p><strong>BigBlueButton</strong> is <strong>tightly coupled to a specific OS version</strong>. The official upgrade path for a new OS often requires provisioning a brand new server and manually migrating all data and recordings. This can be a time-consuming and complex undertaking.</p>
<p><strong>Plug-N-Meet</strong> completely avoids this problem by using <strong>Docker</strong>. The entire application runs in isolated containers, abstracting it from the host OS. You can upgrade your server's OS without breaking the application, and updating Plug-N-Meet is as simple as pulling a new Docker image. This makes long-term maintenance dramatically simpler and safer.</p>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="the-migration-path-try-without-the-risk">The Migration Path: Try Without the Risk<a href="https://www.plugnmeet.org/blog/bigbluebutton-vs-plugnmeet-alternative#the-migration-path-try-without-the-risk" class="hash-link" aria-label="Direct link to The Migration Path: Try Without the Risk" title="Direct link to The Migration Path: Try Without the Risk" translate="no">​</a></h3>
<p>We understand that migrating from a deeply integrated platform is a big decision. That's why we made it painless.</p>
<p>Plug-N-Meet includes a <strong>BBB-compatible API layer</strong>. This means you can point your existing Greenlight, Moodle, or custom application to your Plug-N-Meet server, and it will work <strong>without any front-end code changes</strong>. This allows you to test the performance and stability of Plug-N-Meet in your own environment with zero risk.</p>
<p>Ready to take the next step? Follow our simple, step-by-step <strong><a class="" href="https://www.plugnmeet.org/docs/tutorials/migration-from-bbb">Migration from BigBlueButton Tutorial</a></strong> to see how easy it is.</p>
<hr>
<h3 class="anchor anchorTargetStickyNavbar_y2Co" id="conclusion-the-right-tool-for-the-modern-web">Conclusion: The Right Tool for the Modern Web<a href="https://www.plugnmeet.org/blog/bigbluebutton-vs-plugnmeet-alternative#conclusion-the-right-tool-for-the-modern-web" class="hash-link" aria-label="Direct link to Conclusion: The Right Tool for the Modern Web" title="Direct link to Conclusion: The Right Tool for the Modern Web" translate="no">​</a></h3>
<p>BigBlueButton laid the foundation for open-source communication. It proved what was possible. As we detailed in our <strong><a class="" href="https://www.plugnmeet.org/blog/why-we-built-plugnmeet">founder's story, "Why We Built Plug-N-Meet,"</a></strong> our platform is the next step in that evolution, built from the ground up to meet the modern web's demands for elastic scalability, developer agility, and long-term maintainability.</p>
<p>If you are feeling the pain points of a monolithic architecture and are looking for a more flexible, performant, and cost-effective solution, Plug-N-Meet is the modern alternative you've been waiting for.</p>
<hr>
<p><strong>Ready to see the difference for yourself?</strong></p>
<ul>
<li class=""><strong><a href="https://demo.plugnmeet.com/landing.html" target="_blank" rel="noopener noreferrer" class="">Try the Live Demo</a> to experience the modern interface.</strong></li>
<li class=""><strong><a class="" href="https://www.plugnmeet.org/docs/installation">Follow our simple Installation Guide</a> to get your own server running in minutes.</strong></li>
</ul>]]></content:encoded>
            <category>bigbluebutton</category>
            <category>bbb-alternative</category>
            <category>plugnmeet-vs-bbb</category>
            <category>open-source</category>
            <category>video-conferencing</category>
            <category>scalability</category>
            <category>comparison</category>
        </item>
    </channel>
</rss>