Touch menus can be configured in many different ways in both behavior and appearance, and can be adorned with custom labels and icons (provided by either Valve, the developer, or the player). Here's an example of a touch menu in [i][url=http://store.steampowered.com/app/268500/XCOM_2/]XCOM 2[/url][/i], binding the numeric hotkeys: [docimg=xcom2_touch_menu_button_ex.png]xcom2_touch_menu_button_ex.png[/docimg] Touch menus are available in both native and legacy mode, but can only be driven by a trackpad. …
The basic configuration screen has four menu buttons, but you can assign up to sixteen (select "Additional Settings" for bindings for menu buttons 5-16). [docimg=xcom2_touch_menu_button.png]xcom2_touch_menu_button.png[/docimg] [subsection]Menu Button Icons[/subsection] You can assign icons to each touch menu button, either picking from Valve's default icons, or provide your own. …
. [*][b]On its own dedicated calendar page[/b], where it shows [b]eight weeks[/b] of releases. [/list] [docimg=frontpagecalendar1.png]frontpagecalendar1.png[/docimg] [i]The Personal Calendar on the Steam Store front page.[/i] [docimg=standalonecalendar1.png]standalonecalendar1.png[/docimg] [i]The dedicated Personal Calendar page.…
This applies whether you are launching a full release or moving from [url=https://partner.steamgames.com/doc/store/earlyaccess]Early Access[/url] to 1.0. Once your game becomes eligible, it can start appearing on the calendar within about a day. [b]Tip:[/b] To maximize your visibility, set your release date at least 60 days in advance to be eligible to appear on the dedicated calendar page, and at least three weeks in advance to be eligible to appear on the front page. …
Deploying builds to Steam is much like doing so for any [doclink=store/application/platforms]supported platform[/doclink]. [section]Step 1 - Setup New App[/section] Follow these [doclink=sdk/uploading#Initial_Setup_New_App]general instructions[/doclink] for setting up a new app on Steam. Then from your [b]App Admin[/b] page, click [b]Edit Steamworks Settings[/b] under [b]Technical Tools[/b]. [docimg=steamworks_settings.png]steamworks_settings.png[/docimg] [section]Step 2 - Set Supported Operating Systems[/section] Navigate to the [b]Application > General[/b] tab for your app, and check [b]Android [/b] under [b]Supported Operating Systems[/b]. …
The currencies listed as "live" below are currently available to customers on Steam. Currencies listed without being Live are ones where we collect prices and plan to release at some point in the future. …
Unless otherwise noted: [list] [*] Amount can result in a partial "dollar" value (e.g. 150 cents for $1.50). [*] Amount entered into the partner site or sent to the [webapi]ISteamMicroTxn/InitTxn[/webapi] API must be expressed using the hundredths value ("cents", "pence", etc.) of the selected currency ("dollar", "pound", etc.). …
When creating new Root paths, the default [code-inline]OS Restriction[/code-inline] setting is [code-inline][Cross-Platform][/code-inline]. We strongly recommend you use this setting, even if your game currently only supports one platform. …
We recommend doing everything you can to avoid this condition, however, as it means a customer with devices across multiple platforms will never have their progress saved across those devices. [section=initial-setup]Initial Setup[/section] To set up Steam Cloud you must set the [code-inline]Byte quota per user[/code-inline] and [code-inline]Number of files allowed per user[/code-inline] options on the [url=https://partner.steamgames.com/apps/cloud/]Steam Cloud Settings[/url] page in the Steamworks App Admin panel. …
Only return reviews created at or after this time. Ignored unless [code-inline]date_range_end[/code-inline] is also set.[/td][/tr] [tr][td][b]date_range_end[/b][/td][td]uint32[/td][td][/td][td]Unix timestamp. Only return reviews created at or before this time. Ignored unless [code-inline]date_range_start[/code-inline] is also set.[/td][/tr] [tr][td][b]date_range_exclude[/b][/td][td]bool[/td][td][/td][td]If true, exclude reviews inside the date range instead of returning only them.…
Depending on the method, these parameters must be passed in as GET or POST params in the request. All requests should be sent using HTTP 1.1 and use a secure TLS connection when possible. The Content-Type must be [code-inline]application/x-www-form-urlencoded[/code-inline] and the POST parameters must be in the body of the request in standard form urlencoding format. …
To pass in data as JSON, invoke the web API method with the [code-inline]input_json[/code-inline] parameter set like: [code]?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&input_json={"steamid":76561197972495328}[/code] Note that the JSON will need to be URL-encoded. …
[subsection]Action Set Layers[/subsection] Action Set Layers are optional sets of action bindings which can be overlaid upon an existing set of controls. …
These can consist of setting changes as well as adding or removing bindings from the base action set. More than one layer can be applied at a time and will be applied consecutively. …
Steam Frame supports development and deployment from Unity, Unreal Engine, Godot, and your own custom engine via OpenXR. See the pages below for information on your engine. [list] [*][doclink=steamframe/engines/unity][/doclink] [*][doclink=steamframe/engines/unreal][/doclink] [*][doclink=steamframe/engines/godot][/doclink] [*][doclink=steamframe/engines/custom][/doclink] [/list]…
It is up to the publisher/developer to decide if they want to participate in the program and they are responsible for setting the commercial price. [*][h4]Does the Café Program work for schools and universities?[/h4] Yes. We designed the Café Program to be as flexible as possible. …
[/h4] We will have no limit on the number of PCs that the pool of commercial game licenses can be used across so as long they are all on the same network where the authorized Café Server is located. [*][h4]How do I set up the Steam PC Café Server and enable content cache?[/h4] Instructions on how to set up the server and frequently asked questions around it can be found [url=https://partner.steamgames.com/doc/sitelicense/licensees/gettingstarted/licensemodelpc]here[/url]. [*][h4]How can I add my VAT ID to my license agreement?…
Please note that there is a considerable amount of overlap between stats and achievements, as such if you are integrating both be aware that a lot of calls can be consolidated. [section]Step 1 - Defining your game's Stats[/section] Stats are application specific and are setup on the [url=https://partner.steamgames.com/apps/stats/]Stats Configuration[/url] page in the Steamworks App Admin backend. …
[b]What it does[/b] - This method basically wraps a call to [api]ISteamUserStats::RequestCurrentStats[/api] which is an asynchronous call to steam requesting the stats of the current user. This call needs to be made before you can set any stats or achievements. The initial call to this method is made in the constructor. You can call it again any time after that if you want to check on updated stats or achievements. …
. [*] [url=http://store.steampowered.com/about/]The Steam for Linux client[/url]. [*] The basic Linux development tool set (e.g. g++, gcc, and a make utility); contained in the build-essential package. Install this package either by using Ubuntu Software Center or from an open terminal window with the apt-get command: sudo apt-get install build-essential. [*] The latest version of the [url=https://github.com/ValveSoftware/steam-runtime]Steam Linux Runtime[/url] which includes the tools and a complete set of libraries required to ship Linux games on Steam. …
Typically, proprietary drivers out-perform open-source drivers and have a larger feature set. In addition, the age of the driver can vary between proprietary and open-source versions. [b]Q: The [doclink=features/overlay][/doclink] won't work when launching from outside of Steam.…
[b]Returns:[/b] int The number of users that meet the specified criteria. [b]NOTE:[/b] Returns [b]-1[/b] if the current user is not logged on. [b]Example:[/b] [code=cpp]int nFriends = SteamFriends()->GetFriendCount( k_EFriendFlagImmediate ); if ( nFriends == -1) { printf( "GetFriendCount returned -1, the current user is not logged in.…
A Steam image handle which is used with [api]ISteamUtils::GetImageSize[/api] and [api]ISteamUtils::GetImageRGBA[/api]. Returns [b]0[/b] if no avatar is set for the user. Returns [b]-1[/b] if the avatar image data has not been loaded yet and requests that it gets download. In this case wait for a [apitype]ISteamFriends::AvatarImageLoaded_t[/apitype] callback and then call this again. …
From September 2026 onwards, Steam will require you to create this branch manually first (if it doesn't already exist for your app), and will require it to be password-protected. [section]Setting Up Local Content Server[/section] First choose a simple, but high performance web server that only needs to serve static files. …
Find your local build in the list of current builds and select Local from the dropdown next to the desired local build, then click 'Preview Change'. [docimg=setLCSLive.png]setLCSLive.png[/docimg] [section]Configuring Steam Client To Use Your Local Content Server[/section] For the Steam client to know where to look for your game, you'll need to create a file, [code-inline]steam_dev.cfg[/code-inline] in the same directory that contains steam.exe. …
We recommend that you only white-list properties that you are fine with an untrusted client setting (i.e. the user can spoof messages to set the value to whatever they want). Currently you can modify up to 100 items for a user in each call. …
[h4]Applying Restrictions[/h4] As mentioned previously, you can white-list certain properties so they can be set from the client. But you can also further restrict what properties can be set by requiring the target item to have a specific [code-inline]tag_category:tag_value[/code-inline] pair or for any [code-inline]tag_category[/code-inline] value. …
response_type=token&client_id=client_id_here&state=whatever_you_want[/code] Adding [code-inline]&mobileminimal=1[/code-inline] to the above request is recommended for embedded browsers, as it removes some of the Steam site navigation UI that will not be relevant when the OAuth page is presented directly to a user within your game. …
Unless others noted below, requests should be HTTP POST requests presented as form data and should set this header: [code]Content-Type: application/x-www-form-urlencoded[/code] [Section=RetrieveSteamID]Retrieving the User's SteamID[/Section] Once you have an OAuth token for a user, you can make a server to server call to securely get the SteamID for the user associated with that token by calling: [code]https://api.steampowered.com/ISteamUserOAuth/GetTokenDetails/v1/?…
Variations: [list] [*] Left Trackpad [*] Right Trackpad [*] Center Trackpad [/list] Sub-inputs: [list] [*] The touch surface itself (analog) [*] Clicking the surface (digital) [/list] [section]Joystick[/section] [docimg=input_joystick_1.png]input_joystick_1.png[/docimg] Joysticks are available on virtually all modern controllers. The PlayStation 4 and Xbox controllers all feature twin sticks, but the Steam Controller only has one, which is considered the "Left Joystick" in this case. …
Variations: [list] [*] Left Trigger [*] Right Trigger [/list] Sub-inputs: [list] [*] Analog pull [*] Digital click* [/list] [i]*Of the four major supported controller models, only the Steam Controller supports a discrete digital "click" at the end of a full pull. However, the player can set a threshold in the Steam Input Configurator to emulate this behavior for all other controller models.[/i] [section]Gyro[/section] [docimg=input_gyro.png]input_gyro.png[/docimg] The Steam Controller, PlayStation 4 controller and the recently added PS5 (DualSense) feature internal gyroscopes which allow for motion controls, aim assist, etc. …
[docimg=steam_controller_shoulder_buttons.png]steam_controller_shoulder_buttons.png[/docimg] [subsection=ShoulderTriggers]Shoulder triggers[/subsection] [b]Analog, 1 axis[/b] (+ digital "full pull") The analog triggers on the Steam Controller have a distinct digital "click" at the end of the normal analog range distinguishing a "full pull" from a "soft pull", similar to the triggers on the Nintendo GameCube controller. …
These can be used to generate direct analog motion with many different user settings, but they can also be made to emulate other devices, such as mice, joysticks, trackballs, etc. Some of their most powerful features come from using them in concert with the steam overlay to create on-screen radial menus and touch menus (see [doclink=features/steam_controller/input_source_modes][/doclink]). …
[subsection=SetCloudEnabledForApp]SetCloudEnabledForApp[/subsection] [code=cpp]void SetCloudEnabledForApp( bool bEnabled );[/code] [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]bEnabled[/b][/td][td]bool[/td][td]Enable ([b]true[/b]) or disable ([b]false[/b]) the Steam Cloud for this application?…
[/td][/tr] [tr=k_ERemoteStoragePlatformWindows][td][b]k_ERemoteStoragePlatformWindows[/b][/td][td](1 << 0)[/td][td]This file will download on Windows.[/td][/tr] [tr=k_ERemoteStoragePlatformOSX][td][b]k_ERemoteStoragePlatformOSX[/b][/td][td](1 << 1)[/td][td]This file will download on macOS.…
[docimg=ReleaseExampleDocs.jpg]ReleaseExampleDocs.jpg[/docimg] [callout]NOTE: Publishing a coming soon page or releasing a game requires two specific Steamworks permissions: 1. Publish app changes to Steam 2. Manage pricing and discounts Users who do not have those permissions on the appID being released will see an error message and not be able to complete the release. …
[docimg=ReleaseOptions_2.png]ReleaseOptions_2.png[/docimg] After you click "Release App", you'll see a summary of actions that the release process will do, including publishing the store package, setting a launch discount live if you chose to have one, setting the game to playable and released and applying the release timestamp of "NOW". …