call-me is a free, open source collaboration & communication project written in JavaScript and released under AGPL-3.0. It has 767 GitHub stars, 91 forks and 0 open issues, and was last pushed 8 days ago. On this registry it ranks #51 of 62 tracked projects in Collaboration & Communication, with 5 head-to-head comparisons available. It gained 5 stars over the last 30 tracked days.

What is call-me?

What it is

Call-Me (MiroTalk CME) is an open-source, self-hosted WebRTC click-to-call solution for websites. It is written in JavaScript, licensed under AGPL-3.0, and listed under Business Software / Collaboration & Communication. The project provides a browser-based video communication widget that a website operator can host independently and embed as a Call-Me button.

The concrete problem it solves is immediate human help for website visitors without signup or setup. Support flows often require sign-up, setup, or a separate link, and browser-based one-to-one video calls may not be available. Call-Me lets a visitor join a room, see available users, and start a video call in the browser through WebRTC, with no signup or setup required according to the README.

Key capabilities

  • End-to-end encryption is listed for secure and private communications.
  • Users can join a room with a username or enter a name and call now, and rooms group participants who can see and call each other.
  • Participants can start video calls from a username button, switch cameras, microphones, and speakers, chat in real time, share screens or files, hide video, mute, toggle camera, and hang up.
  • Host Protection mode with a password can be enabled, and Web Push Notifications can alert users to incoming calls in the background.
  • A REST API can retrieve connected users, rooms, availability, active calls, and server stats, or initiate a call, while webhooks can deliver call lifecycle events.

Who uses it and how

  • Customer support teams can use it as a self-hosted click-to-call layer for websites, allowing visitors to reach an agent through a browser video call.
  • Sales or consultation teams can use direct links, rooms, and per-room branding to route visitors into a support or reception context.
  • Operators can integrate external systems with the REST API and webhooks to monitor rooms, users, active calls, and lifecycle events.

Getting started

The README shows two typical methods: install Node.js and npm, clone the repository, copy configuration files, run npm install, and start the application, or use Docker Compose with the official mirotalk/cme image; a live demo is also linked.

When to use it — and when not to

Call-Me is a good fit when a team needs a self-hosted, browser-based click-to-call widget for customer communication and can operate the service itself. It may be a poor fit when a team needs a fully managed product, because the README presents self-hosting through Node.js or Docker and does not list a paid hosted option. The AGPL-3.0 license and the absence of listed database, storage, or SMTP requirements mean teams should verify operational dependencies before deployment.

project readme (upstream, from github) — read inline

MiroTalk CME - Open Source Self-Hosted WebRTC Click-to-Call for Websites

Add video calling to your website with a self-hosted WebRTC Call-Me widget for instant customer communication.


GitHub Stars GitHub Forks

License: AGPLv3 Docker Pulls Last Commit Discord Author

Instant click-to-call video communication in your browser, no signup, no setup, powered by WebRTC.

Try Live Demo · Privacy · Documentation · Discord · Sponsor


Getting Started

Jump to: Features · Quick Start · Click to Call · Self-Hosting · Fast Integration · API · Webhooks

Features

  • End-to-End Encryption for secure and private communications.
  • Join with a username or enter a name to Call now.
  • Join a room (e.g. Support, Reception) to group users, everyone in the same room can see and call each other (defaults to Public).
  • Set your preferred language.
  • Initiate video calls by clicking the call button next to a recipient’s username.
  • Switch between cameras, microphones, and speakers during a call.
  • Chat in real time with participants.
  • Hide your video feed when needed.
  • Toggle your microphone (mute/unmute).
  • Toggle your camera (video on/off).
  • Share your screen (start/stop).
  • Share files with other participants.
  • Hang up the call when finished.
  • Enable Host Protection mode with a password.
  • Enable Web Push Notifications to get notified of incoming calls even when the app is in the background.
  • Use the REST API to retrieve connected users, rooms, availability status, active calls and server stats, or to initiate a call.
  • Receive Webhooks for call lifecycle events (user joined/left, call started/ended with duration) for external integrations.

Quick Start

Using Node.js

nodejs

Install Node.js and npm

# Clone this repo
git clone https://github.com/miroslavpejic85/call-me.git

# Go to to dir call-me
cd call-me

# Copy the config file
cp public/config.template.js public/config.js

# Copy .env.template to .env
cp .env.template .env

# Install dependencies
npm install

# Start the application
npm start

Using Docker

docker

Install docker engine and docker compose

# Clone this repo
git clone https://github.com/miroslavpejic85/call-me.git

# Go to to dir call-me
cd call-me

# Copy the config file
cp public/config.template.js public/config.js

# Copy .env.template to .env
cp .env.template .env

# Create your own docker-compose.yml
cp docker-compose.template.yml docker-compose.yml

# Get official image from Docker Hub
docker-compose pull

# Create and start containers
docker-compose up

  1. Open your browser and visit http://localhost:8000.

  2. Join with your username or Call the recipient directly.

  3. Select the connected recipient's username and click Call.

  4. Enjoy your one-to-one video call.


Click to Call

Direct links, rooms, and per-room branding

Allows a user to join the room as a user1

Lets the user2 join the room and initiate a call to the user1

