Rich Presence

Rich Presence allows your game to display detailed, dynamic status updates on the Steam Friends List. These updates give friends more context about what a player is doing in-game, enhancing social connection and helping others decide how and when to engage.

Your game sets a custom steam_display string using SetRichPresence. This string appears below the player's name in their Friends List. It must be short enough to fit on one line—long strings will be truncated.

Choosing the Right Information

What you display depends on your game's structure. Use Rich Presence to highlight the most relevant, friend-visible data:

For Multiplayer Games:

  • Time remaining or elapsed

  • Players still alive

  • Game mode or map name

  • Score or progress toward an objective

  • Open slots on the server

  • Current action (e.g. “In Lobby”, “Selecting Loadout”)

For Single-Player Games:

  • Current level, chapter, or zone

  • Player's activity (“Fighting a boss”, “Exploring the swamps”)

  • Difficulty or play style

Even solo experiences can prompt social interaction—watching, chatting, or comparing progress.

Steam can also show which friends are playing together using visual groupings in the Friends List. This helps players see if there's room to join or just to spectate a session.

Use:

  • steam_player_group to identify the group

  • steam_player_group_size to specify how many are in it

This works best when based on social logic (e.g. party size, not full match size). For example:

  • Dota 2: show party members (up to 5)

  • CS:GO: show only mutual friends on the same server

Steam API & Localization

The following is an example of the Rich Presence language tokens used in Valve's documents

"lang"
{
	"Language"	"english"
	"Tokens"
	{
		"#StatusWithoutScore"	"{#Status_%gamestatus%}"
		"#StatusWithScore"	"{#Status_%gamestatus%}: %SCORE%"
		"#Status_AtMainMenu"	"At the main menu"
		"#Status_WaitingForMatch"	"Waiting for match"
		"#Status_Winning"	"Winning"
		"#Status_Losing"	"Losing"
		"#Status_Tied"	"Tied"
	}
}

The idea is that during gameplay, you can set values such as SetRichPresence("score", "42")and will be used with the status message appropriately. Your task as a developer is to define what variables you need ... such as "score" in Valve's example. And then to set the steam_displayvalue to the token that uses those variables.

Special Tokens

  • status String that will show up in the "View Game Info" dialog in the Steam Friends list.

  • connect String that contains the command-line for how a friend can connect to a game. This enables the "Join Game" button in the "View Game Info" dialog.

  • steam_display This should be the name of a token defined in your localization tokens that will be displayed. For example, in the above example, a value of #StatusWithScore would parse either the winning or losing message and the score value, assuming, of course, you have set a score and gamestatus value.

  • steam_player_group Indicates to the Steam client that the player is a member of a particular group. Players in the same group may be organized together in various places in the Steam UI. This string could identify a party, a server, or whatever grouping is relevant for your game. The string itself is not displayed to users.

  • steam_player_group_size Indicates the total number of players in the steam_player_group. The Steam client may use this number to display additional information about a group when all of the members are not part of a user's friends list.

Examples

Rich Presence

Code Free

Lobby Manager, Party Lobby and Quick Match Lobby all have facilities to update rich presence for you as the player joins or leaves lobbies.

In addition, we have provided you with a number of component scripts that make the system easier to use with typical visual scripting solutions.

Rich Presence Setter

This can set a key and value on enable and optionally swap between values when the app gains or loses focus.

Rich Presence Reader

This can have UserData applied to it reader.Apply(user) and when that user's rich presence is updated, it will raise the Evt Update, providing you with details.

C#

Use the UserData struct to set a rich presence value

// If you are working with other users' data, you will want to listen on changes for them
Friends.Client.EventFriendRichPresenceUpdate.AddListener(HandleRPUpdate);

// Read someone else's value 
UserData User = 123456;
Friends.Client.RequestFriendRichPresence(User);

//Once you get the message it's been updated
string Value = User.GetRichPresenceValue("keyToRead");

The HandleRPUpdate would take the form of

private void HandleRPUpdate(FriendRichPresenceUpdate Update)
{
    // Update.App what app is this for
    // Update.Friend what user was this for
    // It's up to you to read what you want from them
}

Last updated