# SocketSVC

Proximity voice chat for Minecraft, built on WebSockets instead of UDP

Source: https://socketsvc.vercel.app/client
SocketSVC is a proximity voice chat project for Minecraft. It consists of a **client mod** (Fabric/Quilt, NeoForge, Forge) and a **server side** (a Paper plugin, or a Fabric/Quilt, NeoForge or Forge server mod), plus an optional Velocity/BungeeCord relay proxy plugin, and carries Opus audio over WebSocket / WSS. Players talk to each other in real time based on how close they are in-game. A spatial-audio API also lets other plugins add music, PA-style announcements and named in-world speakers.

Every byte of voice — audio, the live player roster, speaker snapshots, connection status — travels over **one persistent WebSocket connection**, the same kind of connection your browser already uses for HTTPS.

<Cards>
  <Card title="Download" href="/download">
    Pick a build for your Minecraft version, loader and side — client, server or proxy
  </Card>
  <Card title="Install the client" href="/client/installation">
    Where the JAR goes, first-run setup and languages
  </Card>
  <Card title="Controls" href="/client/controls">
    Talking, muting, deafening and `/ssvc` commands
  </Card>
  <Card title="Settings" href="/client/settings">
    Devices, volume, audio processing, instruments, icons and custom icon packs
  </Card>
  <Card title="Soundboard" href="/client/soundboard">
    Play local sound clips to nearby players
  </Card>
  <Card title="LAN and singleplayer" href="/client/lan">
    Host voice from your own game when you open a world to LAN
  </Card>
  <Card title="Compatibility" href="/client/compatibility">
    Flashback, Essential Mod, Mod Menu and known conflicts
  </Card>
  <Card title="Troubleshooting" href="/client/troubleshooting">
    Auto-reconnect, status diagnostics and common problems
  </Card>
  <Card title="Run a server" href="/server">
    Paper plugin or server mod
  </Card>
</Cards>

## Why WebSocket instead of UDP

Most Minecraft voice mods speak raw UDP, which means punching a second port through your firewall/router and hoping every proxy, tunnel or hosting panel in the chain happens to forward it correctly. SocketSVC never opens a UDP port at all:

- **Just an HTTP(S) upgrade.** The voice connection starts as a normal WebSocket handshake, so anything that already proxies HTTP/HTTPS for your server — a reverse proxy, Cloudflare Tunnel, ngrok, a Docker/Pterodactyl panel — carries voice too, with zero extra configuration.
- **Real `wss://` encryption.** Point `public-url` at your own `wss://` hostname and your existing TLS termination (the same proxy already fronting your server) encrypts voice, exactly like it encrypts HTTPS traffic.
- **One socket, not several.** Audio frames, the player roster, named-speaker snapshots and deafen/status updates are all multiplexed over that single connection — nothing else to open, forward or firewall.
- **Ordered delivery still gets a jitter buffer.** Frames carry stream/sequence numbers, so out-of-order or briefly missing packets get concealed (up to 60 ms via native PLC) instead of glitching, even though the transport itself is ordered rather than raw UDP.
- **Self-healing connections.** A 10-second ping/pong keeps the socket honest even during silence, and the client automatically requests a fresh token and reconnects on drop — no `/ssvc reconnect` needed for an ordinary network hiccup.
- **Protocol capabilities negotiate on connect.** Spatial audio, named speakers and deafen-sync are each requested and echoed as upgrade headers, so a newer client talking to an older server (or vice versa) just falls back cleanly instead of breaking.

## Voice chat features

