Steamworks Documentation
Downloadable Content (DLC)

Overview

Steam supports both free and paid downloadable content (DLC) that can be registered via CD key or purchased from the Steam store. In the Steam client, a game with downloadable content appears as a single application in the user's game list with the downloadable content viewable through the game's properties dialog.

Once owned, downloadable content is treated as an integral part of the game. Steam automatically updates the content when a patch is available and installs the content when the user installs the game.

Some examples of additional content that could be delivered as DLC include both in-game content include
  • Expansions
  • New maps or levels
  • Additional characters
DLC could be used for supplemental content that does not show up in-game such as
  • Artbooks or wallpapers
Game Soundtracks on Steam are handled with a special type of App ID that's different from DLC. Other types of in-game content such as cosmetics, consumable items or currencies may better be served by microtransactions.

Best Practices

DLC can be a great way to offer value to the customers that are interested in investing deeper in the product, it can also have non-monetary costs of customer perception that are harder to measure. It might not be a good idea to launch with a DLC on day 1 as customers may perceive that the full game was ready to release but you chose to take away content from the game to make more money through a paid DLC.

Video Tutorial

This Steamworks Tutorial details the process of creating and configuring DLC for your product on Steam.
https://www.youtube.com/watch?v=Su4uuUjnm9M

Configuration

In Steam, each piece of downloadable content is identified by its own app ID. Unlike the base game, the DLC uses the app ID as the depot ID.

Creating a new DLC app ID is done by viewing the base game's "All Associated Packages, DLC, Demos And Tools" and clicking on the "Add New DLC" button.

When downloaded, the Steam client will store all downloadable content under your game's Steam directory. Your game can choose to distribute each piece of content in one of two ways:
  • The content can be included with your game files that are distributed to all game owners. Your game can then use ISteamApps::BIsDlcInstalled to determine if the user owns the content. This method is useful when all players can view the content, but a player needs to own the content to use it (such as RTS units, multiplayer skins, etc.).
  • The content can be stored in a new depot that will only be downloaded by users who own the content.

See the Depots documentation for more information.

In-Game Purchasing

Steamworks games can support in-game downloadable content, which allows a user to browse, purchase, and download new content without leaving the game. Steam can display any available content to the user and conduct the entire purchase path through a web browser session that can be opened in the Steam overlay sitting on top of the game. When a user purchases downloadable content, the Steam client will automatically download the content, display an in-game Steam notification to the user when the download is complete, and notify your game that the download has completed and the user owns new content.

Steamworks games can use ISteamFriends::ActivateGameOverlayToStore to display downloadable content in the Steam overlay. ISteamFriends::ActivateGameOverlayToStore can display all downloadable content for your game (pass in your game's app ID), or information about a specific piece of downloadable content (pass in the app ID of the downloadable content). Before directing a user to the store, Steamworks games should call ISteamUtils::IsOverlayEnabled to determine if the user has disabled the Steam overlay through the Steam client settings.

Note: To prevent version incompatibilities with the executing version of a game and downloadable content, Steam will only download new content if the user is running the newest version of the game.

Configuring Additional DLC Depots

After following the depot documentation you should have one DLC Depot added to your Base App. If you need to add additional DLC depots to support alternate languages, OS's, or architectures, follow the steps below:
  1. Open the Steamworks App Admin for the base App (All depots are managed in the base App, not in the DLC).
  2. Navigate into Steamworks Settings, SteamPipe, Depots.
  3. Click the Add New Depot button, set the name, and click OK. Give it a name similar to the existing DLC depot so you can easily identify it.
  4. Set the correct language, OS or architecture.
  5. Choose the correct DLC from the dropdown box to associate this depot with the DLC.
  6. Click Save Changes. Note that the Steam client will not know about the new depot until you have published your changes.
  7. Add the depots to any packages which need to contain your depot (e.g. Developer Comp package)
  8. On your build machine, add a new depot build script for the new DLC depot.
  9. Add that new depot build script to your base game app build script.
  10. Complete any remaining tasks to upload the new Depot files, set the build live, etc.

Note: All DLC depots reside within the Base App Depot list. There is no way to have Depots reside within your DLC App directly.

Programmatically Downloading and Installing DLC

DLC is typically downloaded and installed as soon as it is purchased by a Steam user. However DLC can be marked to not download automatically so that the game has control of when the DLC download occurs. This can be useful for supporting streaming installs or downloads based on game logic.

You can configure DLC to be downloaded and installed on-demand by following the steps below.
  1. Create up to 10 DLCs that can be used as downloadable chunks.
    • From the app package landing page, click "All Associated Packages, DLC, Demos And Tools", and use the "Add New DLC" button to add the DLCs.
  2. Configure each DLC so that the Steam Client does not automatically download it.
    • For each DLC, go into Steamworks Settings -> General.
    • Ensure “Disable Steam automatically downloading this DLC” is checked on.

  3. Add the DLCs to the appropriate packages (Steam Store, Retail, Beta Test, Developer Comp, etc.) so that they are accessible when the base app is purchased.
    • From the app landing page, click "All Associated Packages, DLC, Demos And Tools.".
    • Click on the package you wish to add the DLC to.
    • Click "+ Add Applications", find the associated DLCs, ensure they are checked on and click Continue then Save.
  4. Add the appropriate files for each DLC to the associated DLC depot as part of your Steampipe build process.
    • See Depots documentation for more information.
  5. At the appropriate places in the code, implement the following APIs to trigger the DLC to be downloaded and installed.

Additional Notes:
  • If you check the box “Disable Steam automatically downloading this DLC,” a player who owns the DLC can manually choose to install it from their library, even if your game does not make use of the ISteamApps:InstallDLC API.
  • It is possible for a user to initiate the download of the DLC from the Steam Client UI via the Properties ->DLC tab.
  • You can also use ISteamApps::UninstallDLC to remove the DLC content if needed.

Testing

Before you begin testing downloadable content, check that you own the DLC by selecting your game in the Steam client's games list, then selecting 'Properties', and finally selecting the 'DLC' tab. If the DLC does not appear there, you do not own it.

You can simulate gaining ownership of downloadable content through the Steam client. When your new content is added to Steam, you will be given you a package that grants your publisher group access to the content. Usually this package will have a name which contains "Developer Comp".

You can temporarily disable owning the "Developer Comp" package, and then enable it again to simulate a purchase of your DLC. To do this, follow these steps:
  • Launch steam.exe with the command -console (or run steam://nav/console)
  • Navigate to the Console tab in the client
  • Enter the command licenses_for_app <appID>. This will tell you the packageID for how you own the DLC appID
  • Enter the command disable_license <packageID>, using the packageID from above

At this point, your account should no longer own your DLC automatically. You can test running your game and verify that any ownership APIs return false for the DLC. Going back to the Steam console, you can use enable_license <packageID> to re-enable owning the DLC. Restarting Steam will also grant you automatic ownership again.

Anticipating Fraud

You run a risk of fraud any time you offer something of value that can be purchased.

DLC fraud involves a user purchasing high-value DLC with a stolen payment method (such as a credit card). The fraudsters’ goal is to move the any available contents of the DLC to another account, either owned by the fraudster or a player who is paying for those goods outside of the system. Alternatively, fraudsters may attempt to sell the entire account, again while being paid outside of the system.

As such, we do not recommend including in-game currency or tradable items in DLC. Those sales are better served by Microtransactions and the suggestions outlined in that document.

Steam catches most fraudulent transactions within 48 hours of the initial purchase. A DLC ownership check at launch or after 48 hours will reconcile changes to transactions according to their updated status.