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.
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.
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 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- 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
- Slack and Mattermost integrations
- Sentry error reporting
- Customizable UI themes
- Meeting duration control (HH:MM:SS)
- Embeddable via iframe & widget
- And much more...
🔗 Direct Join
- You can
directly join a roomby 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
tokenparameter are optional when eitherHOST_PROTECTEDorHOST_USER_AUTHis set totruein the.envfile. The valid list of users is defined in theHOST_USERSconfiguration.
🛡️ Host Protection Configuration
When 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:
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 - done!
🐳 Docker
Prerequisites: Install Docker Engine and Docker Compose - Image available on Docker Hub
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 - done!
Note: Edit
app/src/config.js,.env, anddocker-compose.ymlto customize your setup.
🖥️ Self-Hosting
Requirements
- A
clean serverrunning 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 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
To embed a meeting within your service or app using an iframe, you can use the following code:
<iframe
allow="camera; microphone; speaker-selection; display-capture; fullscreen; clipboard-read; clipboard-write; web-share; autoplay; picture-in-picture"
src="https://p2p.mirotalk.com/newcall"
style="height: 100vh; width: 100vw; border: 0px;"
></iframe>
Widget
To quickly add a support widget to your site, include the script in your <head> and place the widget <div> at the end of your <body>. Your support widget will be ready instantly!
<!doctype html>
<html>
<head>
<script src="https://p2p.mirotalk.com/js/widget.js"></script>
</head>
<body>
<div
id="support-widget"
data-mirotalk-auto
data-domain="p2p.mirotalk.com"
data-room="support-room"
data-theme="dark"
data-widget-type="support"
data-widget-state="normal"
data-position="bottom-right"
data-check-online="false"
data-expert-images="https://i.pravatar.cc/40?img=1,https://i.pravatar.cc/40?img=2,https://i.pravatar.cc/40?img=3"
data-buttons="audio,video,screen,chat,join"
data-heading="Need Help?"
data-subheading="Get instant support from our expert team!"
data-connect-text="connect in < 5 seconds"
data-online-text="We are online"
data-offline-text="We are offline"
data-powered-by="Powered by MiroTalk"
></div>
</body>
</html>
📚 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, or expose it directly on HTTPS. -
Stun/Turn:Install your own Stun & Turn by following this instructions. -
Self-hosting:Forself-hosting MiroTalk P2Pon your own dedicated server, please refer to this comprehensive guide. It will provide you with all the necessary instructions to get your MiroTalk P2P instance up and running smoothly. -
REST API:The API documentation uses swagger at http://localhost:3000/api/v1/docs or check it on live here.
📡 API Examples
1. Get Server Statistics
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)
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
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)
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
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
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
Cloudron, Hetzner, Netcup, Hostinger & Contabo
MiroTalk integrates with Cloudron, enabling easy, secure, and self-managed video conferencing for organizations. Cloudron automates deployment, updates, backups, and user management, letting teams focus on collaboration instead of server maintenance. Install MiroTalk in one click from the Cloudron App Store and enjoy a reliable, enterprise-ready solution.
This application is running for demonstration purposes on Hetzner, one of the best cloud providers and dedicated root servers.
👉 Use our referral link to receive €20 IN CLOUD CREDITS.
Unlock enterprise-grade performance at a price you won’t believe.
Scalable, reliable, and built for businesses that demand more.
👉 Power Meets Value with Netcup Root Server
Fast, reliable hosting with 24/7 support and great performance. Start today!
Experience also top-tier German web hosting – dedicated servers, VPS, and web hosting at unbeatable prices.
To set up your own instance of MiroTalk P2P on a dedicated cloud server, please refer to our comprehensive self-hosting documentation. This guide will walk you through the process step by step, ensuring a smooth and successful deployment.
🤝 Contributing
Contributions are welcome and greatly appreciated! Whether it's bug fixes, features, or documentation - every contribution helps.
- Fork the repository
- Create your feature branch
- Run
npm run lintbefore committing - Submit a pull request
Have questions? Join our Discord community!
📄 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.
To obtain a MiroTalk P2P license with terms different from the AGPLv3, you can conveniently make your purchase on CodeCanyon. 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. 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!
![]() |
![]() |
![]() |
![]() |
![]() |
|
![]() |
EffectsSDK ✨
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 - Add virtual backgrounds and effects to your webcam.
- 🔊 Noise Cancelling Extension - Reduce background noise for clearer audio.
- 🛠️ Integrate EffectsSDK - Access SDKs and plugins for custom solutions.
🌐 Diving into Additional MiroTalk Projects:
MiroTalk SFU
Try also MiroTalk SFU 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 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 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 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.
Star History
If you like this project, please star it - every star helps more people discover this free Zoom alternative!
Built with ❤️ by Miroslav and the open-source community




