- **Proximity and positional audio** — other players fall off with distance and pan left/right based on your facing direction; headphone users also get front/back cues (see [Settings](/client/settings#headphone-spatial-audio)).
- **Push-to-talk or automatic voice detection**, RNNoise-assisted, with a manual sensitivity threshold and a short deactivation delay so words don't get clipped.
- **Noise suppression (RNNoise)** bundled directly in the client — no separate native install. Supported platforms can additionally download a stronger Advanced Noise Cancellation model.
- **Automatic microphone gain and peak limiting**, so quiet and loud speakers stay balanced without manual tuning.
- **Adaptive echo cancellation** with automatic delay alignment, plus a manual override — reduces the classic "hearing yourself" problem on open mic/speakers.
- **Per-player volume (0–200%)**, master volume, mute and deafen, all persisted in your client settings.
- **Live player roster** synced from the server, with speaking indicators and nameplate icons.
- **Compact settings dialog** — General / Advanced / Player volume tabs (and more), device selectors that don't require reconnecting, and a first-run setup flow.
- **Automatic reconnect** if the connection drops, without needing to leave and rejoin.
- **Soundboard** — play WAV/MP3/OGG/Opus/FLAC/AIFF clips from a local folder to nearby players, or download audio from a URL.
- **Instrument input** — play a guitar or keyboard into voice chat on its own stream, from a line-in device, a MIDI instrument or the built-in drum machine, without it interfering with talking. A 16-track looper records what you play and layers over it, and MIDI can be played through your own recordings or a SoundFont rather than the built-in oscillators.
- **Custom icon packs** — replace the voice status icons with your own images (including animated GIFs, which play on nameplates too) and share them as a zip.
- **LAN voice** — opening a singleplayer world to LAN starts a built-in voice server so players who join can talk right away.

Push-to-talk, voice activity detection, Opus, RNNoise, gain/limiting, echo processing, distance and stereo positioning, per-player volume, mute/deafen, status icons and fresh-token auto-reconnect are implemented. Audio quality still has to be validated on real devices; synthetic test results are not a guarantee of real-world call quality.

## Spatial speakers (addon API)

Beyond player-to-player chat, SocketSVC ships a spatial-audio API that lets other server plugins place independent, positioned audio sources in the world:

- **Server-defined speakers** with a fixed ID and display name, so a speaker keeps its identity — and players' saved volume for it — across restarts.
- **Two audio sources per speaker**: forward a player's live microphone to a fixed location, or play back a server-side WAV file.
- **Distance falloff and stereo positioning**, same model as player voice, with configurable range and fade-start distance per speaker.
- **Per-speaker client volume slider**, separate from the regular player-volume list, saved locally per server and speaker ID.
- **Recipient control** — restrict who can hear a given speaker.
- Ships with an **optional example plugin** (`SocketSVCSpeakerExample`) demonstrating block-anchored speakers you can bind to a WAV file or a player's mic with simple commands.

This makes it possible to build things like lobby music, jukeboxes, PA announcements or ambient soundscapes — as separate, self-contained addon plugins — without touching SocketSVC's core. See the [Spatial audio API](/server/spatial-audio-api).

## Support matrix

Current as of 2026-09-17; versions may change.

| Component | Current setup |
| --- | --- |
| Client mod | Minecraft 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2, 26.3; one separate JAR per version × loader |
| Server | Paper/Purpur/Folia plugin, or a Fabric/Quilt, NeoForge or Forge dedicated-server mod for the same Minecraft version |
| Loader | Fabric (the same JAR is marked as supporting Quilt) on all versions; NeoForge on all versions (26.1 and 26.1.1 use beta loaders and are published as beta); Forge on all versions |
| Java | Java 21 for 1.21.11; Java 25 for 26.x |
| Network | The server plugin/mod opens its own WebSocket listener; expose it directly (LAN) or behind a reverse proxy for `wss://` on a public server |
| Velocity / BungeeCord networks | One optional relay plugin jar (same file for either proxy) gives a whole proxied network a single public voice port instead of one per backend — see [Proxy relay](/proxy) |
| Client languages | English, Simplified/Traditional/Classical Chinese, Japanese, Korean, Russian, German, French and Spanish, following the Minecraft language setting |

Both a **client and a server side** need to be installed for voice chat to work — any client loader works with the Paper plugin or any server mod. Every Modrinth file's version number ends in `@client`, `@server` or `@proxy`, so it is clear which side it belongs to. Client support for 26.x does **not** mean the server side has been validated against the same Paper version.

## Servers already using SocketSVC

| Server | IP | Minecraft version | Website |
| --- | --- | --- | --- |
| 泥土商店 (dirtshop) | `dirtshop.xyz` | 1.21.11+ | [dirtshop.xyz](https://dirtshop.xyz) |