MiroTalk P2P

Open Source WebRTC P2P Video Conferencing You Can Self-Host in Minutes

Free, Secure, Fast Real-Time Communication - up to 8K, 60fps. Works in All Browsers and Platforms.


[![GitHub Stars](https://img.shields.io/github/stars/miroslavpejic85/mirotalk?style=social)](https://github.com/miroslavpejic85/mirotalk/stargazers) [![GitHub Forks](https://img.shields.io/github/forks/miroslavpejic85/mirotalk?style=social)](https://github.com/miroslavpejic85/mirotalk/network/members) ![License: AGPLv3](https://img.shields.io/badge/License-AGPLv3_Open_Source-blue.svg) ![Docker Pulls](https://img.shields.io/docker/pulls/mirotalk/p2p) ![Last Commit](https://img.shields.io/github/last-commit/miroslavpejic85/mirotalk) ![Discord](https://img.shields.io/badge/Discord-Community-5865F2?logo=discord&logoColor=white) ![Author](https://img.shields.io/badge/Author-Miroslav_Pejic-brightgreen.svg)

MiroTalk P2P is a self-hosted, open-source video conferencing platform using direct peer-to-peer WebRTC connections for fast, secure, real-time communication. Deploy on your own server in minutes. Enjoy unlimited rooms, no time limits, end-to-end privacy, and a rich feature set - all under your control.

Try Live Demo   Documentation   Discord   Sponsor


MiroTalk P2P - Open Source Video Conferencing

Proudly sponsored by


Recall.ai - API for meeting recording

Recall.ai – an API for recording Zoom, Google Meet, Microsoft Teams, and in-person meetings.



✨ Why MiroTalk P2P?
| | MiroTalk P2P | Other Solutions | | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------- | | πŸ’° **Cost** | Free & Open Source (AGPLv3). [One-time fee licenses](https://codecanyon.net/item/mirotalk-p2p-webrtc-realtime-video-conferences/38376661) available | Paid plans | | 🏠 **Self-hosted** | βœ… Full control over your data | ❌ Cloud only | | πŸ”’ **Privacy** | Your server, your rules | Third-party data processing | | ⏱️ **Time limits** | Unlimited | 40-60 min on free tiers | | 🏒 **Rooms** | Unlimited concurrent rooms | Limited | | πŸŽ₯ **Resolution** | Up to 8K @ 60fps | Up to 1080p | | 🌍 **Languages** | 133 languages | ~30-80 | | πŸ”Œ **API** | Full REST API included | Paid add-on | | πŸ€– **AI Features** | ChatGPT (OpenAI) integration | Paid AI add-ons | | 🧩 **Customization** | Full source code, white-label ready | Limited branding options | | πŸ“¦ **Deployment** | Docker, Node.js, one-click install | N/A (SaaS only) |
πŸš€ Features
**Core Platform** - `100% Free` Β· `Open Source (AGPLv3)` Β· `Self-Hosted` Β· [PWA](https://en.wikipedia.org/wiki/Progressive_web_application) - No downloads, plugins, or logins required - completely browser-based - Unlimited conference rooms with no time limits - Compatible with all major browsers, desktop, and mobile devices - Translated into 133 languages **Video & Audio** - Video quality up to 8K with webcam streaming (front & rear camera on mobile) - Crystal-clear audio with speaking detection and volume indicators - Screen sharing for presentations - Video/Document Picture-in-Picture (PiP) - Snapshot video frames as PNG images - Push-to-talk (walkie-talkie mode) - Choose audio input, output, and video source **Recording** - Record screen, audio, and video **Collaboration** - Chat with emoji picker, private messages, Markdown support, and conversation export - Advanced collaborative whiteboard - Real-time YouTube embeds, video files (MP4, WebM, OGG), and audio (MP3) - File sharing with drag-and-drop **AI-Powered** - ChatGPT (OpenAI) for Q&A, information, and resource discovery - Speech recognition - control the app with your voice **Security & Access** - OpenID Connect (OIDC) authentication - Host protection & user auth to prevent unauthorized access - JWT-based credential management - Room password protection - Direct peer-to-peer connections for low-latency communication through WebRTC **Developer & Integration** - Full [REST API](app/api/README.md) - [Slack](https://api.slack.com/apps/) and [Mattermost](https://mattermost.com/) integrations - [Sentry](https://sentry.io/) error reporting - Customizable UI themes - Meeting duration control (HH:MM:SS) - Embeddable via iframe & [widget](#widget) - And much more...
πŸ”— Direct Join
- You can `directly join a room` by using links like: - https://p2p.mirotalk.com/join?room=test&name=random&avatar=0&audio=0&video=0&screen=0&chat=0&hide=0¬ify=0&duration=unlimited - https://mirotalk.up.railway.app/join?room=test&name=random&avatar=0&audio=0&video=0&screen=0&chat=0&hide=0¬ify=0&duration=unlimited | Params | Type | Description | | -------- | ------- | ------------------------- | | room | string | Room Id | | name | string | User name | | avatar | Mixed | User avatar | | audio | boolean | Audio stream | | video | boolean | Video stream | | screen | boolean | Screen stream | | chat. | boolean | Chat | | hide | boolean | Hide myself | | notify | boolean | Welcome message | | duration | string | Meeting duration HH:MM:SS | | token | string | jwt token | > **Note** > > The `token` parameter are optional when either `HOST_PROTECTED` or `HOST_USER_AUTH` is set to `true` in the `.env` file. The valid list of users is defined in the `HOST_USERS` configuration.
πŸ›‘οΈ Host Protection Configuration
When [host protection](https://docs.mirotalk.com/mirotalk-p2p/host-protection/) or host user auth is enabled, the host/users must provide a valid username and password as specified in the `.env` file. | Params | Value | Description | | ---------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | | `HOST_PROTECTED` | `true` if protection is enabled, `false` if not (default false) | Requires the host to provide a valid username and password during room initialization. | | `HOST_USER_AUTH` | `true` if user authentication is required, `false` if not (default false). | Determines whether host authentication is required. | | `HOST_USERS` | JSON array with user objects: `{"username": "username", "password": "password"}` | List of valid host users with their credentials. |
⚑ Quick start
**Start in 6 commands:** ```bash git clone https://github.com/miroslavpejic85/mirotalk.git cd mirotalk cp .env.template .env cp app/src/config.template.js app/src/config.js npm install npm start ``` Open [http://localhost:3000](http://localhost:3000) - done!
🐳 Docker
![docker](public/images/docker.png) **Prerequisites:** Install [Docker Engine](https://docs.docker.com/engine/install/) and [Docker Compose](https://docs.docker.com/compose/install/) - Image available on [Docker Hub](https://hub.docker.com/r/mirotalk/p2p) ```bash git clone https://github.com/miroslavpejic85/mirotalk.git cd mirotalk cp .env.template .env cp app/src/config.template.js app/src/config.js cp docker-compose.template.yml docker-compose.yml docker-compose pull # optional: pull official image docker-compose up # add -d to run in background ``` Open [http://localhost:3000](http://localhost:3000) - done! > **Note:** > Edit `app/src/config.js`, `.env`, and `docker-compose.yml` to customize your setup.
πŸ–₯️ Self-Hosting
![setup](/public/images/self-hosting.png) ## **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. ```bash # Install MiroTalk P2P wget -qO p2p-install.sh https://docs.mirotalk.com/scripts/p2p/p2p-install.sh && chmod +x p2p-install.sh && ./p2p-install.sh # Uninstall MiroTalk P2P wget -qO p2p-uninstall.sh https://docs.mirotalk.com/scripts/p2p/p2p-uninstall.sh && chmod +x p2p-uninstall.sh && ./p2p-uninstall.sh # Update MiroTalk P2P wget -qO p2p-update.sh https://docs.mirotalk.com/scripts/p2p/p2p-update.sh && chmod +x p2p-update.sh && ./p2p-update.sh ```
πŸ”— Embed a Meeting in Your App
![iframe](public/images/iframe.png) To embed a meeting within `your service or app` using an iframe, you can use the following code: ```html ``` ## Widget To quickly add a support [widget](https://codepen.io/Miroslav-Pejic/pen/Byowjvb) to your site, include the script in your `` and place the widget `
` at the end of your ``. Your support widget will be ready instantly! ```html
``` **[Explore Integrations β†’](https://docs.mirotalk.com/mirotalk-p2p/integration/)**
πŸ“š Documentation
- `Ngrok/HTTPS:` You can start a video conference directly from your local PC and make it accessible from any device outside your network by following [these instructions](docs/ngrok.md), or expose it directly on [HTTPS](app/ssl/README.md). - `Stun/Turn:` Install your own [Stun & Turn](https://docs.mirotalk.com/coturn/stun-turn/) by following [this instructions](./docs/coturn.md). - `Self-hosting:` For `self-hosting MiroTalk P2P` on your own dedicated server, please refer to [this comprehensive guide](docs/self-hosting.md). It will provide you with all the necessary instructions to get your MiroTalk P2P instance up and running smoothly. - `REST API:` The [API documentation](https://docs.mirotalk.com/mirotalk-p2p/api/) uses [swagger](https://swagger.io/) at http://localhost:3000/api/v1/docs or check it on live [here](https://p2p.mirotalk.com/api/v1/docs).
πŸ“‘ API Examples ### 1. Get Server Statistics ```bash curl -X GET "http://localhost:3000/api/v1/stats" -H "authorization: mirotalkp2p_default_secret" -H "Content-Type: application/json" curl -X GET "https://p2p.mirotalk.com/api/v1/stats" -H "authorization: mirotalkp2p_default_secret" -H "Content-Type: application/json" curl -X GET "https://mirotalk.up.railway.app/api/v1/stats" -H "authorization: mirotalkp2p_default_secret" -H "Content-Type: application/json" ``` ### 2. Meetings Endpoint (Get active meetings) ```bash curl -X GET "http://localhost:3000/api/v1/meetings" -H "authorization: mirotalkp2p_default_secret" -H "Content-Type: application/json" curl -X GET "https://p2p.mirotalk.com/api/v1/meetings" -H "authorization: mirotalkp2p_default_secret" -H "Content-Type: application/json" curl -X GET "https://mirotalk.up.railway.app/api/v1/meetings" -H "authorization: mirotalkp2p_default_secret" -H "Content-Type: application/json" ``` ### 3. Create Meeting ```bash curl -X POST "http://localhost:3000/api/v1/meeting" -H "authorization: mirotalkp2p_default_secret" -H "Content-Type: application/json" curl -X POST "https://p2p.mirotalk.com/api/v1/meeting" -H "authorization: mirotalkp2p_default_secret" -H "Content-Type: application/json" curl -X POST "https://mirotalk.up.railway.app/api/v1/meeting" -H "authorization: mirotalkp2p_default_secret" -H "Content-Type: application/json" ``` ### 4. Join Meeting (Basic) ```bash curl -X POST "http://localhost:3000/api/v1/join" -H "authorization: mirotalkp2p_default_secret" -H "Content-Type: application/json" --data '{"room":"test","name":"random","avatar":false,"audio":true,"video":true,"screen":false,"chat":false,"hide":false,"notify":true,"duration":"unlimited"}' curl -X POST "https://p2p.mirotalk.com/api/v1/join" -H "authorization: mirotalkp2p_default_secret" -H "Content-Type: application/json" --data '{"room":"test","name":"random","avatar":false,"audio":true,"video":true,"screen":false,"chat":false,"hide":false,"notify":true,"duration":"unlimited"}' curl -X POST "https://mirotalk.up.railway.app/api/v1/join" -H "authorization: mirotalkp2p_default_secret" -H "Content-Type: application/json" --data '{"room":"test","name":"random","avatar":false,"audio":true,"video":true,"screen":false,"chat":false,"hide":false,"notify":true,"duration":"unlimited"}' ``` ### 5. Join Meeting with Token ```bash curl -X POST "http://localhost:3000/api/v1/join" -H "authorization: mirotalkp2p_default_secret" -H "Content-Type: application/json" --data '{"room":"test","name":"random","audio":true,"video":true,"screen":false,"chat":false,"hide":false,"notify":true,"token":{"username":"username","password":"password","presenter":true,"expire":"1h"}}' curl -X POST "https://p2p.mirotalk.com/api/v1/join" -H "authorization: mirotalkp2p_default_secret" -H "Content-Type: application/json" --data '{"room":"test","name":"random","audio":true,"video":true,"screen":false,"chat":false,"hide":false,"notify":true,"token":{"username":"username","password":"password","presenter":true,"expire":"1h"}}' curl -X POST "https://mirotalk.up.railway.app/api/v1/join" -H "authorization: mirotalkp2p_default_secret" -H "Content-Type: application/json" --data '{"room":"test","name":"random","audio":true,"video":true,"screen":false,"chat":false,"hide":false,"notify":true,"token":{"username":"username","password":"password","presenter":true,"expire":"1h"}}' ``` ### 6. Generate Token ```bash curl -X POST "http://localhost:3000/api/v1/token" -H "authorization: mirotalkp2p_default_secret" -H "Content-Type: application/json" --data '{"username":"username","password":"password","presenter":true,"expire":"1h"}' curl -X POST "https://p2p.mirotalk.com/api/v1/token" -H "authorization: mirotalkp2p_default_secret" -H "Content-Type: application/json" --data '{"username":"username","password":"password","presenter":true,"expire":"1h"}' curl -X POST "https://mirotalk.up.railway.app/api/v1/token" -H "authorization: mirotalkp2p_default_secret" -H "Content-Type: application/json" --data '{"username":"username","password":"password","presenter":true,"expire":"1h"}' ``` These commands should now work correctly with the MiroTalk P2P
☁️ Recommended Hosting Providers
| Provider | Description | Link | | ---------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | | [![Cloudron](public/sponsors/Cloudron.png)](https://www.cloudron.io/) | One-click install from the [Cloudron App Store](https://www.cloudron.io/store/index.html). Automates deployment, updates, backups, and user management. | [Get Started](https://www.cloudron.io/) | | [![Hetzner](public/sponsors/Hetzner.png)](https://www.hetzner.com) | One of the best [cloud providers](https://www.hetzner.com/cloud) and [dedicated root servers](https://www.hetzner.com/dedicated-rootserver). Used for our live demo. | [Get €20 Free Credits](https://hetzner.cloud/?ref=XdRifCzCK3bn) | | [![Netcup](public/sponsors/Netcup.png)](https://www.netcup.com/en/?ref=309627) | Enterprise-grade performance at unbeatable prices. Scalable and reliable. | [Explore Netcup](https://www.netcup.com/en/?ref=309627) | | [![Hostinger](public/advertisers/Hostinger.png)](https://hostinger.com/?REFERRALCODE=MIROTALK) | Fast, reliable hosting with 24/7 support and great performance. | [Check out Hostinger](https://hostinger.com/?REFERRALCODE=MIROTALK) | | [![Contabo](public/advertisers/Contabo.png)](https://www.dpbolvw.net/click-101027391-14462707) | Top-tier German hosting, dedicated servers, VPS, and web hosting at unbeatable prices. | [Explore Contabo](https://www.dpbolvw.net/click-101027391-14462707) | To set up your own instance of `MiroTalk P2P` on a dedicated cloud server, please refer to our comprehensive [self-hosting documentation](https://docs.mirotalk.com/mirotalk-p2p/self-hosting/).
πŸ™ Credits
- ianramzy (html [template](https://cruip.com/demos/neon/)) - vasanthv (webrtc-logic) - fabric.js (whiteboard)
🀝 Contributing
Contributions are welcome and greatly appreciated! Whether it's bug fixes, features, or documentation - every contribution helps. 1. Fork the repository 2. Create your feature branch 3. Run `npm run lint` before committing 4. Submit a pull request Have questions? Join our [Discord community](https://discord.gg/rgGYfeYW3N)!
πŸ“„ License
[![AGPLv3](public/images/AGPLv3.png)](LICENSE) MiroTalk P2P is free and open-source under the terms of AGPLv3 (GNU Affero General Public License v3.0). Please `respect the license conditions`, In particular `modifications need to be free as well and made available to the public`. Get a quick overview of the license at [Choose an open source license](https://choosealicense.com/licenses/agpl-3.0/). To obtain a [MiroTalk P2P license](https://docs.mirotalk.com/license/licensing-options/) with terms different from the AGPLv3, you can conveniently make your [purchase on CodeCanyon](https://codecanyon.net/item/mirotalk-p2p-webrtc-realtime-video-conferences/38376661). This allows you to tailor the licensing conditions to better suit your specific requirements.
Support the project
Do you find MiroTalk P2P indispensable for your needs? Join us in supporting this transformative project by [becoming a backer or sponsor](https://github.com/sponsors/miroslavpejic85). By doing so, not only will your logo prominently feature here, but you'll also drive the growth and sustainability of MiroTalk P2P. Your support is vital in ensuring that this valuable platform continues to thrive and remain accessible for all. Make an impact - back MiroTalk P2P today and be part of this exciting journey! | | | | | ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | | [![Cloudron](public/sponsors/Cloudron.png)](https://cloudron.io) | [![EffectsSDK](public/sponsors/EffectsSDK.png)](https://effectssdk.ai/) | [![QuestionPro](public/sponsors/QuestionPro.png)](https://www.questionpro.com) | | [![TestMuAI](public/sponsors/TestMuAIBlack.svg)](https://www.testmuai.com/?utm_medium=sponsor&utm_source=mirotalk) | [![BrowserStack](public/sponsors/BrowserStack.png)](https://www.browserstack.com) | [![CrystalSound](public/sponsors/CrystalSound.png)](https://crystalsound.ai) | | [![Netcup](public/sponsors/Netcup.png)](https://www.netcup.com/en/?ref=309627) | | |
Past Sponsors
We are grateful to our past sponsors for their support! | | | | | -------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------------------------------------------------------------- | | [![Hetzner](public/sponsors/HetznerLogo.png)](https://hetzner.cloud/?ref=XdRifCzCK3bn) | [![Kiquix](public/sponsors/KiquixLogo.png)](https://kiquix.com) | [![BroadcastX](public/sponsors/BroadcastX.png)](https://broadcastx.de/) | | [![LuvLounge](public/sponsors/LuvLounge.png)](https://luvlounge.ca) | | |
Advertisers --- | | | | | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | | [![Hostinger](public/advertisers/Hostinger.png)](https://hostinger.com/?REFERRALCODE=MIROTALK) | [![Contabo](public/advertisers/Contabo.png)](https://www.dpbolvw.net/click-101027391-14462707) | [![Rambox](public/advertisers/RamboxLogo.png)](https://rambox.app?via=mirotalk) | ---
## EffectsSDK ✨ [![EffectsSDK](public/sponsors/EffectsSDK.png)](https://effectssdk.ai/) `Enhance your video conferencing` experience with `advanced virtual backgrounds` and `noise suppression`. EffectsSDK offers powerful SDKs and plugins for fast integration. **Explore:** - πŸŽ₯ **[AI Video Effects Extension](https://chromewebstore.google.com/detail/effetti-webcam-ai-+-regis/iedbphhbpflhgpihkcceocomcdnemcbj)** - Add virtual backgrounds and effects to your webcam. - πŸ”Š **[Noise Cancelling Extension](https://chromewebstore.google.com/detail/noise-cancelling-app/njmhcidcdbaannpafjdljminaigdgolj)** - Reduce background noise for clearer audio. - πŸ› οΈ **[Integrate EffectsSDK](https://github.com/EffectsSDK)** - Access SDKs and plugins for custom solutions. --- ## 🌐 Diving into Additional MiroTalk Projects:
MiroTalk SFU
Try also [MiroTalk SFU](https://github.com/miroslavpejic85/mirotalksfu) `selective forwarding unit` real-time video conferences, optimized for large groups. `Unlimited time, unlimited concurrent rooms` each having 8+ participants, up to ~ 100 per single CPU.
MiroTalk C2C
Try also [MiroTalk C2C](https://github.com/miroslavpejic85/mirotalkc2c) `peer to peer` real-time video conferences, optimized for cam 2 cam. `Unlimited time, unlimited concurrent rooms` each having 2 participants.
MiroTalk BRO
Try also [MiroTalk BRO](https://github.com/miroslavpejic85/mirotalkbro) `Live broadcast` (peer to peer) live video, audio and screen stream to all connected users (viewers). `Unlimited time, unlimited concurrent rooms` each having a broadcast and many viewers.
MiroTalk WEB
Try also [MiroTalk WEB](https://github.com/miroslavpejic85/mirotalkwebrtc) a platform that allows for the management of an `unlimited number of users`. Each user must register with their email, username, and password, after which they gain access to their `personal dashboard`. Within the dashboard, users can `manage their rooms and schedule meetings` using the desired version of MiroTalk on a specified date and time. Invitations to these meetings can be sent via email, shared through the web browser, or sent via SMS.
--- This project is tested with [BrowserStack](https://www.browserstack.com). --- ## Star History If you like this project, please star it - every star helps more people discover this free Zoom alternative! [![Star History Chart](https://api.star-history.com/svg?repos=miroslavpejic85/mirotalk&type=Date)](https://star-history.com/#miroslavpejic85/mirotalk&Date) ---

Built with ❀️ by Miroslav and the open-source community

If you find MiroTalk P2P useful, please ⭐ Star it on GitHub - it helps others discover this project!
⭐ Star MiroTalk P2P on GitHub