Overview
A local content server (LCS) is basically a local HTTP server, like Apache or nginx. Using a LCS improves depot iteration time since they are not uploaded and distributed through the public Steam network. Instead, all the depot content is stored on your LCS in chunk files and served to Steam clients that have access to your LCS.
When building content for your LCS, the depot builder needs to talk to the Steam Master Depot Server (MDS) but does not upload any content. Only metadata about your local depots is uploaded to Steam, since local content is managed through the Steamworks site, just like public content.
The LCS only serves depot content and doesn't override any other game configuration. Depot content is always encrypted on your LCS (as it is for public content servers). Even if somebody managed to download depot chunks from your LCS, they wouldn't be able to decrypt the data, since they don't have the depot decryption keys.
Local-only branch
You'll need a branch for your app named "local". Prior to September 2026, this branch was created automatically by Steam on the first build uploaded which specified it was an LCS build. 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.
Setting Up Local Content Server
First choose a simple, but high performance web server that only needs to serve static files. We are using the open source web server
mongoose, since Apache download performance on Windows was too low (3MB/sec) and configuration is complicated.
In your Steamworks SDK there is a directory called '/tools/ContentServer/'. This directory contains a prebuilt version of mongoose-3.1.exe. Run this application from the ContentServer directory.
Create a new app_build vdf script. The format we typically follow is
app_build_[AppID]_Local.vdf.
This vdf should be similar to your regular SteamPipe upload scripts but must have a "local" key.
"appbuild"
{
"appid" "[AppID]"
"local" "[PathToYourSteamworksSDK]\tools\ContentServer\htdocs"
// ...
}
Run your new app_build vdf script with steamcmd.
Once you've successfully built a local version of your game, go to the
SteamPipe Builds page for your game.
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'.

Configuring Steam Client To Use Your Local Content Server
For the Steam client to know where to look for your game, you'll need to create a file,
steam_dev.cfg in the same directory that contains steam.exe.
This file should contain the following text:
@LocalContentServer YourWebServerName
Examples:
@LocalContentServer localhost
@LocalContentServer "127.0.01:8080"
- Either the server IP or server hostname can be used.
- If you need to specify another port then 80, it must be "ip:port" in quotes
- Don't add "http://" in front, HTTPS is not supported
Note: The default location of the Steam executable is:
Note As of September 2026, Steam will begin requiring newly-created "local" app branches to be
password-protected. For local branches with a password, users will also need to enter the password into the Steam client UI to unlock the "local" branch selection. They can do this as shown below. For best results, the user should have the @LocalContentServer setting placed in their steam_dev.cfg
before unlocking the beta.
- right-clicking the game in the Steam Library
- choosing "Properties"
- selecting "Game Versions & Betas"
- entering the password in the "Private Versions" text box and hitting "Check Code"
- selecting the newly-appearing "local" entry under "Selected Game Version" above