Crossplay Sessions
Create cross-platform sessions for dedicated server games with EOS backend
Crossplay Sessions
Sessions are designed for dedicated server games. Unlike lobbies, sessions:
- Support dedicated servers (no player host required)
- Scale beyond 64 players
- Don't include voice chat or host migration (use separate voice solutions)
- Work seamlessly cross-platform via EOS
Creating a Session
Use the Create Crossplay Session node with SessionType = Session.
Quick Setup (Dedicated Server)
SessionType = Session
Visibility = Public
MaxPlayers = 32
bAutoServerTravel = false
bAutoDetectSessionReady = trueFor dedicated servers, you typically don't use auto server travel since the server is already running on the target map.
Parameters
Session Name
The internal session name identifier (e.g., "GameSession"). Must be unique per session.
Settings
Travel & Ready Detection:
| Parameter | Type | Description |
|---|---|---|
bAutoServerTravel | Boolean | Usually false for dedicated servers. Set true for listen servers. |
MapName | String | Map to travel to. Only used if bAutoServerTravel is true. |
bAutoDetectSessionReady | Boolean | Auto-detect when server starts listening. |
Session Configuration:
| Parameter | Type | Description |
|---|---|---|
SessionType | Enum | Set to Session for dedicated servers. |
Visibility | Enum | Public: Anyone can find. Friends Only: Friends only. Private: Invite only. |
MaxPlayers | Integer | Maximum players (no 64 player limit like lobbies). |
GameMode | String | Optional game mode URL option. |
Region | Enum | Region preference (Auto, NA, EU, Asia, etc.). |
Visibility Options:
| Parameter | Type | Description |
|---|---|---|
bUsePresence | Boolean | Show session in friends list. Usually false for dedicated servers. |
bAllowJoinInProgress | Boolean | Allow joining after match starts. |
Custom Attributes:
| Parameter | Type | Description |
|---|---|---|
CustomAttributes | Map | Key-value pairs (String, Boolean, Integer, Double) for filtering. |
Output Delegates
| Delegate | Description |
|---|---|
OnSuccess | Session created successfully. Returns FUCIK_SessionResult. |
OnFailure | Session creation failed. Returns error message. |
OnSessionReadyChanged | Server started/stopped listening. |
Dedicated Server Flow
1. Server Startup
On your dedicated server:
// In your GameMode or server initialization
Create Crossplay Session
SessionType = Session
bAutoServerTravel = false
bAutoDetectSessionReady = true2. Session Registration
UCIK registers your server with EOS. The session becomes discoverable to clients.
3. Client Connection
Clients find the session via Find Sessions, then connect using the ConnectString from the session result.
Manual Ready State
For dedicated servers with custom initialization, use manual ready control:
bAutoDetectSessionReady = falseThen call SetSessionReady(true) when your server is fully initialized:
// After custom initialization completes
SetSessionReady(true)This updates the session state so clients know the server is accepting connections.
Session vs Lobby Comparison
| Feature | Session | Lobby |
|---|---|---|
| Dedicated Server | Yes | No |
| Player Limit | Unlimited | 64 |
| Voice Chat | No (use separate) | Built-in |
| Host Migration | N/A | Yes |
| Presence | Optional | Yes |
| Use Case | Competitive, large scale | Social, casual |
Custom Attributes
Store server info for matchmaking and filtering:
Key: "ServerName" → String "US East #1"
Key: "MapName" → String "de_dust2"
Key: "GameMode" → String "Competitive"
Key: "PlayerCount" → Integer 24
Key: "IsRanked" → Boolean true
Key: "AvgSkill" → Double 1850.0Clients use these to filter when finding sessions.
Session Result
The FUCIK_SessionResult returned contains:
| Field | Type | Description |
|---|---|---|
bSuccess | Boolean | Whether creation succeeded. |
SessionId | String | EOS Session ID. |
ConnectString | String | Address for clients to join. |
bIsListening | Boolean | Server accepting connections. |
ErrorMessage | String | Error details if failed. |
Note: PlatformLobbyId will be empty for dedicated servers (no shadow lobby needed).
Platform Support
| Platform | EOS Session |
|---|---|
| Windows | Yes |
| Linux | Yes |
| All client platforms | Can connect |
Dedicated servers typically run on Windows or Linux. Clients on any platform (Steam, Epic, iOS, Android, consoles) can connect via EOS.
Backend Support
UCIK supports both online backends:
- Online Subsystem (OSSv1): Works on all UE versions
- Online Services (OSSv2): Stable in UE 5.7+
UCIK automatically detects and uses the available backend.
Shadow Lobbies on Dedicated Servers
Dedicated servers typically don't create Steam shadow lobbies because:
- There's no local Steam user on the server
- EOS handles all matchmaking
- Clients find servers via EOS session search
If you need Steam lobby browser integration with dedicated servers, consider a hybrid approach with a lobby service that lists your servers.
FAQs
When should I use Session vs Lobby?
Use Session for:
- Dedicated server games
- Competitive/ranked matches
- Games with >64 players
- When you don't need built-in voice chat
Use Lobby for listen server games. See Lobbies.
Do dedicated servers need Steam running?
No. Dedicated servers connect directly to EOS. Steam is only needed for client-side features like friends lists and invites.
How do clients find my dedicated server?
Clients use Find Sessions to search for available servers, then Join Session to connect.
Can I update session attributes while running?
Yes. Use the Update Session node to modify custom attributes (player count, map rotation, etc.) without destroying the session.
Next: Lobbies | Finding Sessions | Joining Sessions