npm.io
0.1.2 • Published 2d ago

@meeto/embed-core

Licence
MIT
Version
0.1.2
Deps
0
Size
63 kB
Vulns
0
Weekly
0

@meeto/embed-core

Add free video calls to your website with one snippet. Meeto is a video call widget that embeds a complete call experience — lobby, screen sharing with annotations, chat, reactions and recordings — straight into your site. Your visitors join right in the browser, with no downloads and no sign-up. The free plan is included, no credit card required.

@meeto/embed-core is the zero-dependency, framework-agnostic core: a WebRTC video call SDK that mounts an iframe and talks to it over a typed postMessage bridge. Use it as a free live video chat widget for customer support, sales, telehealth video calls, online tutoring or community rooms — anywhere you'd otherwise wire up a video conferencing API for your website by hand.

Features

  • Free video calls — the free plan is included with no credit card: up to 10 participants and 60-minute group calls. Pro lifts the limits (25 participants, 4K, hidden badge) only when you need it.
  • Floating button or inline embed — drop a chat-style floating call button (bubble) in the corner, or embed the call inline in your own container.
  • Persistent named rooms — route every visitor to a shared room by name ("support", "sales"), so a call is always waiting where you need it.
  • Presence badge — the floating button shows how many people are currently in the room.
  • Full in-call experience — screen sharing with annotations, chat, reactions and recordings, out of the box.
  • 42 UI languages — the widget follows the visitor's browser language automatically, or set your own.
  • Works with any framework — plain HTML, or the React / Vue / Angular wrappers built on this core.

Getting started

  1. Create a free embed key at meeto.me/app and add your site's domain (the key is public and origin-locked to your domains).

  2. Install:

    npm install @meeto/embed-core
  3. Embed the call:

    import { MeetoWidget } from "@meeto/embed-core";
    
    const widget = new MeetoWidget({
      key: "mk_live_…",        // public key from your meeto.me dashboard
      container: "#call",       // element or selector (give it a height)
    });
    widget.on("joined", (e) => console.log("joined", e.room));
    widget.on("left", (e) => console.log("left after", e.durationSec, "s"));

It also exports the <meeto-room> Web Component:

<meeto-room key="mk_live_…" style="display:block;height:520px"></meeto-room>
<script type="module">
  import { registerMeetoElement } from "@meeto/embed-core";
  registerMeetoElement();
</script>

For sites without a build step, a ready-made loader adds the widget with a single tag:

<script src="https://meeto.me/widget.js" data-key="mk_live_…" data-target="#call"></script>

Options

Pass these to new MeetoWidget({ … }):

Option Description
key Public embed key (mk_live_…) from your dashboard. Required.
container Element or CSS selector to mount into (not needed in bubble mode).
mode "inline" (embed in your container, default) or "bubble" (floating call button).
roomName Persistent named room — everyone with the same name shares one room.
room Code of an existing room; if unset, the widget creates one and reuses it for the tab.
name Default participant name, prefilled in the lobby.
lang UI language (ru, en, de, …); defaults to the browser language.
accent Accent color of the UI, hex (e.g. #27D6AA).
position Corner of the bubble button: "bottom-right" (default) or "bottom-left".
autoJoin Join immediately, skipping the lobby (open-door rooms only).
baseUrl Meeto address for self-hosted installations (defaults to https://meeto.me).

Events & methods

Subscribe with widget.on(type, handler) or the onEvent option:

Event Fires when
ready The widget iframe has loaded and completed its handshake.
phase The call phase changes (prejoin, room, finished, error).
joined The visitor joins the call (carries the room code).
left The visitor leaves (carries the reason and durationSec).
participants The participant count changes.
error An error occurs (carries code and message).

Control the call imperatively:

Method Action
join(name?) Join from the lobby programmatically.
leave() Leave the call.
setMicrophone(on) Toggle the microphone.
setCamera(on) Toggle the camera.
open() / close() Expand / collapse the bubble panel (no-op inline).
destroy() Remove the iframe and all listeners.

License

MIT

Keywords