Quick answer: Steam could not find the file named in your launch option. Make the launch option's executable path match the installed folder layout exactly (it is relative to the install folder, and case-sensitive on Linux and Steam Deck), make sure the depot that contains the exe is in the package and on the live branch, and publish your Steamworks changes. For individual players, verifying files restores an exe their antivirus removed.

This error is one of the worst first impressions a game can make: the player clicks Play and nothing happens except a dialog. When everyone gets it, your Steamworks configuration is wrong. When a few people get it, something on their machine removed the file. Both are fixable.

The exact error

Failed to start game (missing executable).

Steam reads the executable path from your app's launch options, appends it to the install folder, and checks the file exists before starting it.

Cause 1: the launch option path does not match the depot

Open Steamworks Installation > General Installation and look at each launch option's Executable. It is relative to the install folder. If your depot puts files in a subfolder, the path must include it:

On Linux builds and on Steam Deck running a native Linux build, paths are case-sensitive: mygame.x86_64 and MyGame.x86_64 are different files. Also check each launch option's Operating System field; a Linux launch option marked Windows does not exist for Linux players.

Cause 2: the exe is not in the depot or the package

Check what the build actually contains. In your app build script, the content root and file mapping decide what gets uploaded:

"AppBuild"
{
  "AppID" "1234560"
  "Desc" "1.0.4"
  "ContentRoot" "..\content\"
  "BuildOutput" "..\output\"
  "Depots"
  {
    "1234561"
    {
      "FileMapping"
      {
        "LocalPath" "windows\*"
        "DepotPath" "."
        "recursive" "1"
      }
    }
  }
}

With this mapping, content/windows/MyGame.exe installs as MyGame.exe at the root. A mapping of "LocalPath" "*" would install it as windows/MyGame.exe instead. Also confirm the depot is included in the packages players own (the store package and any developer comp package), and that file exclusions do not exclude executables.

Cause 3: changes not published or not live

Cause 4: the file was removed on the player’s machine

When only some players are affected, their antivirus probably quarantined the executable, often a newly built, unsigned exe flagged heuristically. Ask them to restore it from quarantine or add an exception, then use Properties > Installed Files > Verify integrity of game files. Code-signing your executables reduces false positives.

How to test it like a player

  1. On a clean machine or second Steam account, install from the store (not from your local folder).
  2. Open the install folder and confirm the exe is where the launch option says.
  3. Test every launch option, and on Steam Deck test both the native Linux build (if you ship one) and Proton.

After the game starts

This error stops the game before any of your code runs, so only your Steamworks setup can prevent it. Everything after launch is different. Bugnet's SDKs for Unity, Godot and Unreal file errors automatically with the player's OS, hardware and recent log lines, and pull your Steam reviews into the same dashboard, so you can line up “doesn't start” reviews with the errors behind them.

Frequently asked questions

What does “Failed to start game (missing executable)” mean on Steam?

Steam could not find the executable named in the game’s launch options inside the install folder.

How do I fix missing executable for my game on Steam?

Make the launch option executable path match the installed depot layout, including subfolders and exact case, make sure the depot is in the package and the build is live, and publish the changes.

Why do only some players get the missing executable error?

Usually antivirus software quarantined the executable on their machine. Restoring it and verifying game files fixes it.

Install your game from Steam on a clean machine once per release. It catches this in five minutes.