Steamworks Documentation
Developing for Steam Deck
There are a few things you can do right now to make your game better on Steam Deck, without a developer kit.

Input

  1. If your game is controller-enabled, plug a controller into your computer, and play your game from startup. Take note when there are moments where you have to reach for your keyboard or mouse (launchers, for instance).
  2. If your game is not controller-enabled, look into setting a Steam Input default configuration with an intuitive control scheme.
  3. Use ISteamUtils::ShowGamepadTextInput() for in-game text fields.
  4. If your game has support for both mouse-style (1:1 movement without filtering) and joystick-style camera movement, making sure they can work at the same time will provide a better experience for trackpad and gyro users. Common problems include joystick input getting locked out when mouse camera is used and vice versa, controller buttons not working when mouse camera is being used, on-screen button prompts changing between controller and keyboard/mouse icons. We recommend allowing mouse events to affect the camera as they normally would without perturbing simultaneous controller functionality, and only switching to mouse/keyboard mode if a mouse click event is received.
  5. Fully integrate with the Steam Input API for best results.

Proton Compatibility and Performance

  1. Learn about common Proton compatibility issues here. This document also details how to use a Linux system as a proxy for a Deck developer kit to test Proton compatibility.
  2. We recommend targeting Vulkan as your primary graphics API for best performance and battery life. If you use an engine like Unity or Unreal, enable Vulkan in your build for all users, and report any performance or functional differences from the DirectX version to your engine vendor. However, if Vulkan would be a secondary path with lower performance, doing this work is not typically worth it, as Proton DirectX translation performance is likely to exceed untranslated Vulkan in this case.

Steam Integration

  1. Support Steam Cloud. This feature will allow players to start a game on their PC and continue it seamlessly on Steam Deck - or vice versa.
  2. Support Offline Mode: test your game without any online connectivity, including first run on a new Steam account.

Steamworks SDK 1.52

As of September 14, 2021, the Steamworks SDK has been updated, including additions to ISteamInput and ISteamUtils that will help with Steam Deck development. A few of them are listed here:
  • Added IsSteamRunningOnSteamDeck - Can be used to optimize the experience of the game on Steam Deck, such as scaling the UI appropriately, applying performance related settings, etc.
  • Added SetGameLauncherMode - In game launchers that don't have controller support you can call this to have Steam Input translate the controller input into mouse/kb to navigate the launcher.
  • Added AppResumingFromSuspend_t callback - Sent after the device returns from sleep/suspend mode.
  • Added ShowFloatingGamepadTextInput - Activates the modal gamepad input keyboard which pops up over game content and sends OS keyboard keys directly to the game. Note: Currently this is only implemented in the Steam Deck UI.
  • Added FloatingGamepadTextInputDismissed_t callback - Sent after the floating gamepad input keyboard displayed via ShowFloatingGamepadTextInput has been dismissed.

Full SDK release notes can be found here.