Six more schemes by hand and 89 generated from a hue and an accent
(npm run themes), with a readability test over all of them and a search
box in the picker. The README describes the software plainly and covers
text channels, the Rooms interface and the new settings.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A second shell on the same state, chosen in Settings, Appearance.
Rooms as a list with the people inside, a voice dock, a voice screen,
people and a You screen. Dialogs and menus are shared with the standard
interface. Moving channels and people by dragging is not in it yet.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Text channels are real Mumble channels with a marker in the description.
Their messages travel as plugin data to everyone on the server, are kept
by the clients and handed to people who connect later.
Channels can be dropped in front of or behind another channel, with a
line where they land. A description preview no longer sticks after a drop.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The picture is swapped on the running stream, so viewers stay connected. The
new camera is opened first where the device allows two at once; phones close
the old one first.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- libopus in WebAssembly takes over voice where WebCodecs audio is missing
(Firefox on Android); tested for tone, timing and bitrate, and in a browser
forced onto it
- Cameras in the channel show by themselves once the IP note was confirmed;
a person's camera can be hidden from the right-click menu, all of them with
one button; an enlarged camera leaves its tile
- CSP allows wasm-unsafe-eval for the codec
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- A viewer holds one screen and any number of cameras; cameras play in the
tiles (own one mirrored), a click enlarges one
- "Watch all cameras" joins the round: cameras in the channel are watched as
they come on. Turning your own camera on joins it too
- Sound, statistics and stop work per stream
- Relay quotas and port range raised: a round uses a route per pair of people
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- A camera is a second source in the share dialog; streams carry their kind,
so icons and wording follow. Browsers without screen capture (phones) start
on the camera.
- Settings, Voice: the address of a mumh5 web version as relay; its STUN and
relay are then offered with every stream and take over when no direct
connection comes up.
- The proxy hands out relay credentials at GET /api/relay, readable from any
origin.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Vanadium forbids direct UDP for WebRTC, and mobile and company networks often
block direct connections; the only route then is a relay reached over TCP.
- server/turn.ts: STUN and TURN on one port, over UDP and TCP, with
short-lived credentials from /api/turn, quotas and a peer filter
- The browser build fetches credentials and offers the relay automatically
- Stats for nerds says when a stream is relayed and how the relay is reached
- Tests: a TURN client over UDP and TCP, and a browser limited to the relay
over TCP in the web E2E
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Rows of equal tiles with the column count chosen for the best 16:9 fit; a
shorter last row stretches. In the meeting view the strip shares the width.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A stream counted as live as soon as its track was announced, before any route
existed, so a viewer whose connection never came up saw a black picture.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codecs, picture size and frame rate, bitrate, loss, jitter and the network
path, per viewer for the sharer.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The stage above the chat is as tall as the user drags it; tiles are sized to
fill it, with a meeting-style look
- Tiles with a stream come first, at the top left
- The large picture can be moved to a separate window
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The browser build uses it automatically, so no outside server is contacted.
Covered by unit tests and a two-browser step in the web E2E.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Start dialog with source list, live preview, sound and quality choices
- Sound on Linux through PipeWire: one program or everything except this
app, fed into a virtual microphone and kept linked as programs come and go;
system loopback on Windows; stereo Opus
- A sharer's tile shows the picture; clicking it opens a large view with the
other tiles as a strip. Own stream is previewed in the own tile
- Stream volume for viewers, watch and stop from the profile panel
- Unit tests for the PipeWire link planner; the proxy test no longer writes to
the root channel other tests listen in
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Signals travel as Mumble plugin data (compressed, chunked under Murmur's
1000 byte limit); the picture goes directly to each viewer over WebRTC
- Toolbar button with a source picker in the desktop app, an indicator next to
people who share, click to watch, a view above the chat with full screen
- Late joiners learn about running streams; moving, stopping or disconnecting
ends them for viewers
- A note about IP addresses before the first use, optional STUN server setting
- Unit tests for the signal codec and an E2E with two app instances
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Browser version
- Self-hosted proxy (server/) that serves the web build and bridges WebSocket
connections to Mumble servers over TLS, with a server allowlist or allow-any mode
- WebSocket transport and a browser platform layer; identities live in the browser
- npm run build:web, dev:web, proxy and test:e2e:web; proxy unit tests
Interface
- Toolbar next to mute and deafen: description editor, settings, expand or collapse all
- Channels with a description show a marker; resting on the row previews it
- Collapse all keeps channels with people open
- Hints (title tooltips) can be switched on in a new Accessibility settings tab
- New identities can set the username suggested when connecting
- Own user information tells the client address from the one the server sees
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Public servers: connect arrow and add button per row, sortable column headers
- Mute and deafen stay available while disconnected; the choice carries to the next connect
- Server information dialog, opened from a button next to mute
- Stacked layout: mute bar on top, without the profile
- Settings that need the upload host are disabled until it is set; link previews show the mode in effect
- YouTube links are plain links by default
- Composer has a border and matches the sidebar bar height
- Regenerate README screenshots
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- electron-builder packaging: AppImage, deb and tar.gz for Linux, NSIS
installer for Windows, app icon, desktop entry
- Gitea workflow builds Linux and Windows on version tags and attaches
the files to the release
- Layout setting in Appearance: Modern, Classic (chat left, channels
right) and Stacked (channels on top, chat below, resizable split),
like the desktop Mumble client
- No message box while not connected; Manage identities on the welcome
page
- Public list: a list that arrives after the source changed no longer
replaces the new one
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 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>
- Channels: create, edit, delete, link and move (drag and drop for channels and
people), right-click on free space in the channel list
- Permission editor with inherited rules, allow/deny per permission, groups and
members; menus grey out actions the server does not allow
- Notification sounds for connection, channel, chat, mute and push-to-talk events;
custom files and TeamSpeak 3 style sound packs (settings.ini), stored in IndexedDB
- Color schemes: Dark, Light, Midnight, Frost and Windows 95
- Public server list with live UDP ping, fetched through Chromium's network stack
- Kick, ban and connection-lost card with Reconnect
- Right-click menus for text fields, links, images and message authors
- Formatting toolbar in the message box, shared with the description editor
- Resizable channel list, menu headers, registration from the self menu only
- Fix: client-side pacing now mirrors Murmur's whole-second leaky bucket exactly,
so quick actions are no longer dropped silently
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Link previews for web links in chat, fetched by the f0ckm upload host by
default (linked sites never see the user's IP), or directly, or off
- Voice channel tiles above the chat on windows too narrow for the member list
- Per-person volume slider in the user context menu
- Profile panel: channel on its own line under the name, no Guest badge,
voice actions moved to the context menu
- User information dialog refreshes every second
- Rate limiting mirrors Murmur's whole-second bucket leak, so irregular
bursts are queued instead of dropped
- CHANGELOG.md
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Electron desktop app with a Svelte 5 interface for any Mumble server.
- Mumble protocol core: TLS, handshake, channels, users, text, plugin data,
client-side pacing of Murmur's rate limits
- Voice: WebCodecs Opus over the TCP tunnel, voice activity, push to talk,
always-on, devices, per-user volume and local mute
- Several servers at once, voice on one; server rail with icons and ordering
- Chat: channels, direct messages, side chat, file sharing through f0ckm,
inline images without it, click-to-play YouTube
- Profiles with rich descriptions, registration, rename, nicknames,
connection information and moderation menus
- Identity wizard, multiple identities, PKCS#12 import/export, desktop
Mumble certificate import, certificate pinning and viewer
- Tray icon with voice state
- Unit, server and end-to-end tests against a real Murmur
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>