# Cross System Bridge

Let Simple Voice Chat and SocketSVC players on one Paper server hear each other in proximity voice

Source: https://socketsvc.vercel.app/zh-TW/server/cross-system-bridge
Without the bridge, a server with both voice mods is two rooms: Simple Voice Chat players hear each other, SocketSVC players hear each other, and neither hears the other. The bridge is a separate Paper plugin that joins the two for **proximity voice** — a player on either mod hears a player on the other at the right place, with the right distance falloff, under the same rules that already apply to everybody else.

<Callout type="error" title="Experimental: this can cause problems on your server">
  The bridge is new and has not yet been run on a live server. It joins two voice systems that were never designed to work together, so expect rough edges: missing or doubled audio, players heard in the wrong place, or trouble in Simple Voice Chat itself while it is installed. Try it on a test server before your main one.

  **If something goes wrong, report it on the [SocketSVC Discord](https://discord.gg/2rHcrWrXXV), not to Simple Voice Chat or any other project.** Remove the bridge jar first and check whether the problem goes away; if it does, it is ours to fix, and nobody else's support can help with it.
</Callout>

## What it carries, and what it does not

| | Bridged |
| --- | --- |
| Proximity voice, both directions | **Yes** |
| Simple Voice Chat whispering | Yes, at a shorter range (see [`whisper-scale`](#configuration)) |
| Voice groups, on either side | No — a player in a group is not bridged, unless it is an **open** group |
| Soundboard and instrument audio | No |
| Plasmo Voice | Not yet; it is the next phase |
| Fabric, NeoForge and Forge servers | No — the bridge is a Paper plugin, and Simple Voice Chat's server API is Paper-shaped |
| Across backends behind a proxy | No — like proximity voice itself, the bridge works within one server |

A player who runs **both** mods is never bridged, in either direction. They would otherwise be heard twice by everybody around them. The bridge names them once in the server log so you know why.

## Installing

You need Paper (or Purpur or Folia) with SocketSVC and [Simple Voice Chat](https://modrinth.com/plugin/simple-voice-chat) already installed.

1. Put `socketsvc-bridge-paper-<version>.jar` in `plugins/`, next to the SocketSVC jar. Use the same version as SocketSVC.
2. To bridge **both** ways, turn on the microphone tap in SocketSVC's config:

   ```yaml title="plugins/SocketSVC/config.yml"
   microphone-tap:
     enabled: true
   ```

3. Restart the server.

The log says which way the bridge is running:

```text
[SocketSVCBridge] Bridging both ways: Simple Voice Chat <-> SocketSVC
```

<Callout title="Why the tap switch">
  Simple Voice Chat → SocketSVC needs nothing but the bridge. SocketSVC → Simple Voice Chat hands SocketSVC players' voices to another plugin, which is exactly what the [microphone tap](/server/configuration#microphone-tap) switch exists to keep off until you decide otherwise. With the switch off the bridge still starts, runs one way only, and says so in the log.
</Callout>

If Simple Voice Chat is not installed, the bridge logs a warning and disables itself; it changes nothing about SocketSVC.

## Who is heard

Everything that decides who hears whom on SocketSVC's side applies to a bridged player too — the bridge must not become the way around it.

| Rule | Applies to the bridge as |
| --- | --- |
| [`socketsvc.bridge`](/server/permissions#the-bridge-permission) | Whose voice may cross, **for players on either mod**. A Simple Voice Chat player holds no SocketSVC session for `socketsvc.speak` to be checked against, so this node governs them instead |
| [Mutes](/server/moderation) | A player muted in SocketSVC is not bridged — including a Simple Voice Chat player you muted with `/ssvc-server mute` |
| [`hearing-range`](/server/configuration) and `fade-start-distance` | How far a Simple Voice Chat talker carries for SocketSVC listeners |
| `spectator-interaction` | Spectators reach non-spectators across the bridge only when this is on |
| [`visible-players-only`](/server/configuration#visible-players-only) | Only listeners who can see the talker hear them |
| [Voice groups](/server/groups) | A SocketSVC player in an `isolated` group hears nobody across the bridge; one in a `normal` or `isolated` group is not heard across it |

These are read from SocketSVC's own config, so `/ssvc-server reload` changes the bridge too.

Simple Voice Chat players hear bridged SocketSVC players **at Simple Voice Chat's own voice distance**, positioned on the talker's player like any Simple Voice Chat voice, and under a separate **SocketSVC** volume slider in Simple Voice Chat's settings.

SocketSVC players find each bridged Simple Voice Chat player as a named speaker at the top of the volume page. The volume they set is kept per player, like any speaker's.

## Configuration

```yaml title="plugins/SocketSVCBridge/config.yml"
max-channels: 16
idle-close-seconds: 10
whisper-scale: 0.5
```

| Key | Default | Meaning |
| --- | --- | --- |
| `max-channels` | `16` | Simple Voice Chat players heard by SocketSVC at the same time, 1–32. Each is one [spatial channel](/server/spatial-audio-api), and SocketSVC allows 32 across **every** plugin — leave room for the others |
| `idle-close-seconds` | `10` | A Simple Voice Chat talker's channel closes after this long without speaking, 1–600 |
| `whisper-scale` | `0.5` | A Simple Voice Chat whisper carries this fraction of `hearing-range`, above 0 and at most 1 |

An out-of-range value is replaced by its default with a warning in the log. The bridge reads this file at startup; restart it to apply a change.

## Limits worth knowing

- **One range per talker.** Per-world and per-region [range overrides](/server/configuration) and SocketSVC's whisper and shout do not change how far a bridged voice carries.
- **The first moment is lost.** When a Simple Voice Chat player starts talking after being quiet for `idle-close-seconds`, the first tick — one or two 20 ms frames — is dropped while their channel opens.
- **More talkers than `max-channels`** are not heard by SocketSVC players until one of the others falls quiet. The bridge warns in the log, at most once a minute.
- **Each player should use one voice mod here.** A player with both client mods connects with both on a bridge server, is never bridged (see above), and has both mods reacting to the same keys; see [Running alongside another voice chat mod](/client/compatibility#limits). The bridge is server-side: each player installs **one** voice mod.