Ali Şahan Yalçın
DocsWhy a join failed

Sessions

Why a join failed

Turning a failed join into something you can actually tell the player.

"Could not join" is the least useful thing a game can say. A join fails at several distinct points, Steam reports them through more than one mechanism, and each one needs a different response from the player, so without something structured they all reach them as the same shrug.

Join Session returns a Steam Join Diagnosis:

FieldMeaning
SuccessWhether it worked
FailureA structured reason you can branch on
Player MessagePlain language, ready to put on screen
Technical DetailFor your log or a bug report
Worth RetryingWhether trying again might work
LobbyThe session, when the join got that far

The failure reasons

ReasonWhat it meansRetry?
Steam UnavailableSteam is not connectedYes
Session No Longer ExistsThe host ended itNo
Session FullNo roomYes
Not Accepting PlayersThe match already startedNo
Banned From SessionThe host banned this accountNo
BlockedOne player has the other blocked on SteamNo
Account LimitedSteam requires a purchase to use matchmakingNo
Wrong PasswordJoined, then rejected on the password checkYes
Version MismatchThe host is on a different buildNo
Travel FailedEverything worked until the connection itselfYes
INFO: Version Mismatch only ever fires if you set a Session Build Id in Project Settings > Plugins > SteamForge. It is empty by default, which means no version gating at all. See Sessions.

What is not a failure

Joining a session whose host has not started the match yet succeeds. The player is in the session, waiting, and travels automatically when the host starts.

That is the normal case for a pre match lobby, so treat Success as "you are in", not as "you are playing". If your UI needs to tell those apart, check whether the world changed, or drive it from the host's own start button.

Using it

The simplest useful handling is two nodes:

  1. Show Player Message in your UI.
  2. If Worth Retrying is true, show a Retry button.

That alone puts you ahead of most shipped games.

For more, branch on Failure:

  • Wrong Password should clear the field and focus it, not send them back to the browser.
  • Version Mismatch should point at whatever updates your game.
  • Session Full should refresh the list.

The post join checks

Some of these can only be decided after the Steam level join succeeds, because none of the session metadata is readable until you are inside the lobby. Password and version are both in that group.

When one of those rejects you, SteamForge leaves the lobby again on your behalf. Without that the player would show as a member of a session they were refused from.