Stop losing players to NAT. Standards-based TURN that drops into Godot, Unity, Unreal, GDevelop, Construct, and Pion. 1 TB free, 5 TB for $9/month.
Almost every multiplayer-game-built-on-WebRTC story has the same Day 14 plot twist. The dev plays with friends on the same network — flawless. They ship a beta. Half the players get stuck on the matchmaking screen. The dev opens chrome://webrtc-internals and sees ICE failing because both peers are behind symmetric NATs.
You need a TURN fallback. Without one, a sizable chunk of your audience — anyone behind a carrier-grade NAT, dorm Wi-Fi, certain residential ISPs — simply cannot play with each other. The cheapest correct answer is a hosted TURN service that drops into the engine you already use.
GDevelop and similar browser-game platforms already pay for ExpressTURN. The pattern works for any engine that exposes WebRTC's RTCConfiguration:
WebRTCPeerConnection.initialize({"iceServers": ...}).RTCConfiguration.iceServers.RTCPeerConnection config.webrtc.Configuration.var peer = WebRTCPeerConnection.new()
peer.initialize({
"iceServers": [
{ "urls": ["stun:stun.expressturn.com:3478"] },
{
"urls": [
"turn:relay1.expressturn.com:3478?transport=udp",
"turn:relay1.expressturn.com:3478?transport=tcp",
"turns:relay1.expressturn.com:443?transport=tcp"
],
"username": "YOUR_EXPRESSTURN_USERNAME",
"credential": "YOUR_EXPRESSTURN_PASSWORD"
}
]
})
var config = new RTCConfiguration {
iceServers = new[] {
new RTCIceServer { urls = new[] { "stun:stun.expressturn.com:3478" } },
new RTCIceServer {
urls = new[] {
"turn:relay1.expressturn.com:3478?transport=udp",
"turn:relay1.expressturn.com:3478?transport=tcp",
"turns:relay1.expressturn.com:443?transport=tcp"
},
username = "YOUR_EXPRESSTURN_USERNAME",
credential = "YOUR_EXPRESSTURN_PASSWORD"
}
}
};
var pc = new RTCPeerConnection(ref config);
And remember — only the players who actually need TURN consume relay bandwidth. The rest connect directly.
The free tier uses long-term credentials, which is fine when you have one set baked into your client. Premium adds shared-secret authentication: your server hands each player a fresh, time-limited TURN credential. This matters when you have many users and don't want a leaked APK or webpack bundle to expose a shared password.
Why does a peer-to-peer game need a TURN server?
Most home and mobile networks sit behind NATs. STUN succeeds for cone NATs but fails for symmetric NATs and carrier-grade NATs. Without a TURN fallback, players on those networks simply cannot connect.
Does ExpressTURN work with Godot, Unity, and Unreal?
Yes. All three engines accept standard ICE server URLs. Pass ExpressTURN's TURN URL plus your username and credential.
How many concurrent players can the free 1 TB tier support?
A 4-player session with voice chat uses about 110 MB/hour. Free 1 TB supports roughly 9,000 session-hours per month — and only relayed players consume that bandwidth.
What's the latency penalty?
Zero for direct/STUN connections. For relayed players, typically 10–40 ms when you pick a TURN region close to the player.
Stop losing players. Add TURN today.
Sign Up — Free 1 TB/monthRelated: TURN for streaming · TURN for social apps · Godot recipe · Pion recipe