Safety
- Password and Steam Guard code are typed into SteamCMD's own window, never into this app, and not saved.
- Settings (repo path, account name, theme) live in
%LocalAppData%\SteamCmdHelper\settings.json. For portable mode, put an empty file namedportable.txtnext toSteamCmdHelper.exe: settings, history and the default SteamCMD then live in adatafolder beside the exe instead (for a USB stick or a synced folder). - If the app hits an unexpected error it saves a report to
%LocalAppData%\SteamCmdHelper\crashes(the newest 20) and offers Report it, which opens the request form as a bug report with the details filled in for you to review. Nothing is sent unless you press Send. - Only one window opens at a time, so two copies never run SteamCMD against the same login; starting it again brings the open window to the front. The command line is not affected.
- Self-updates are installed only when the download matches the release's SHA-256 checksum and version.
- Profiles and Discord webhook links are kept in the same settings file, not in your repo.
- The upload history lives in
%LocalAppData%\SteamCmdHelper\history.json(the newest 1000 uploads). - SteamCMD keeps the login cache in its own folder (
config/config.vdf); keep it out of git. Copy login secret... andlogin-secrethand that file out (base64) only when you ask, for a GitHub secret. - The layout file holds no secrets, but it is a new file in your repo: commit it or git-ignore it.
- Uploads publish immediately to subscribers. Use Dry run first when unsure.
- Every package is searched for secrets before upload: Steam's saved login, private keys and key stores,
.envfiles and tokens with a known shape (GitHub, Discord webhooks, Slack, AWS, Google, Linear, Anthropic) stop it, and only the file and line are named, never the value. Leave such files out with Leave these out (Package > Preview package...) or anexport-ignorerule. - Install SteamCMD only installs a download that arrived whole and whose
steamcmd.exeis signed by Valve. - An upload counts as done only when SteamCMD exits cleanly and confirms it with
Success.(and, for a new item, returns its id). Otherwise the row is marked failed and the package is kept in%TEMP%\steamcmd_helper_*to inspect. After updating an existing public or unlisted item, the app also asks Steam whether the item's "updated" time moved: that confirms the update in the log, and it counts a clean run whoseSuccess.line went missing as uploaded. - Headless checks:
SteamCmdHelper.exe [--repo <folder>] --selftest out.txt,... --package <ModFolder> out.txt.--shot <folder>saves screenshots of the main window, each Options section and the request form in both themes.
From the README on GitHub.