Quickstart
The path from “nothing installed” to “Harbor is shipping with my game on Steam.” A technical developer can finish this in about an hour. Most of that is choosing colors and writing your first patch note.
Step 1 — Install the Harbor CLI
Section titled “Step 1 — Install the Harbor CLI”Open PowerShell and run:
iwr -useb https://raw.githubusercontent.com/unrealrobin/Harbor/main/install.ps1 | iexThe script downloads the latest Harbor CLI release, places harbor.exe in %LOCALAPPDATA%\Programs\Harbor\, and adds that folder to your user PATH.
Verify it worked:
harborYou should see the Harbor REPL banner and a menu. If you see “command not found,” your PATH didn’t update. Close all terminals and try again.
Step 2 — Log in (or create your account)
Section titled “Step 2 — Log in (or create your account)”In the harbor menu, choose Login.
- First time? The CLI walks you through signup: email, password, and a studio slug. The slug is just the backend name for your studio and its games — players never see it, but it’s worth getting familiar with, since it becomes more useful as Harbor grows.
- Already have an account? Just log in.
Step 3 — Set up your game’s directory
Section titled “Step 3 — Set up your game’s directory”Harbor sits next to your game and launches it. The recommended layout nests your game and all its assets inside a Game\ subfolder, with harbor.config.json and the launcher one level up:
DieRobot\ Game\ DieRobot.exe ← Your game [game assets] harbor.config.json ← Generated next step harbor.exe ← Downloaded next stepWhy nest the game? When you ship, the launcher is automatically renamed to match your game’s executable, so the file Steam launches reads as DieRobot.exe, not harbor.exe. If your real game sat in the same folder under that same name, the two would collide. Nesting the game inside Game\ keeps both names free: the top-level DieRobot.exe is the Harbor launcher, and it launches the real Game\DieRobot.exe behind it.
Set this up now — create the top-level folder, move your game build into a Game\ subfolder inside it, then cd into the top-level folder (the one that will hold harbor.config.json and harbor.exe):
cd C:\Games\DieRobotNow run harbor again. Because you’re in a directory without a harbor.config.json yet, the menu surfaces Init as your next step.
Step 4 — Run init
Section titled “Step 4 — Run init”Choose Init from the menu. The CLI walks you through:
- Confirm the target directory — Yes / pick a different folder / cancel.
- Game name — e.g. “Die Robot”.
- Game slug — auto-derived from the name; you can override. This becomes the second half of your
app_id(e.g.unrealrobin/die-robot). - Pick the game executable — the CLI scans the directory (including subfolders like
Game\) for.exefiles and offers a pick, or you can browse for one. - Select modules — Patch Notes, News, Dev Comments. All three are enabled by default; toggle any off with Space.
- Customize theme colors — optional. Skip and customize later through Configure → Theme.
At the end of init, Harbor registers your game with the API, writes harbor.config.json to the current directory, and offers to download harbor.exe right away. Say yes to the download.
Step 5 — Push your first piece of content
Section titled “Step 5 — Push your first piece of content”You can’t ship a launcher with nothing to say. Push at least one Patch Note or News entry before going live.
Stay in your game’s directory and run harbor. Pick Push. The CLI asks:
- What kind? — Patch Notes / News / Dev Comments / Harbor Config.
- Title — short, informative.
- Markdown file — point to a
.mdfile you’ve written. - Optional image — a header image for the entry. 1200×630 is the sweet spot. Skip if you don’t have one yet.
The CLI uploads to the CDN and updates your server-side index. Your players will see this entry the next time they launch the game.
Push at least one entry to each module you enabled. If you enabled News and Dev Comments but only push Patch Notes, those tabs will render empty.
Step 6 — Test it locally
Section titled “Step 6 — Test it locally”Run harbor from your game directory. Now that you have both a harbor.config.json and a harbor.exe, the menu shows LaunchHarbor.
Pick it. Harbor opens, reads your local config, fetches the content you pushed from the CDN, and renders the launcher. Click around (Home, your enabled module tabs, the Play button). When you click Play, your game launches and Harbor minimizes. This is exactly what your players will experience.
If something looks off (wrong colors, wrong title, missing modules), close Harbor, run harbor → Configure to adjust, push the config again, and LaunchHarbor again.
Step 7 — Ship harbor.exe with your game
Section titled “Step 7 — Ship harbor.exe with your game”This is the only Steam-side step.
- Make sure
harbor.exeandharbor.config.jsonare both in the top-level directory (one level up from yourGame\folder), and that they’re included in the build you upload to Steam. - In Steamworks, edit your game’s launch options and change the launch target from
YourGame.exetoharbor.exe(the launcher, which ships renamed to your game’s executable name). - Upload a new build (or update the launch config) and push to a beta branch first if you have one.
Now when a player clicks Play in Steam, Harbor opens first, shows your content, and launches your game when they click Play in the launcher.
Common menu items you’ll use later
Section titled “Common menu items you’ll use later”The harbor REPL menu adapts based on your state. Useful items:
- Push — upload new patch notes, news, dev comments, or an updated
harbor.config.json. - Configure — edit branding, theme colors, and modules without re-running
init. - Change Game Exe — repoint Harbor at a different game executable.
- Download — refresh
harbor.exeto the latest release. Check periodically; new launcher releases ship regularly. - Import Remote Config — pull your live
harbor.config.jsononto a new machine or for a teammate. - LaunchHarbor — local smoke test, as in step 6.
When things go wrong
Section titled “When things go wrong”Harbor degrades gracefully by design. If the CDN is unreachable when a player launches, the affected module silently hides and the Play button still works. Harbor cannot brick a player’s launch.
Common gotchas:
harbornot found after install — open a new terminal. PATH only updates for terminals started after install.initerrors at the API step — usually a stale token. Pick Logout, then Login again.- Launcher boots but shows empty tabs — you enabled a module but haven’t pushed content to it. Run Push.
- Wrong game launches on Play — run Change Game Exe and pick the right
.exe. - Hash mismatch on Download — the CLI refuses a
harbor.exewhose Blake3 doesn’t match the server’s record. Try Download again; if it persists, email me.
For anything not on this list: earlyaccess@paracosm.gg. If it’s blocking you, put blocker in the subject.