# 3. Steam Apps Depots and SteamPipe
Part of [[Publishing to itch.io and Steam]]. Prev: [[2. itch.io Pages and butler]]. Next: [[4. Versioning Branches and Checks]].
Official partner documentation lives on the Steamworks site. Start at [https://partner.steamgames.com/](https://partner.steamgames.com/) and open the current **SteamPipe / uploading builds** guide ([uploading](https://partner.steamgames.com/doc/sdk/uploading) at the time of writing). This part is a **checklist you execute with those docs open**. It does not invent SteamCMD flag names that may have moved, and it does not require a C# Steamworks plugin to *ship a build*.
## 3.1 Accounts and App ID
- A **Steamworks partner** account and a registered **App ID** are required to upload. Students without an App ID still complete the depot **plan** (3.2) and stop before login.
- The App ID is not a password, but it is not something to commit inside a public sample that belongs to someone else.
- Upload permission is a partner-site role. A student Steam account that can *play* games is not automatically an account that can *upload* depots.
- This course does **not** implement in-app purchases, Steam inventory commerce, or paid DLC.
## 3.2 Depots are where the files live
Steam sells (or gives away) an **app**. The files live in **depots** - often one depot per platform, sometimes more for a demo, a soundtrack, or language packs. A **branch** (`default`, a beta, a classroom `internal`) points at a **build** you uploaded.
Write this table before any upload:
| Depot (your name) | Platform | Source folder on disk |
|---|---|---|
| Windows | Windows | `dist/windows-0.1.0/` |
| (optional) Linux | Linux | `dist/linux-0.1.0/` |
Depot **IDs** are assigned in the Steamworks app admin. Map each Build Profile output to **exactly one** depot. Do not put two OSes in one depot "to keep it simple." Do not put the Unity project in a depot.
The store-ready rules from [[1. Artifacts and a Non-Commercial Policy]] still apply: Release player, README, no `Library`, no secrets.
## 3.3 SteamPipe upload (confirm each step on the official page)
High-level official path: **SteamPipe**, typically **SteamCMD** plus a vdf / app-build script the current uploading docs describe, or the partner site's upload tools where still offered.
1. Install SteamCMD as the current official page describes for your OS.
2. Log in with a Steamworks account that has **upload permission** for that App ID. Steam Guard / 2FA is normal - do not disable it, and do not paste codes into a repo or a chat log.
3. Point the official build script at your store-ready folder, the App ID, and the depot ID. Copy the **current** vdf skeleton from the docs; do not invent keys from a 2018 blog post.
4. Upload. A successful upload is **not** the same as shipping. On the partner site, **set the branch** (`default`, or better for class: a non-default preview / beta / internal branch) to that build.
5. Install with a Steam client on a **test account** in that branch, then run the game **outside** Unity.
Preview / "only me" / playtest packages exist in Steamworks for testers. Use those rather than launching a public `default` branch by accident on a work-in-progress.
## 3.4 What you can skip in this course
- Steam overlay, achievements, friends lists, and Steam Cloud - those need a verified Steamworks SDK / wrapper, which this series does not pin.
- Recapping WebGL on Steam (not a typical Steam depot target).
- Any IAP API.
- Recapping itch; the two pipelines share the **same artifact**, not the same upload tool.
## 3.5 Exercise
Fill the depot table for your slice (even without an App ID) and cite the SteamPipe page and date you read. If you have an App ID, upload a **non-default** branch and install it on a second Steam account. Attach the partner-site build id and a screenshot of the running installed player.
## Sources
- Steamworks partner docs: https://partner.steamgames.com/
- SteamPipe / uploading builds: https://partner.steamgames.com/doc/sdk/uploading