Skip to content
Publishing Your Project on Steam: A Ren’Py Howto

Publishing Your Project on Steam: A Ren’Py Howto

Ever since Valve has allowed erotic content in their immensely popular storefront more and more titles have been cropping each month. If your project is nearing completion or is completed, you should seriously consider publishing your game on Steam. There’s a huge audience, largely separated from the crowd that frequents sites like Patreon or itch.io, craving new lewd content.

Preparing your content

The application to get your project on Steam costs $100 per game, this includes a (often manual) review of your game and access to the Steamworks toolset in order to market and deliver your game. The entrance fee will be reimbursed as soon as you hit $1000 in sales. Before beginning the process you should make sure you won’t fail the review process outright. Some pointers:

  • Remove content that might be considered illegal
    Steam is very lenient on what they allow to be sold in their store (incest is allowed, for example), but there are limits. Games should not include depictions of real humans engaging in sexual acts. Imagery containing characters looking underage will also result in a rejection from Valve. Explanations like “But my ten-year-old-looking vampire is actually ten thousand years old!” will probably not sway judgment in your favor. Lastly, school settings and any characters dressed in schoolgirl uniforms are problematic.
  • Remove any references to other platforms
    If you funded development of your project through Patreon or SubscribeStar, make sure you remove any links to those platforms. Steam doesn’t allow links to other marketplaces or funding platforms.
  • Get ready to do a lot of work
    As an indie dev you probably do a lot, if not all, work yourself. The process of getting a game is quite laborious, you’ll be asked to submit a lot of paperwork, set up store your store page, create a video trailer for your game and submit a library of artwork. Other than that, there are optional (but strongly recommended) features to consider, like achievements and trading cards.

Building a Steam release in Ren’Py

Once you’ve made sure your game is eligible for submission you can proceed to build a release in Ren’Py. Before the release of Ren’Py 7.4 you needed to request the Steam library files directly from the framework’s developer renpytom and manually install them, because of copyright issues. The latest release of Ren’Py can download and install the Steam library for you:

  • Choose “Preferences” from the Ren’Py launcher
  • Select “Install libraries” from the “Actions” section
  • Choose “Install Steam Support”
  • Wait for Ren’Py to restart

Theoretically you could now build three separate versions (Windows, Linux, Mac), but it’s easier to use the “Windows, Mac, Linux for Markets” option, because it creates a hybrid build.

Folder structure of the build.
  • Choose “Build Distributions” from the “Actions” section of the Ren’Py launcher
  • Select “Windows, Mac, Linux for Markets” from the “Build Packages” list
  • Click on “Build”

Ren’Py will create a zipped file for you containing all the necessary files. You should unzip the file, because you’ll be uploading the individual files to Steam later on. Once unzipped you should have a directory containing three folders (game, lib and renpy) and a couple of files (among them YourGameName.app, YourGameName.exe and YourGameName.sh).

Become a Steamworks partner

The Steamworks front page.

This guide won’t the entirety of the publishing procedure, because that’s well-documented in the Steamworks documentation. Instead I’ll focus on a couple of major steps in the process.

In order to get access to Steamworks you need to file the necessary paperwork (personal information, bank details). Once Valve has verified all of this, you will get access to the Steamworks dashboard. The interface may seem a little daunting at first and working with Steamworks is a peculiar experience, but it’s powerful and the only way to get your game on one of the world’s biggest gaming platforms.

Before you can use all of the features you should bite the bullet and click on “Pay Product Submission Fee”. After completing the payment process your first game will appear on the dashboard. the payment process your first game will appear on the dashboard. By clicking on it you’ll see a long list of options accompanied by a sidebar with a checklist keeping track of how far you are in the whole submission process.

Steamworks makes a distinction between App and Store admin. The former is where you’ll set up the technical details of your game, while the latter deals with the promotional (user-facing) side of your game.

Submitting a game build

Detail of the Steamworks App Admin dashboard.

