| Time | Phase |
|---|---|
| T−10 weeks | Steam onboarding |
| T−9 → T−7 weeks | Store setup |
| T−8 → T−5 weeks | AI usage review |
| T−6 → T−3 weeks | Steam integration |
| T−2 weeks | Steam review |
| Release day | Publish |
| Item | Cost |
|---|---|
| Steam Direct Fee | $100 USD + applicable tax |
Visibility → Coming Soon
Planned release date
Coming Soon page should remain public for at least 2 weeks before launch.
Create:
AI_DISCLOSURE.md
| Area | Tool | Included in final game |
|---|---|---|
| Code | Yes/No | Yes/No |
| Art | Yes/No | Yes/No |
| Audio | Yes/No | Yes/No |
| Text | Yes/No | Yes/No |
| Runtime generation | Yes/No | Yes/No |
Project structure:
project/
├── cmd/game
├── internal
├── assets
├── steam/
│ ├── sdk/
│ └── lib/
└── build/
Required SDK folders:
sdk/public/
sdk/redistributable_bin/
go get github.com/Philipp15b/go-steamworks
Enable:
CGO_ENABLED=1
Development only:
steam_appid.txt
Example:
1234567
Directory:
game.exe
steam_appid.txt
Remove before release upload.
package steam
import steamworks "github.com/Philipp15b/go-steamworks"
func Init() error {
return steamworks.Init()
}
func Shutdown() {
steamworks.Shutdown()
}
Startup:
func main() {
if err := steam.Init(); err != nil {
panic(err)
}
defer steam.Shutdown()
runGame()
}
type Game struct{}
func (g *Game) Update() error {
steamworks.RunCallbacks()
return nil
}
func VerifySteam() bool {
return steamworks.IsSteamRunning()
}
Optional:
if !VerifySteam() {
log.Println("Steam unavailable")
}
Configure in Steam dashboard.
Example:
func UnlockFirstWin() {
steamworks.UserStats().
SetAchievement("FIRST_WIN")
steamworks.UserStats().
StoreStats()
}
Enable cloud support.
Recommended save locations:
Windows:
%USERPROFILE%/AppData/Local/Game
Linux:
~/.local/share/game
Example:
func SavePath() string {
return filepath.Join(
os.UserConfigDir(),
"yourgame",
)
}
steamworks.
Friends().
SetRichPresence(
"status",
"Playing",
)
Check:
steamworks.
Utils().
IsOverlayEnabled()
Open:
steamworks.
Friends().
ActivateGameOverlay(
"Achievements",
)
Windows:
go build \
-ldflags="-s -w" \
-o build/game.exe
Linux:
go build \
-ldflags="-s -w" \
-o build/game
Build folder:
build/
├── game.exe
├── assets/
└── steam_api64.dll
Create:
app_build.vdf
Example:
"AppBuild"
{
"AppID" "1234567"
"ContentRoot" "./build"
"BuildOutput" "./output"
"Depots"
{
"1234568"
{
"FileMapping"
{
"LocalPath" "*"
"DepotPath" "."
"recursive" "1"
}
}
}
}
Upload:
steamcmd \
+login USER \
+run_app_build app_build.vdf \
+quit
Recommended:
default
beta
dev
Promotion flow:
dev
↓
beta
↓
default
Release contains:
game.exe
steam_api64.dll
assets/
Release does NOT contain:
steam_appid.txt
*.pdb
testdata/
editor files
source code
Submit:
Steam verifies:
Prepare:
1. Upload final build
2. Verify store
3. Verify pricing
4. Publish build
5. Press Release App
6. Install from Steam
7. Verify overlay
8. Verify saves
9. Verify achievements
10. Monitor crashes
$100 USD (+ applicable tax)