ArcingTime Meetings

Free, Self-Hosted Video Conferencing

Your server. Your data. No cloud. No subscription.

Host-controlled waiting room — admit or decline guests individually
Encrypted invite links that expire in 48 hours
Automatic quality selection based on your server's bandwidth and CPU
Audio-only fallback — always available regardless of hardware
No tracking, no cloud dependency, no subscription fees
No account or download required for guests — just a link
Rocky Linux ≥ 9.7 — Recommended
RHEL-based, enterprise-grade, SELinux enforcing by default. This is the platform the application is developed and tested on.
AlmaLinux ≥ 9 — Compatible
RHEL-based alternative to Rocky Linux.
Debian — Untested
Originally built for desktop end users, not enterprise servers. Not tested with this application.
Ubuntu — Untested
Debian-based. Same caveats apply — not tested with this application.
Static IP Address
Your server must have a static public IP so guests can reliably reach it. Dynamic IPs will cause connection failures without a DDNS service. Most ISP providers can assign you a static IP to your home. With this and a domain you can add a host record to point to your meetings server (ie. https://meetings.yourdomain.com )
Registered Domain with SSL Certificate
A domain with a valid SSL certificate is required. A subdomain is recommended — meetings.yourdomain.com — for clean isolation and easy install.
Static VPN — Alternative to a Native Static IP
If your ISP cannot provide a static IP, a dedicated-IP VPN add-on (such as PureVPN — the only provider we've confirmed offers this for self-hosted servers) is a viable alternative. The firewall, router, and LiveKit node_ip must all be configured specifically for the VPN interface.
Without These — Browsers Will Block the Call
Camera and microphone access requires HTTPS. Without a valid domain and SSL, guests will receive browser security denials and cannot join video calls.
Router Port Forwarding Home & Office only — not required for CO-LO
Port Protocol Service
80TCPHTTP (Let's Encrypt / certbot)
443TCPHTTPS
7880TCPLiveKit WebSocket (signaling)
7881TCPLiveKit TCP fallback
50000UDPLiveKit media (RTP/RTCP)

firewalld Rocky Linux / RHEL — Recommended
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=7880/tcp
firewall-cmd --permanent --add-port=7881/tcp
firewall-cmd --permanent --add-port=50000/udp
firewall-cmd --reload
UFW Debian / Ubuntu
ufw allow 80/tcp && ufw allow 443/tcp && ufw allow 7880/tcp && ufw allow 7881/tcp && ufw allow 50000/udp && ufw enable
iptables Manual / Legacy
iptables -A INPUT -p tcp -m multiport --dports 80,443,7880,7881 -j ACCEPT
iptables -A INPUT -p udp --dport 50000 -j ACCEPT
iptables-save > /etc/iptables/rules.v4

SELinux Rocky Linux / RHEL only
SELinux is enforcing by default. These steps are required or the application will be blocked at the network level.
semanage port -a -t http_port_t -p tcp 7880
semanage port -a -t http_port_t -p tcp 7881
setsebool -P httpd_can_network_connect 1
setsebool -P httpd_can_network_connect_db 1
⚠ Do not use setenforce 0 in production — fix the labels and booleans instead.
Level 1
Minimum
CPU4 cores
RAM8 GB
Upload25 Mbps
Storage128 GB SSD

1080p Full HD4 guests
720p HD6 guests
480p12 guests
360p21 guests
Audio only64 guests
Level 2
Medium
CPU8 cores
RAM16 GB
Upload100 Mbps
Storage256 GB SSD

1080p Full HD8 guests
720p HD12 guests
480p25 guests
360p42 guests
Audio only128 guests
Level 3
Optimal
CPU16 cores
RAM32 GB
Upload300 Mbps
Storage512 GB SSD

1080p Full HD17 guests
720p HD25 guests
480p51 guests
360p85 guests
Audio only256 guests

Estimated by Claude Sonnet 4.6 using built-in bandwidth & CPU models · Live tests pending

Backend Django 6, Django Channels, Daphne (ASGI)
Media server LiveKit (self-hosted SFU)
Reverse proxy Apache (mod_proxy + mod_proxy_wstunnel)
Database MariaDB >= 10.11 Rocky Linux 9 AppStream default
Cache / Channel layer Redis
My Profile panel
Meeting Lobby panel
Invite Guests panel
Email invite

Getting Started

Everything you need before and after running the installer — in order.

1
Provision your server OS tabHardware tab
Rocky Linux 9 on bare metal, a VPS, or a CO-LO box. Minimum 4 cores / 8 GB RAM / 25 Mbps upload. A static public IP is required — see the Network & Domain tab if your ISP won't provide one.
2
Configure your domain & SSL Network & Domain tab
Point a subdomain A record at your static IP. Then use Certbot to issue a Let's Encrypt certificate. Camera and microphone access will be blocked without HTTPS.
sudo dnf install certbot python3-certbot-apache -y sudo certbot --apache -d meetings.yourdomain.com
3
Open your firewall & router Router & Firewall tab
Forward ports 80, 443, 7880, 7881 (TCP) and 50000 (UDP) on your router if on a home or office network. Then open them in firewalld.
firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp \ --add-port=7880/tcp --add-port=7881/tcp --add-port=50000/udp firewall-cmd --reload
4
Clone the repository
Clone from GitLab and enter the project directory.
git clone https://gitlab.com/arcingtime/django/meetings cd meetings
5
Run the installer
The installer sets up the Python virtual environment, downloads the LiveKit server binary, generates secrets, creates .env and livekit.yaml, runs database migrations, and collects static files.
./install.sh
6
Start the server
Starts Daphne (ASGI) and the LiveKit media server. The URL will be printed to the terminal.
./start.sh
7
Complete first-run setup
Visit your domain in a browser. The first-run screen will prompt you to create the host account and enter your server's upload speed.
8
Set up for production
Configure systemd service units so the server starts automatically on boot and survives reboots. Full instructions in docs/install/LINUX.md.