- Port of Mumble's CryptStateOCB2 (XEX* counter-measures, late/lost/replay handling, nonce resync), verified against Mumble's OCB2 test vectors - UDP channel per connection in the main process, to the address the TLS connection reached; used only while the server answers UDP pings, falls back to the TCP tunnel automatically; "voice over TCP only" setting - Voice statistics show the live transport - Information dialog no longer infers the transport from ping counters - Message box: no padding, input fills the bar; Edit HTML only in descriptions Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
12 KiB
mumh5
Mumble, the way it should feel in 2026.
mumh5 is a modern client for Mumble, the free, open source, low-latency voice chat. It gives Mumble the kind of interface people know from Discord: servers on the left, channels and people in the middle, chat that can do more than text. Underneath, it's plain Mumble, so it connects to any existing Mumble server without changing anything on the server side.
Your community keeps its own server, its own rules and its own data. You get an app that's nice to use.
Why mumh5
Mumble has the best foundation of any voice chat: tiny latency, strong encryption, self-hosting, no accounts, no ads, no tracking. What held it back was the desktop client, which still looks and behaves like 2010.
mumh5 keeps the foundation and replaces the experience.
- Works with the servers you already use. No plugins, no server changes, no migration. Friends on the regular Mumble client see you and hear you like anyone else.
- Feels familiar. A server rail, a channel tree, a real chat with message grouping, profiles, right-click menus everywhere. Anyone who has used Discord knows where things are.
- Chat that is actually useful. Drop in files, paste screenshots, share videos and YouTube links. Formatting works, links work, and everything stays compatible with the desktop client.
- Several servers at once. Stay in the text chat of every server you like, with unread badges, while voice runs where you actually are.
- Private by default. Opening a chat never contacts servers you didn't choose. No remote images or trackers, and YouTube stays click-to-play.
- Runs everywhere. Windows, macOS and Linux, with a layout that also works on narrow windows and small screens.
mumh5 compared to the Mumble desktop client
| Mumble desktop | mumh5 | |
|---|---|---|
| Interface | Qt widgets, dense dialogs | Modern layout: server rail, channel tree, chat, side panels |
| Several servers at the same time | One connection | Many; voice on one, text on all, unread badges |
| Sharing files | Images only, pasted inline and heavily limited | Any allowed file through your own f0ckm host, inline players for images, video and audio. Images still work without one |
| YouTube links | Plain links | Click-to-play player (privacy mode), optional thumbnails |
| Link previews | None | Title, description and image, fetched by your upload host so linked sites never see your IP |
| Chat per channel | One shared log for everything | Separate chats per channel and person, plus a side chat for any channel next to your own |
| Descriptions | Rich text editor | Rich text editor with pictures, and a live size counter against the server limit |
| Identities | One certificate per installation | Several identities, a different one per server if you like; imports your desktop certificate |
| Server certificate trust | Remembered after a warning dialog | Pinned on first use, green header for CA-signed servers, full chain viewer |
| Fast actions in a row | The server silently drops them past its rate limit | Paced to the server's limit, nothing gets lost |
| Right-click on mute or deafen | Nothing | Quick device and volume options |
| Look | One Qt style (plus skins) | Five built-in color schemes, including Windows 95 |
| Channel and permission editing | Dialogs, drag and drop | Same power: create, edit, link, drag and drop, rule and group editor |
Where the desktop client is still ahead, today: system-wide push-to-talk, whisper and shout, positional audio, the in-game overlay, recording, and the ban list and registered-user editors. These are on the roadmap below.
Features
Voice
- Opus voice with voice activity detection, push to talk or always-on
- Live level meter with an adjustable threshold, so you set it once and forget it
- Noise suppression, echo cancellation and automatic gain control
- Microphone and output device selection, input and output volume
- Per-person volume (0 to 300%) and "mute for me"
- Speaking indicators in the channel tree, member list and your own panel
- On small windows, your voice channel appears as tiles above the chat, lighting up as people talk, with mute and deafen at hand
- Low-latency voice over encrypted UDP (Mumble's OCB2-AES128), with automatic fallback to the TCP connection and a TCP-only switch
- Bitrate automatically limited to what the server allows
- Right-click the mute or deafen button for quick device and volume options
- Hear-yourself microphone test
Channels and people
- Channel tree that starts collapsed; channels with people in them open up
- Single click previews a channel's description, double click joins
- Side chat: write in any channel without leaving yours
- Profiles with rich descriptions (formatting, lists, links, pictures), local nicknames, registration status
- Change your name (mumh5 reconnects for you) and register on a server with one click
- Connection information: ping, packet loss, client version and, for admins, the user's certificate chain
- Moderation from the right-click menu: move, server mute and deafen, priority speaker, kick, ban, register
- Channel management: create, edit, delete, link, and drag and drop channels and people
- Full permission editor: rules per channel with inheritance, groups and members, like the desktop ACL editor
- If you get kicked, you see who kicked you and why, with a Reconnect button
Chat
- Messages grouped by author, direct messages, unread badges
- File sharing: drag and drop, paste, or the attach button, with upload progress
- Inline images, video and audio players for shared media
- YouTube links as click-to-play players
- Link previews with title, description and image; fetched by your upload host by default, so posting a link cannot reveal who reads it
- Incoming HTML is sanitized; remote images from unknown hosts are never loaded
- Messages stay compatible with the desktop client, including picture previews
Color schemes
Dark, Light, Midnight (true black), Frost, and a faithful Windows 95 theme with beveled buttons, navy title bars and the teal desktop.
| Windows 95 | Light | Frost | Midnight |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Sounds
- Notification sounds for joins, leaves, messages, mute, push to talk, kicks and more
- Replace any sound with your own file, or load a whole sound pack at once (matched by file name)
Servers and identity
- Server rail with custom icons, drag-and-drop ordering, connection status and unread counts
- Public server browser with live user counts and ping, like the desktop client
- Several servers connected at once; voice follows the channel you join
- Identity setup wizard: create a new certificate, import a
.p12, or reuse your desktop Mumble identity - Password-protected backups of your identity
- Trust on first use for server certificates, a green header for CA-signed ones, and a certificate viewer
- Tray icon that shows whether you are talking, muted or deafened
Getting started
There are no release builds yet. For now, build it yourself; it takes a few minutes.
You need Node.js 22 or newer and git.
git clone gitea@git.lat:kibi/mumh5.git
cd mumh5
npm install
npm run dev
On first start, mumh5 asks you to set up your identity. If you already use Mumble on this computer, pick "Use my Mumble desktop identity" to keep your registrations. Then add a server with the plus button.
Building installers
npm run dist:linux # AppImage and .deb
npm run dist:win # NSIS installer
npm run dist:mac # .dmg
Installers are written to release/. Build each platform on that platform for the best results.
File sharing with f0ckm
Mumble can only carry small inline images. mumh5 can share any file by uploading it to a f0ckm instance (a self-hosted imageboard by the same author) and posting the link. Other mumh5 users get inline players; desktop Mumble users get a normal link plus a small preview.
f0ckm keeps these uploads separate from its imageboard, respects its own list of allowed file types, and deletes them after 30 days by default.
- On your f0ckm server, create an upload-only key:
node scripts/chat-upload-key.mjs create mumh5 - In mumh5, open Settings, Chat and files, enter the f0ckm address and the key, and press Test key.
The same host also fetches link previews for you, so the sites people link to never see your IP address.
Without an upload host, mumh5 still sends images, scaled to fit the server's limit, the same way the desktop client does. Link previews can then be fetched directly by your computer if you enable it.
Privacy and security
- Your identity is a certificate that stays on your computer, stored with owner-only permissions. mumh5 reminds you to back it up.
- Server certificates are pinned the first time you connect. If one changes, mumh5 stops before sending your password and asks you.
- Chats don't phone home. Media is only loaded from your upload host and hosts you add yourself. YouTube is click-to-play in privacy mode.
- Strict content security policy in the app, and all message HTML is sanitized.
Roadmap
- System-wide push to talk
- Whisper and shout
- Rich chat between mumh5 users: replies, reactions, edits, typing indicators
- Video and screen sharing between mumh5 users
- A browser version, through a small self-hosted WebSocket proxy
- Release builds for all platforms
Development
npm run dev # app with hot reload
npm run check # type check
npm test # unit tests
Tests against a real Mumble server, including an end-to-end test that drives the app:
docker run -d --name mumh5-test-murmur -p 64739:64738 -p 64739:64738/udp \
-e MUMBLE_CONFIG_AUTOBANATTEMPTS=0 -e MUMBLE_SUPERUSER_PASSWORD=testsuper mumblevoip/mumble-server
MUMBLE_TEST_HOST=localhost:64739 npm test
npm run build
MUMBLE_TEST_HOST=localhost:64739 MUMBLE_SUPERUSER_PASSWORD=testsuper npm run test:e2e
On Linux the end-to-end test forces X11, so it can run on a virtual display: Xvfb :99 & DISPLAY=:99 npm run test:e2e. See CLAUDE.md for the architecture and project conventions.
electron/ main process: window, TLS sockets, identities, tray
src/core/ Mumble protocol: framing, codec, client state, voice packets
src/lib/ app state, voice engine, sanitizing, uploads
src/ui/ Svelte components
proto/ Mumble.proto and MumbleUDP.proto from upstream
test/ unit, server and end-to-end tests
AI disclosure and credits
mumh5 is built by Kibi together with Claude, Anthropic's AI model, working in Claude Code.
Kibi sets the direction: what mumh5 should be, how it should look and feel, which trade-offs to make, and whether a result is good enough. Claude writes most of the code, the tests and this documentation, and checks each feature against a real Mumble server before calling it done. Commits written with Claude carry a Co-Authored-By: Claude line.
We say this openly because you should know how the software you run was made. Features are covered by automated tests, including end-to-end tests against a real Mumble server. If something is wrong, please open an issue.
License
MIT. The Mumble protocol definitions in proto/, and the code generated from them, are licensed by The Mumble Developers under a BSD license; see THIRD_PARTY_NOTICES.md.
mumh5 is not affiliated with the Mumble project. Mumble is a trademark of its respective owners.







