TITLE=Steam publication plan ROUTE=/platforms/ebitengine/steam-publication-plan LOCALE=en MODIFIED=1792409344 URL=https://wiki.teletypegames.org/platforms/ebitengine/steam-publication-plan 2Timeline 2──────── t┌─────────────────┬───────────────────┐ t│h Time t│h Phase t│ t├─────────────────┼───────────────────┤ t│0 T−10 weeks t│0 Steam onboarding t│ t│0 T−9 → T−7 weeks t│0 Store setup t│ t│0 T−8 → T−5 weeks t│0 AI usage review t│ t│0 T−6 → T−3 weeks t│0 Steam integration t│ t│0 T−2 weeks t│0 Steam review t│ t│0 Release day t│0 Publish t│ t└─────────────────┴───────────────────┘ 2Mandatory platform cost 2─────────────────────── t┌──────────────────┬───────────────────────────┐ t│h Item t│h Cost t│ t├──────────────────┼───────────────────────────┤ t│0 Steam Direct Fee t│0 $100 USD + applicable tax t│ t└──────────────────┴───────────────────────────┘ r────────────────────────────────────────────────────────────────────────────── 1T−10 weeks — Steam onboarding 1═════════════════════════════ 2Tasks 2───── • Sign into Steam • Register for Steamworks • Accept distribution agreements • Complete identity verification • Configure bank payout information • Complete tax forms • Pay Steam Direct fee 2Result 2────── • Steamworks dashboard access • App ID assigned r────────────────────────────────────────────────────────────────────────────── 1T−9 to T−7 weeks — Store setup 1══════════════════════════════ 2Configure store page 2──────────────────── 3Basic metadata • Game name • Short description • Long description • Supported languages • Categories • Tags • Pricing 3Media • Capsule images • Header image • Screenshots • Trailer (optional) 3Technical information • Minimum specs • Recommended specs • Supported controllers • Multiplayer flags • Steam Deck compatibility (optional) 3Release settings p Visibility → Coming Soon p Planned release date 2Requirement 2─────────── Coming Soon page should remain public for at least 2 weeks before launch. r────────────────────────────────────────────────────────────────────────────── 1T−8 to T−5 weeks — AI usage review (only if applicable) 1═══════════════════════════════════════════════════════ Create: p AI_DISCLOSURE.md 2Tracking table 2────────────── t┌────────────────────┬────────┬────────────────────────┐ t│h Area t│h Tool t│h Included in final game t│ t├────────────────────┼────────┼────────────────────────┤ t│0 Code t│0 Yes/No t│0 Yes/No t│ t│0 Art t│0 Yes/No t│0 Yes/No t│ t│0 Audio t│0 Yes/No t│0 Yes/No t│ t│0 Text t│0 Yes/No t│0 Yes/No t│ t│0 Runtime generation t│0 Yes/No t│0 Yes/No t│ t└────────────────────┴────────┴────────────────────────┘ 2Disclosure required if AI generated 2─────────────────────────────────── • Art • Text • Audio • Localization • Gameplay content • Marketing assets 2Usually not required 2──────────────────── • Coding assistants • Internal productivity tools • Prototypes r────────────────────────────────────────────────────────────────────────────── 1T−6 to T−3 weeks — Steam integration (Go + Ebitengine) 1══════════════════════════════════════════════════════ 2Install Steam SDK 2───────────────── Project structure: p project/ p ├── cmd/game p ├── internal p ├── assets p ├── steam/ p │ ├── sdk/ p │ └── lib/ p └── build/ Required SDK folders: p sdk/public/ p sdk/redistributable_bin/ r────────────────────────────────────────────────────────────────────────────── 2Install Go Steam bindings 2───────────────────────── p go get github.com/Philipp15b/go-steamworks Enable: p CGO_ENABLED=1 r────────────────────────────────────────────────────────────────────────────── 2Configure Steam App ID 2────────────────────── Development only: p steam_appid.txt Example: p 1234567 Directory: p game.exe p steam_appid.txt Remove before release upload. r────────────────────────────────────────────────────────────────────────────── 2Steam initialization 2──────────────────── p package steam p p import steamworks "github.com/Philipp15b/go-steamworks" p p func Init() error { p return steamworks.Init() p } p p func Shutdown() { p steamworks.Shutdown() p } Startup: p func main() { p p if err := steam.Init(); err != nil { p panic(err) p } p p defer steam.Shutdown() p p runGame() p } r────────────────────────────────────────────────────────────────────────────── 2Ebitengine callback loop 2──────────────────────── p type Game struct{} p p func (g *Game) Update() error { p p steamworks.RunCallbacks() p p return nil p } r────────────────────────────────────────────────────────────────────────────── 2Runtime verification 2──────────────────── p func VerifySteam() bool { p return steamworks.IsSteamRunning() p } Optional: p if !VerifySteam() { p log.Println("Steam unavailable") p } r────────────────────────────────────────────────────────────────────────────── 2Achievements 2──────────── Configure in Steam dashboard. Example: p func UnlockFirstWin() { p p steamworks.UserStats(). p SetAchievement("FIRST_WIN") p p steamworks.UserStats(). p StoreStats() p } r────────────────────────────────────────────────────────────────────────────── 2Steam Cloud 2─────────── Enable cloud support. Recommended save locations: Windows: p %USERPROFILE%/AppData/Local/Game Linux: p ~/.local/share/game Example: p func SavePath() string { p p return filepath.Join( p os.UserConfigDir(), p "yourgame", p ) p } r────────────────────────────────────────────────────────────────────────────── 2Rich Presence (optional) 2──────────────────────── p steamworks. p Friends(). p SetRichPresence( p "status", p "Playing", p ) r────────────────────────────────────────────────────────────────────────────── 2Overlay 2─────── Check: p steamworks. p Utils(). p IsOverlayEnabled() Open: p steamworks. p Friends(). p ActivateGameOverlay( p "Achievements", p ) r────────────────────────────────────────────────────────────────────────────── 2Build release binaries 2────────────────────── Windows: p go build \ p -ldflags="-s -w" \ p -o build/game.exe Linux: p go build \ p -ldflags="-s -w" \ p -o build/game r────────────────────────────────────────────────────────────────────────────── 2SteamPipe upload 2──────────────── Build folder: p build/ p ├── game.exe p ├── assets/ p └── steam_api64.dll Create: p app_build.vdf Example: p "AppBuild" p { p "AppID" "1234567" p p "ContentRoot" "./build" p p "BuildOutput" "./output" p p "Depots" p { p "1234568" p { p "FileMapping" p { p "LocalPath" "*" p "DepotPath" "." p "recursive" "1" p } p } p } p } Upload: p steamcmd \ p +login USER \ p +run_app_build app_build.vdf \ p +quit r────────────────────────────────────────────────────────────────────────────── 2Branches 2──────── Recommended: p default p beta p dev Promotion flow: p dev p ↓ p beta p ↓ p default r────────────────────────────────────────────────────────────────────────────── 2Technical validation 2──────────────────── 3Rendering • Fullscreen • Windowed • DPI scaling 3Input • Keyboard • Mouse • Controller 3Audio • Device reconnect • Mute/unmute 3Saves • Save • Load • Upgrade old saves 3Steam • Overlay • Achievements • Cloud • Relaunch 3Packaging Release contains: p game.exe p steam_api64.dll p assets/ Release does NOT contain: p steam_appid.txt p *.pdb p testdata/ p editor files p source code r────────────────────────────────────────────────────────────────────────────── 1T−2 weeks — Steam review 1════════════════════════ Submit: • Store page • Build Steam verifies: • Build launches • Store accuracy • Configuration validity Prepare: • Emergency patch branch • Release tag • Smoke test r────────────────────────────────────────────────────────────────────────────── 1Release day 1═══════════ 2Sequence 2──────── p 1. Upload final build p 2. Verify store p 3. Verify pricing p 4. Publish build p 5. Press Release App p 6. Install from Steam p 7. Verify overlay p 8. Verify saves p 9. Verify achievements p 10. Monitor crashes r────────────────────────────────────────────────────────────────────────────── 1Final summary 1═════════════ 2Required 2──────── • Steam account • Steamworks onboarding • Tax information • Bank information • Store page • Uploadable build • Steam review • Steam Direct payment 2Required only if applicable 2─────────────────────────── • AI disclosure 2Mandatory publication cost 2────────────────────────── $100 USD (+ applicable tax)