Electron-based client for proximity voice chat in Counter-Strike 2, featuring 3D positional audio with server-side raycast occlusion using Three.js.
Download the installer setup from the latest release
Clone the repo & install dependencies:
git clone https://github.com/b0ink/CS2-VoiceProximity-Client.git
cd CS2-VoiceProximity-Client
npm installBuild for Windows and generate a setup installer:
npm run build:winDevelop with UI hot reloading (src/main changes require restart):
npm run devDevelop with multiple app instances (each requires a valid JWT; use window.saveAuth(steamid, token) in the console to set manually):
npm run dev:multi 2The CS2 plugin sends player position data and server-computed occlusion data to an API, which broadcasts listener-specific updates to connected clients in a voice room.
The client uses these updates to render positional audio and apply audio filtering in real time.
Occlusion is calculated on the game server with raycasts between each listener and other players.
A listener-specific blocked-vs-clear ray fraction is sent to each client, which applies the value to low-pass filtering and distance falloff so players behind cover sound muffled.
Diagram of server-side raycast patterns by quality level:
Concept inspired by this video.
Voice data is relayed through a TURN server by default to protect user IPs. For lower latency, you can disable this in private rooms — P2P will only work if both you and the other player(s) disable relaying.






