Mumble
Open source, lowest latency, positional audio, ~20 MB RAM at idle. The pick for serious gaming and ops comms where you want the lightest thing that just works.
A VPS and ten minutes gets you a Mumble or TeamSpeak server you actually own. No data harvesting, no Electron bloat, no account bans, no outages. Just crystal clear voice that stays up because you control it.
Every option on this page runs on a VPS you rent and control. No lock in, no subscription, no company reading your channels. Pick the shape that fits your group.
Open source, lowest latency, positional audio, ~20 MB RAM at idle. The pick for serious gaming and ops comms where you want the lightest thing that just works.
The server browser era vibe. Channels, permissions, file transfer, query interface. Lighter than Mumble in some ways and used by clans for nearly two decades.
The new client. Channels and categories, text chat, friends list, voice. Discord's layout, except it lives on your server. Heavier than Mumble, full community platform.
Discord is convenient. It is also a closed, for-profit platform that scans your channels, ships a locked down client, and can nuke your community overnight. Self hosting flips all of that.
Closed US backend, no end-to-end encryption, ML training on your content. Your "private" server is private only in the UI.
One ban or hack takes every server, DM, and contact with it. There is no key you control and no appeal process that matters.
Chromium with extra steps. Hundreds of MB of RAM to render a chat window. Mumble's native client idles around 30 MB.
Discord picks the region for you. A self hosted box sits next to your players and stays there. Deterministic, measurable, sub-30 ms.
Your server is a row in their database. Self host and you own the box, the backups, the limits, and the portability.
Your data and attention are the product. A $4-$6 VPS runs all three servers for less than one Nitro sub - and it's just a Linux box you can use for anything.
No marketing fluff. The real differences that change which one you pick.
| Feature | Discord | Mumble | TeamSpeak 3 | TeamSpeak 6 |
|---|---|---|---|---|
| Self hosted | no | yes | yes | yes |
| Own your data | no | yes | yes | yes |
| Voice latency | med | very low | very low | low |
| Text chat | yes | basic | basic | yes |
| Categories / channels | yes | tree | tree | yes |
| Friends / presence | yes | no | manual | yes |
| Server RAM at idle | >300 MB | ~20 MB | ~40 MB | ~120 MB |
| Open source server | no | yes | no | no |
| Open source clients | no | yes | yes | yes |
| Account bans affect you | yes | no | no | no |
| Fits on a $5 VPS | n/a | yes | yes | tight |
Each guide runs on any Debian or Ubuntu VPS with SSH access. Copy the commands, paste, done. Need a box first? Pick a VPS host.
Mumble is open source voice chat built for low latency and minimal overhead. The server is called Murmur, it speaks Opus, and it idles around 20 MB of RAM. The lightest, fastest thing that just works.
On Debian and Ubuntu the package is mumble-server. Some older docs call it murmur - same software, newer packaging.
root@voice-host:~$ apt update root@voice-host:~$ apt install -y mumble-server # pulls in the binary, config, and a systemd unit named mumble-server
Edit /etc/mumble-server.ini and set the values that matter. The defaults work, but you want a few changed:
# name shown at the top of the channel tree registerName=My Crew # welcome message shown on connect welcometext="<br /><b>welcome to my mumble</b><br />mind your mic." # voice (UDP) and control (TCP) port. default is 64738. port=64738 # max users. 100 is plenty for a clan. users=100 # bandwidth per user in bits/sec. 72000 is high quality opus. bandwidth=72000
root@voice-host:~$ systemctl restart mumble-server root@voice-host:~$ systemctl status mumble-server Active: active (running)
Murmur's built-in admin account is called SuperUser. It manages channels and permissions from a client. Set its password once, before anything else:
root@voice-host:~$ mumble-server -supw 'pick-a-long-random-password' SuperUser password set
Murmur listens on port 64738 for UDP (voice) and TCP (control). Open both:
root@voice-host:~$ ufw allow 64738/udp root@voice-host:~$ ufw allow 64738/tcp root@voice-host:~$ ufw reload
Add an A record for voice.yourdomain.com pointing at the VPS IP. Verify it's listening:
root@voice-host:~$ ss -lunp | grep 64738 udp UNRECV 0 0 0.0.0.0:64738 users:(("mumble-server",pid=...)) root@voice-host:~$ ss -ltnp | grep 64738 tcp LISTEN 0 0 0.0.0.0:64738 users:(("mumble-server",pid=...))
If your domain is behind the Cloudflare proxy (orange cloud), do not proxy the voice record - it only forwards HTTP/HTTPS, not UDP. Set it to DNS only (grey cloud), or just have clients connect to the raw VPS IP. This applies to every guide here.
Grab the official client from mumble.info, or Mumla (Android) / MumbleAF (iOS). Run the audio wizard and certificate wizard once, then Server → Connect - address voice.yourdomain.com, port 64738. Right-click the server name and Register to keep your identity. A self-signed cert warning on first connect is expected; accept it for your own server.
Log in as SuperUser from the client. Right-click the root channel to Add channels and Edit passwords and limits. The Groups and ACL tabs set who can do what - build a small admin group once and you rarely log in as SuperUser again. Mumble has no Discord-style roles; think groups of registered users plus per-channel ACLs.
Remove the self-signed warning with a Let's Encrypt cert: certbot certonly --standalone -d voice.yourdomain.com, then point sslCert= and sslKey= at the cert paths in the ini. Worth doing after it's live: back up /var/lib/mumble-server/mumble-server.sqlite (channels, users, ACLs), tune bandwidth down to 40000 for bad connections, and enable positional audio in the client for supported games.
A single binary, no package manager, no container. Channels, permissions, file transfer, and a query interface. Lightweight enough for the cheapest box, battle tested for nearly two decades.
Create a dedicated user, then grab the 64-bit Linux server binary. Confirm the current version on the TeamSpeak downloads page.
# create a dedicated user with no shell login root@voice-host:~$ useradd -m -s /bin/bash teamspeak # become that user and download the server root@voice-host:~$ su - teamspeak teamspeak@voice-host:~$ wget https://files.teamspeak-services.com/releases/server/3.13.7/teamspeak3-server_linux_amd64-3.13.7.tar.bz2 teamspeak@voice-host:~$ tar xjf teamspeak3-server_linux_amd64-3.13.7.tar.bz2 teamspeak@voice-host:~$ cd teamspeak3-server_linux_amd64 # accept the license and create a config file teamspeak@voice-host:~/teamspeak3-server_linux_amd64$ touch .ts3server_license_accepted teamspeak@voice-host:~/teamspeak3-server_linux_amd64$ echo "license_accepted=1" > ts3server.ini # first run. note the serveradmin password and the privileged key. teamspeak@voice-host:~/teamspeak3-server_linux_amd64$ ./ts3server_minimal_runscript.sh inifile=ts3server.ini ------------------------------------------------------------------ I M P O R T A N T ------------------------------------------------------------------ Server Query Admin Account created loginname= "serveradmin", password= "AaBbCc..." ServerAdmin privilege key created, please use it to gain serveradmin rights for your virtualserver. token= r4nD0mPr1v1l3g3k3y... ------------------------------------------------------------------
The serveradmin password and the privilege token are printed only once. The token promotes your client to owner; the password is for ServerQuery. Copy them somewhere safe right now.
| Port | Proto | Use |
|---|---|---|
| 9987 | UDP | Voice |
| 30033 | TCP | File transfer |
| 10011 | TCP | ServerQuery (admin) |
root@voice-host:~$ ufw allow 9987/udp root@voice-host:~$ ufw allow 30033/tcp root@voice-host:~$ ufw allow 10011/tcp root@voice-host:~$ ufw reload
ServerQuery is powerful. If you script against it, restrict 10011 to localhost or a small allowlist. Never leave it open to the world on a community box.
Install the client from teamspeak.com. Connections → Connect: address voice.yourdomain.com, port 9987, any nickname. Paste the privilege key when prompted - your client is now ServerAdmin. Right-click to create channels, set passwords and codecs, and use Permissions → Server Groups to build admin/mod groups that replace Discord roles.
The runscript is for testing. Run it under systemd so it survives reboots:
[Unit] Description=TeamSpeak 3 Server After=network.target [Service] WorkingDirectory=/home/teamspeak/teamspeak3-server_linux_amd64 User=teamspeak Group=teamspeak Type=forking ExecStart=/home/teamspeak/teamspeak3-server_linux_amd64/ts3server_startscript.sh start inifile=ts3server.ini ExecStop=/home/teamspeak/teamspeak3-server_linux_amd64/ts3server_startscript.sh stop PIDFile=/home/teamspeak/teamspeak3-server_linux_amd64/ts3server_server.pid Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target
root@voice-host:~$ systemctl daemon-reload root@voice-host:~$ systemctl enable --now ts3server root@voice-host:~$ systemctl status ts3server Active: active (running)
Point certificate= and certificate_key= at a Let's Encrypt cert in ts3server.ini (same certbot flow as Mumble) and clients stop seeing the warning. Make sure the teamspeak user can read the files, and add a renew hook that restarts the service.
The refreshed client: text channels, categories, friends list, presence, and voice in a sidebar that will look familiar. Heavier than Mumble and a touch heavier than TS3, but a full community platform on your hardware.
Reuse the teamspeak user from the TS3 section, then grab the latest Linux server from the GitHub releases page. The archive is a .tar.xz that extracts in place - there is no wrapper folder and no runscript in the current build. TS6 is under active development, so names can shift between builds.
root@voice-host:~$ su - teamspeak teamspeak@voice-host:~$ wget <copy the linux-amd64.tar.xz URL from the GitHub releases page> # paste the archive URL from github.com/teamspeak/teamspeak6-server/releases into wget. teamspeak@voice-host:~$ tar -xf teamspeak6-server-linux-amd64.tar.xz # accept the license. tsserver runs from the directory you extracted into. teamspeak@voice-host:~$ touch .tsserver_license_accepted # first run. save the serveradmin password and apikey - printed only once. teamspeak@voice-host:~$ ./tsserver ------------------------------------------------------------------ I M P O R T A N T ------------------------------------------------------------------ Server Query Admin Account created loginname= "serveradmin", password= "AaBbCc..." apikey= "r4nD0mAp1k3y..." ------------------------------------------------------------------
Same family as TS3, plus HTTPS for the account web and TSDNS:
| Port | Proto | Use |
|---|---|---|
| 9987 | UDP | Voice |
| 30033 | TCP | File transfer |
| 10011 | TCP | ServerQuery |
| 443 / 80 | TCP | TSDNS / account web (optional) |
root@voice-host:~$ ufw allow 9987/udp root@voice-host:~$ ufw allow 30033/tcp root@voice-host:~$ ufw allow 10011/tcp root@voice-host:~$ ufw reload
Same caveats as TS3: keep 10011 restricted and grey-cloud the voice subdomain (UDP does not go through the Cloudflare proxy).
The TS6 client uses a global TeamSpeak account for friends and presence - separate from your server admin credentials. First launch walks you through creating it. Then Connections → Connect, and use the serveradmin password or the apikey from first run to manage the server, then build categories with voice and text channels inside. Find people by account handle to add friends and see cross-server presence.
There are no runscripts in the current build - the tsserver binary is the whole server and it runs in the foreground. systemd keeps it alive:
[Unit] Description=TeamSpeak 6 Server After=network.target [Service] WorkingDirectory=/home/teamspeak User=teamspeak Group=teamspeak Type=simple ExecStart=/home/teamspeak/tsserver Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target
root@voice-host:~$ systemctl daemon-reload root@voice-host:~$ systemctl enable --now ts6server root@voice-host:~$ systemctl status ts6server Active: active (running)
| TeamSpeak 3 | TeamSpeak 6 | |
|---|---|---|
| Layout | Channel tree, chat tabs | Categories + sidebar, Discord shaped |
| Text chat | Per channel, basic | Full text channels inside categories |
| Friends / presence | Manual, per server | Global friends list, cross server presence |
| Server RAM at idle | ~40 MB | ~120 MB |
| VPS sweet spot | 1 GB cheap box | 2 GB box |
| Best for | Pure voice, classic vibe | Community hangout, text + voice + friends |
Murmur, TS3, and TS6 all fit on a single 2 GB box. One IP, three ports, three communities if you want. Lots of people run both: Mumble for rostered ops, TS6 for the casual hangout.
You don't need anything fancy. A 1 GB Linux box runs Mumble or TeamSpeak 3 with room to spare. These two are the picks I use.
Best price per GB on the market. Loads of RAM for big communities and multiple servers on one box.
Hourly billing, 13 data centers, custom configs. Great for a tiny box or a region close to your players.
Mumble and TeamSpeak 3 idle around 20-40 MB each. TS6 sits closer to 120 MB plus chat history. A 1 GB box handles Mumble + TS3 side by side. Move to 2 GB once you add TS6 and a web server.
Disclosure: the host links above are affiliate referrals. They cost you nothing and keep this site ad free and tracker free.
The things people ask before they self host. Short versions, the details are in the guides above.
Mumble is open source voice chat built for low latency and minimal overhead. The server software is called Murmur, it uses the Opus codec, supports positional audio in games, and idles around 20 MB of RAM. See the Mumble setup guide.
Mumble if you want the lightest, lowest latency pure voice server. TeamSpeak 3 if you want the classic channel and permission server. TeamSpeak 6 if you want a Discord style layout with text channels, categories, and a friends list. Many groups run both: Mumble for ops, TS6 for the casual hangout. See the full comparison.
Yes. A Linux VPS you control is the point of self hosting - you rent the box, you own the server. Any 1 GB Debian or Ubuntu VPS runs Mumble or TeamSpeak 3 with room to spare. See the host picks.
Just the VPS, typically $4-$6 per month - less than a single Discord Nitro subscription. The software is free: Mumble is open source, and TeamSpeak is free for personal and small clan use. See the official TeamSpeak licensing page for the details.
The servers are free to run. You pay for the VPS hardware and for your time setting it up - roughly ten minutes per server with these guides. There are no per-user fees and nothing is behind a paywall like Nitro.
Yes. Murmur, TeamSpeak 3, and TeamSpeak 6 all fit on a single 2 GB box: one IP, three ports, three communities if you want. Each has its own systemd service.