By clicking on “Edit Steamworks Settings” you’ll get taken to your game’s technical configuration dashboard (also called App Admin). From here you can set the game’s name, supported platforms and add builds, achievements. The first three tabs (“Application”, “SteamPipe”, “Installation”) of this dashboard are important at this point, we’ll dig into adding achievements in a later entry of this article series.

The “Application” tab has a submenu, but the only relevant item in that list is likely just “General”. You can fill in the name of your game and supported operating systems here. One thing to note here is the mention of “Notarized App Bundles” for macOS. As an extra security feature, Apple has been requiring applications to be notarized on their operating system. This means that you need to apply for a membership of the Apple Developer Program (costing $100 per year) and create the necessary notarization certificates. Ren’Py can theoretically create notarized app bundles, but the process isn’t very well-documented. While non-notarized applications do run, it requires some intervention on the user’s part, allowing software to run from any source. Because of this, it’s probably easier to forgo supporting macOS on Steam.

We’ll deal with the “SteamPipe” section once you’re ready to upload your game.

Both “General Installation” and “Client Images” are of interest. You set up the install folder and launch options in “General Installation”. Because you’ve created a hybrid game build in Ren’Py, you can just create the launch options for all the operating systems you want to support. The executable name should be set to either YourGameName.exe (Windows). YourGameName.app (macOS) or YourGameName.sh (Linux). The “Client Images” section is where you should upload the application icons of your game.

Once you’ve set everything up, you should select “Publish” at the far end of the dashboard button row. Click “Prepare for publishing” and then, if there are no errors, “Publish to Steam”.

The folder structure of the Steam SDK.

Now you’re ready to upload a build using SteamPipe. There is an option to upload zipped files directly using a web form in Steamworks, but the file size is limited to 2GB and the process is far less robust than using SteamPipe. Also, SteamPipe is smart about uploads, so when you’re uploading an update version of your game it will only upload the changes compared to the original (so-called delta patches).

First, download and install the Steamworks SDK. Setting up the SDK differs on each operating system (there’s a GUI available for Windows, for example) and Steam advises to create a separate user to upload game builds, so refer to the documentation for more details.

Once you’re finished you should have a directory SDK directory containing several subdirectories, on of which should be called tools. The tools directory in turn contains a ContentBuilder directory (and several others) holding six subdirectories (builder, builder_linux, builder_osx, content, output and scripts).

  • Place the all of the files from the build directory generated by Ren’Py inside tools/ContentBuilder/content.
  • Find the application and depot ID in Steamworks. The application ID is the number next to the game’s name in the App Admin. The depot ID can be found by hovering over “SteamPipe” and clicking “Depots”. If there are no depots, create and configure one, otherwise note the ID in front of the depot name.
  • Using your favorite text editor, create two files in tools/ContentBuilder/scripts called app_build_YOUR_APPLICATION_ID.vdf and depot_build_YOUR_DEPOT_ID.vdf.
    The contents of the files should look like the following:

depot_build_YOUR_DEPOT_ID.vdf

"DepotBuildConfig"
{
	// Set your assigned depot ID here
	"DepotID" "YOUR_DEPOT_ID"

	// Set a root for all content.
	// All relative paths specified below (LocalPath in FileMapping entries, and FileExclusion paths)
	// will be resolved relative to this root.
	// If you don't define ContentRoot, then it will be assumed to be
	// the location of this script file, which probably isn't what you want
	"ContentRoot"	""

	// include all files recursivley
  "FileMapping"
  {
  	// This can be a full path, or a path relative to ContentRoot
    "LocalPath" "*"

    // This is a path relative to the install folder of your game
    "DepotPath" "."

    // If LocalPath contains wildcards, setting this means that all
    // matching files within subdirectories of LocalPath will also
    // be included.
    "recursive" "1"
  }

	// but exclude all symbol files
	// This can be a full path, or a path relative to ContentRoot
  "FileExclusion" "*.pdb"
}

