Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
REPO Steam P2P
Replaces R.E.P.O.'s Photon cloud with direct Steam P2P. Host runs a built-in virtual server; connection ladder: Steam P2P -> ZeroTier -> Steam relay. Native proximity voice, stable lobbies, no port forwarding.
By Makfly
| Last updated | 3 days ago |
| Total downloads | 1749 |
| Total rating | 1 |
| Categories | Server-side Client-side AI Generated |
| Dependency string | Makfly-REPO_Steam_P2P-1.4.0 |
| Dependants | 1 other package depends on this package |
This mod requires the following mods to function
BepInEx-BepInExPack
BepInEx pack for Mono Unity games. Preconfigured and ready to use.
Preferred version: 5.4.2305README
REPO Steam P2P
Replaces R.E.P.O.'s Photon cloud networking with direct peer-to-peer over Steam, with a built-in virtual Photon server on the host. No port forwarding, no Photon cloud, native proximity voice.
How it works
-
The host runs a built-in virtual LoadBalancing/Game/Voice server in-process (no external server, no Photon cloud).
-
The client finds the host automatically and connects through a fallback ladder:
- Steam P2P (LAN direct) — same-network host discovered automatically (~1–5 ms).
- ZeroTier — if the host publishes a ZeroTier IP in the Steam lobby and the tunnel answers a probe.
- Steam relay — Steam SDR as the last resort (pure-internet play).
-
Photon datagrams are carried over Steamworks SDR / plain UDP by a custom transport (ENET v16-compatible), including voice frames.
Features
- Native proximity voice — speakers are linked to avatars: 3D positional audio, mouth animation, works like the vanilla game.
- Stable sessions — ping keep-alive, reliable-command retransmission, ghost-session eviction only for actually dead peers, single-voice-client enforcement.
- First-join fix — the lobby scene, room geometry and voice objects are properly replayed from the room cache when you join.
- ForceVoiceTransmit config (default off) — optional open-microphone override that ignores mute/PTT state.
Installation
Mod manager (recommended)
Install with Thunderstore Mod Manager or r2modman — the BepInEx dependency is pulled automatically.
Manual
- Install BepInExPack into the game folder.
- Drop
BepInEx/plugins/RepoSteamTransport.dllintoBepInEx/plugins/. - Run the game.
Both players need the mod. The host creates the lobby through Steam as usual; clients join through Steam as usual.
Configuration
BepInEx/config/local.repoversteam.transport.cfg
| Key | Default | Description |
|---|---|---|
Role |
Auto |
Auto resolves host/client from the Steam lobby. |
HostSteamId |
— | Client override: connect to this SteamId directly. |
HostAddress |
— | Client override: direct IP (skips the ladder, ladder step 0). |
ZeroTierAuto |
true |
Allow the ZeroTier fallback step (2/3). |
ForceVoiceTransmit |
false |
true = open microphone (always transmit, ignores mute/PTT). |
PhotonCompat |
true |
Serialization compatibility shim (keep on). |
Verbose |
false |
Detailed transport logging for diagnostics (very spammy). |
Troubleshooting
- Ping shows 130 → drops to 14 — that's Steam SDR route optimization in the first minute; normal.
- "Ladder 3/3" in the log — no LAN/ZeroTier path was available, so the Steam relay was used; everything still works.
- No voice — check the in-game mic is selected and not muted (Settings → Audio); make sure
ForceVoiceTransmitisfalseif you want the game's own Push to Talk to control transmission. - Diagnostics — set
Verbose = trueand re-run; the log will show the full ladder, session and voice-event trace.
Credits & Licenses
Parts of this mod are derived from and modified from
REPO-SelfHostedPhoton
(Copyright (c) 2025 zyxterus, MIT License). The original copyright notice and the full
MIT license text are included in THIRD-PARTY-NOTICES.md and
LICENSE-REPO-SelfHostedPhoton.txt in this package.
Changelog
1.4.0
- Protocol hardening: duplicate-fragment protection, delivery modes preserved (voice and positions no longer block RPCs), no per-event operation responses, outbound batching, bounded room cache with view-aware cleanup.
- Stability: reworked connect/disconnect state machine (background connect ladder, Steam calls on the main thread, peer-silence based disconnects, one-frame grace after long loading frames, immediate eviction of dead relay connections).
- Security: lobby-membership check for relay connections, host token handshake for direct UDP/LAN, ports only open while hosting, pre-auth session/byte limits, rate-limited logging.
- LoadBalancing semantics: join properties merged, nested actor properties in the join response, property echo and CAS, master-key write protection, room redirect/capacity rules, targeted voice routing.
- Field fixes: late-join state re-send targets only the joining player, microphone storm guard works in the default config, Photon debug logging only with Verbose = true.
- Config: PhotonCompat = false now forces V16 with a warning (it corrupted events before).
1.3.0
- Protocol hardening: per-channel reliable ordering, ENET fragment reassembly in both directions, capped retransmission with backoff, wrap-safe timers, bounded room cache.
- Non-blocking connect ladder: joining and reconnecting no longer freeze the game for seconds.
- Late-join state re-send: fixes clients stuck on the loading screen when joining an already-running session.
- Microphone error storm guard: a broken mic device no longer stalls the game (falls back to listen-only).
- New config keys: LobbyAuthCheck (lobby-membership check, fail-open) and full disable via Enabled = false.
- Quieter logging: Photon debug output only with Verbose = true
1.1.3
- Added third-party license notices (MIT) for REPO-SelfHostedPhoton:
THIRD-PARTY-NOTICES.md,LICENSE-REPO-SelfHostedPhoton.txt.
1.1.0
- Connection ladder: Steam P2P (LAN direct) → ZeroTier (with reachability probe) → Steam relay.
- Voice: native speaker linking, sender mapping fixes, duplicate-voice-client enforcement, listen-only clients supported.
- First-join lobby fix (scene/geometry/voice-object cache replay, AddToRoomCacheGlobal).
- Self-hosted Photon compatibility shim merged into the main plugin.
- Quiet release logging (
Verboseconfig flag).
1.0.0
- Initial working release: virtual server transport, native voice, stable sessions.