Rooms

By default everyone joins the same shared Public room. You can optionally add a room parameter to group users into separate rooms (e.g. Support, Reception). Users only see and can call others in the same room.

Join a specific room as user1

Let user2 join the same room and call the user1

[!NOTE] The call target must be in the same room as the caller. If room is omitted, users join the default Public room.

You can explore a widget example that demonstrates this functionality here.

Per-room branding (optional)

Give each room its own name, subtitle, theme color, or GitHub visibility. Uncomment and edit the rooms map in public/config.template.js. Rooms without an entry keep the default look. Visual only — not a security feature.


Self-Hosting

Ubuntu requirements and install scripts

setup

Requirements

  • A clean server running Ubuntu 22.04 or 24.04 LTS
  • Root access to the Server
  • A domain or subdomain pointing to your server’s public IPv4

Note

When prompted, simply enter your domain or subdomain. Then wait for the installation to complete.

# Install
wget -qO cme-install.sh https://docs.mirotalk.com/scripts/cme/cme-install.sh \
  && chmod +x cme-install.sh \
  && ./cme-install.sh
# Uninstall
wget -qO cme-uninstall.sh https://docs.mirotalk.com/scripts/cme/cme-uninstall.sh \
  && chmod +x cme-uninstall.sh \
  && ./cme-uninstall.sh
# Update
wget -qO cme-update.sh https://docs.mirotalk.com/scripts/cme/cme-update.sh \
  && chmod +x cme-update.sh \
  && ./cme-update.sh

Fast Integration

iframe

Easily integrate Call-Me into your website or application with a simple iframe. Just add the following code to your project:

<iframe
    allow="camera; microphone; speaker-selection; fullscreen; clipboard-read; clipboard-write; web-share; autoplay"
    src="https://cme.mirotalk.com/"
    style="width: 100vw; height: 100vh; border: 0px;"
></iframe>

API

REST endpoints and curl examples

Get all connected users

# Get all connected users
curl -X GET "http://localhost:8000/api/v1/users" -H "authorization: call_me_api_key_secret" -H "Content-Type: application/json"
curl -X GET "https://cme.mirotalk.com/api/v1/users" -H "authorization: call_me_api_key_secret" -H "Content-Type: application/json"

# Get connected users in a specific room (optional `room` filter)
curl -X GET "http://localhost:8000/api/v1/users?room=Support" -H "authorization: call_me_api_key_secret" -H "Content-Type: application/json"

# Get detailed users info (room, media status, availability, connectedAt)
curl -X GET "http://localhost:8000/api/v1/users?details=true" -H "authorization: call_me_api_key_secret" -H "Content-Type: application/json"

# Generate call links for connected users to call
curl -X GET "http://localhost:8000/api/v1/connected?user=call-me" -H "authorization: call_me_api_key_secret" -H "Content-Type: application/json"
curl -X GET "https://cme.mirotalk.com/api/v1/connected?user=call-me" -H "authorization: call_me_api_key_secret" -H "Content-Type: application/json"

# Generate call links scoped to a room (adds `&room=...` to the links)
curl -X GET "http://localhost:8000/api/v1/connected?user=call-me&room=Support" -H "authorization: call_me_api_key_secret" -H "Content-Type: application/json"

Get rooms, active calls and server statistics

# List active rooms with user counts and active call counts
curl -X GET "http://localhost:8000/api/v1/rooms" -H "authorization: call_me_api_key_secret" -H "Content-Type: application/json"

# List active calls (optional `room` filter)
curl -X GET "http://localhost:8000/api/v1/calls" -H "authorization: call_me_api_key_secret" -H "Content-Type: application/json"
curl -X GET "http://localhost:8000/api/v1/calls?room=Support" -H "authorization: call_me_api_key_secret" -H "Content-Type: application/json"

# Get aggregate server statistics (version, uptime, users, rooms, active calls)
curl -X GET "http://localhost:8000/api/v1/stats" -H "authorization: call_me_api_key_secret" -H "Content-Type: application/json"

Docs: http://localhost:8000/api/v1/docs/ or you can check it out live in prod here.


Webhooks

Get notified of call lifecycle events (user.joined, user.left, call.started, call.ended with duration) in real time for external integrations. Enable it in your .env:

WEBHOOK_ENABLED=true
WEBHOOK_URL='http://localhost:9099/webhooks/call-me'
WEBHOOK_SECRET='your-shared-secret' # optional, enables HMAC-SHA256 request signing

A ready-to-run example receiver and the full event reference (payloads, signature verification) live in webhook/. Run it in parallel with Call-Me to watch events live:

node webhook/server.js

🌐 Explore the full MiroTalk suite (SFU, P2P, BRO, C2C, WEB, CME, ADM) → MiroTalk Overview


Frequently asked questions

Is call-me free to use?

call-me is open source under the AGPL-3.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does call-me do?

📞 Open-source, self-hosted WebRTC click-to-call solution for websites. Add a video Call-Me button and let visitors instantly connect with your team through bro

What is call-me written in?

call-me is primarily written in JavaScript. Its source is publicly available at https://github.com/miroslavpejic85/call-me, and it has 767 GitHub stars.