app_build_YOUR_APPLICATION_ID.vdf

"appbuild"
{
	"appid"	"YOUR_APPLICATION_ID"
	"desc" "Reinstate patch and extra scenes" // description for this build
	"buildoutput" "..\output\" // build output folder for .log, .csm & .csd files, relative to location of this file
	"contentroot" "..\content\" // root content folder, relative to location of this file
	"setlive"	"" // branch to set live after successful build, non if empty
	"preview" "0" // to enable preview builds
	"local"	""	// set to flie path of local content server

	"depots"
	{
		"YOUR_DEPOT_ID" "depot_build_YOUR_DEPOT_ID.vdf"
	}
}
  • You’re now ready to upload the build by running the command to upload the build.
    On Windows:
    tools\ContentBuilder\builder\steamcmd.exe +login +run_app_build ..\scripts\app_build_YOUR_APPLICATION_ID.vdf +quit
    On macOS:
    ./tools/ContentBuilder/builder_osx/steamcmd.sh +login +run_app_build ../scripts/app_build_YOUR_APPLICATION_ID.vdf +quit
    On Linux:
    ./tools/ContentBuilder/builder_linux/steamcmd.sh +login +run_app_build ../scripts/app_build_YOUR_APPLICATION_ID.vdf +quit

If the command finishes successfully your new build should now be uploaded and available in Steamworks under “Builds” in the “SteamPipe” tab. This doesn’t mean however that the build can be downloaded and played via the Steam Game Client. In order to do that you need to select the build you’ve just uploaded and attach it to a branch. You can create your own additional branches, but the default branch is the one that will allow you to push a new build to the game client. Select the default branch and preview the change.

Move over to the “Publish” tab again and select “Prepare for publishing”. If all goes well you should hit “Publish to Steam”. The game is now live and downloadable. Of course, if your game hasn’t been approved yet, the downloads are only available to you.

Setting up your store page

The Steam store page for one of my games.

Having set up your first build, you can now move onto creating your store page. Go back to the Steamworks dashboard and select “Edit Store Page”, this will take you to the Store Admin section. From here it’s just a question of filling in all the relevant information on all of the tabs.

In the “Basic Info” section, be sure to fill out all of the information truthfully. Steam requires you to take a “Mature Content Survey” where you list the nature of the sexual content in the game and where they ask you how to reach any scenes of a sexual nature quickly for review.
This is also the tab where you can indicate support for any additional languages. As an aside, having your game translated into German, French, Spanish, Portuguese and Russian widens your potential audience.

The “Ratings” tab has one noteworthy section regarding sales in Brazil. If you want to sell your game in that country you’ll need to take questionnaire and answer quite a lot of questions. Other than that, if you don’t have an rating for your game by an official board, don’t fill in any other ratings.

The “Graphical Assets” and “Trailers” section are self-explanatory. Make sure that any image you upload is safe for work, so nudity or characters in compromising poses. However, sexual content is allowed in the trailer and screenshots you upload, because these can only be viewed on the store page itself after dealing with an age gate.

After you’ve entered all of the information and uploaded all of the assets you’re ready to publish. Once again, the changes will only become visible to you if your game hasn’t been approved yet.

By now the todo list on the Steamworks dashboard should look a lot less incomplete.

Coming up with a release date

Setting your release date in Steamworks.

Plan your release date carefully. You need enough time to setup your store, implement any achievements, create all the imagery and produce a trailer. Also factor in dealing with the application review and any changes that might result from that. Steam Support usually replies within a couple of business days, but the review process might take longer. Especially for adult games they do a more thorough check in addition to any technical issues or discrepancies between your game and what’s listed on the store page. Having a release date comfortably in the future also gives you time to market your game once it has been approved and to get on player’s wish lists.

Getting your game onto Steam is quite a journey, but believe me when I say it’s worth it.