Self-hosted 3D proximity voice chat for Palworld.
You hear whoever's near you in the game โ louder the closer they are, with real direction (3D / HRTF audio). Like Minecraft's Simple Voice Chat, but for Palworld. No rooms, no third-party service: everything runs on your own infra.
๐ง๐ท Leia em Portuguรชs ยท โฌ๏ธ Download ยท ๐ Changelog ยท ๐๏ธ Architecture ยท ๐บ๏ธ Roadmap
๐ฅ Demo: (coming soon โ ~20s of the 3D proximity voice; use headphones ๐ง)
| You areโฆ | Go to |
|---|---|
| ๐ฎ I just want to talk to my friends | For players โ download, install, play (~2 min) |
| ๐ฅ๏ธ I run a Palworld server | For server owners |
| ๐งโ๐ป I want to build / contribute | For developers |
You need: Palworld (Steam or Game Pass) + headphones + a friend or server owner running the PalProxVoice voice server (see For server owners โ if nobody set one up yet, send them that link).
- Download
PalProxVoice-Setup.exefrom the latest release. - Run it. Windows asks for administrator permission (blue prompt) โ click Yes (needed to install the mod inside the game). On Steam it finds Palworld automatically; if it doesn't (e.g. Game Pass), click Search a drive and pick the Palworld folder.
- Open Palworld and play. The voice connects by itself โ no IP or port to type. If your server has a voice password, ask the owner for it. Use headphones. ๐ง
That's it. Whoever's near you in the world, you hear โ louder the closer, and with direction (left/right/front/back).
Got "Windows protected your PC"? Just Windows warning about new apps that aren't paid-code-signed. Click More info โ Run anyway. It's safe (open-source).
No installer? (manual setup)
From the same release, grab PalProxVoice-UE4SS.zip (extract into Pal\Binaries\<Win64 or WinGDK>\) and palproxvoice.exe (the companion). Run the companion โ it auto-connects the same way.
Like the game's chat. Press Alt+V while playing to switch which channel you talk on (the current one shows in the PalProxVoice app):
- ๐ Proximity (default) โ talk to who's near you, in 3D.
- ๐ก๏ธ Guild โ talk to your guild, at any distance.
- ๐ Global โ talk to the whole server.
You always hear guild (same guild) and global; proximity only when someone's close.
- 3D positional voice โ direction + distance, following your in-game camera.
- Zero setup โ connects to your current server on its own. Nothing to type.
- Doesn't ruin your other audio โ your music and the game's sound stay normal while you talk (the classic browser voice-chat problem is fixed).
- AI noise suppression (optional) โ cuts background noise like a fan or keyboard. Plus a mic-tuning panel for the picky.
- Pick your mic and output by name.
- Built for bad internet โ quality adjusts itself + auto-reconnect on drops.
- Runs with the game โ opens with Palworld, hides when you close it. You don't open anything.
PalProxVoice grows in layers. The base works on any server; each version adds stronger anti-cheat / lower delay without breaking the ones below. As a player you don't pick โ the server owner does.
| Tag | Status | What it adds | Anti-spoof | Server needs |
|---|---|---|---|---|
| Base + V1 | ๐ข working | proximity voice + auto-connect (finds the server IP and the voice port by itself) | โ trusts client | just the voice container |
| V1.5 | ๐ข coded (opt-in) | REST reconciliation โ a spoofer can't teleport into your ears. Keeps client Z+yaw. |
โ horizontal | + Palworld REST reachable internally |
| V2 | ๐ก server-side works (exp.) | server-side authoritative pos+yaw+FGuid @5Hz via a UE4SS mod on the server (Windows .exe under Proton on Linux). Zero client trust. Voice e2e (2 players) not tested yet. |
โ โ full 3D | + UE4SS on the dedicated server |
| V3 | ๐ฌ research (scaffold only) | V2's data but on the native Linux server โ an external memory reader, no UE4SS / Proton / Wine. | โ โ full 3D | (not built yet) |
Which should I run? Most people: Base + V1 (it just works). Cheat-proof proximity on a normal server: turn on V1.5. Authoritative 3D positions with minimal delay: V2. V3 is an early experiment โ see its branch.
Three pieces. The game never talks to the voice server directly โ the companion bridges it.
| Piece | Where | What it does |
|---|---|---|
| mod (UE4SS/Lua) | each player's PC (Steam or Game Pass) | reads position + facing + identity, writes local files |
| companion (Wails app) | each player's PC | reads the position, sends the mic, receives others, spatializes in 3D, and auto-connects |
| voice server (Go/pion) | owner's VPS | SFU: each mic uploads once and is relayed to all; position + channel relay. No rooms. |
Each audio track carries StreamID = peer id, so the companion matches audio โ position. With V2/V3, the position is server-authoritative (a mod/reader on the server writes a feed the voice consumes), so the client can't lie about where it is.
The voice server is one Go container. Run it next to your Palworld (same VPS or another). Everyone who joins with the password is one pool; who you hear is 100% proximity/channel โ no rooms.
cp .env.example .env # set VOICE_PASSWORD and PUBLIC_IP=<vps-ip> (or PUBLIC_IP=auto)
docker compose up -d --build- Firewall: open UDP 50000โ50010 (the audio).
PUBLIC_IPmakes the server announce your IP (no TURN);autoself-detects. - Voice port:
.env'sHTTP_PORTis the host port (default 8765). The companion probes ports 8765โ8768 and connects to the first PalProxVoice it finds โ so expose it on one of those. - Browser mic needs HTTPS (
wss://, e.g. behind Dokploy). The desktop companion connects by direct IP โ no TLS/proxy needed (that's the normal path).
Set in .env: PPV_AUTH_MODE=verify (or strict) + PPV_REST_URL=http://<palworld-service>:8212 + PPV_REST_PASS=<Palworld AdminPassword>. The REST is an admin API โ never expose it publicly; the voice reaches it inside the docker network. So the voice and Palworld must share a network: this compose creates the palprox network โ bring the voice up first (it creates it), then put Palworld in it as external (see docker-compose.palworld.example.yml). The voice reconciles each player's reported position with the REST and ignores sustained lies; it keeps the client's height + facing (the REST has neither). โ docs/ANTI-SPOOF-DEPLOY.md
A UE4SS mod on the dedicated server writes a fguid,x,y,z,yaw feed @5Hz; the voice consumes it (zero client trust). On Linux the Windows .exe runs under Proton. One command (Dokploy or local):
docker compose -f docker-compose.v2.yml up -d --build- Shifted ports (to coexist with a prod Palworld): game 8311/udp, query 27115/udp, voice 8766, media UDP 50100โ50110 โ open those.
- Status: the server-side is validated in-game (server listens, mod loads, feed writes real pos+FGuid); the voice end-to-end with 2 players isn't tested yet. Run on a throwaway host first.
The fragile part is UE4SS-under-Proton โ we solved the whole chain (steamclient symlink, headless GUI console, esync/fsync, NetDriver timeout, mod rate). Full notes + the Windows-native path: deploy/v2-experimental/README.md.
Proximity / guild / global work out of the box. Guild membership comes from the player's mod (auto) or a shared guild code in the companion (fallback). No extra server config.
mod/PalProxVoice/ UE4SS mod (CLIENT) โ reads pos+yaw+FGuid -> C:\Users\Public\palproxvoice_*.txt
mod-server/ [V2] UE4SS mod (SERVER) โ authoritative pos+yaw+FGuid feed (fguid,x,y,z,yaw) @5Hz
companion/ Wails app (Go+WebView2) โ 3D voice, auto-connect (IP detect + port probe + ETW),
voice channels, native WASAPI mic
server/ Go voice server โ SFU + position/channel relay + anti-spoof (V1.5 REST, V2 feed)
deploy/v2-experimental/ [V2] Palworld MODDED server (Proton+UE4SS): linux/ (Docker) + windows/ (install.ps1)
v3-linux-native/ [V3] native-Linux memory reader (scaffold) โ on the experimental/v3-linux-native branch
installer/ Inno Setup installer (UE4SS + mod + companion + auto-start)
docs/ ARCHITECTURE ยท ROADMAP ยท ANTI-SPOOF-DEPLOY
docker-compose.yml voice server (Base / V1 / V1.5)
docker-compose.v2.yml [V2] Palworld modded (Proton) + voice โ for Dokploy
docker-compose.palworld.example.yml example: a Palworld with REST on the `palprox` network (for V1.5)
cp .env.example .env # VOICE_PASSWORD=test, PUBLIC_IP empty
docker compose up --build # voice server only (API; no built-in web client)The server is API-only โ connect with the companion pointed at localhost:<HTTP_PORT>. You need two clients (two machines) to hear the SFU + spatialization.
Windows (WebView2), or via GitHub Actions on a v* tag. See companion/BUILD.md. Go tests: go test ./... in companion/.
Issues and PRs welcome. The coupling with the game is thin and isolated on purpose (Palworld 1.0 ships 2026-07-10 and big updates break UE4SS mods) โ check the locked decisions in the ROADMAP before touching mod/.
| Milestone | What | Status |
|---|---|---|
| V1 | auto-connect: find the server by IP + probe the voice port | ๐ข done |
| V1.5 | anti-spoof via REST reconciliation (verify/strict) |
๐ข coded |
| V2 | server-side authoritative pos+yaw via UE4SS (Proton) | ๐ก server-side works |
| Channels | proximity / guild / global + global push-to-switch (Alt+V) | ๐ข built |
| Realtime IP | ETW reads the current server IP live from kernel UDP | ๐ข built |
| V3 | native-Linux external memory reader (no Proton/Wine) | ๐ฌ research |
| next | code signing ยท auto-guild finalize ยท in-game voice-address announce | ๐ planned |
Full detail in docs/ROADMAP.md.
See LICENSE.