Skip to content

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.

Open PowerShell and run:

Terminal window
iwr -useb https://raw.githubusercontent.com/unrealrobin/Harbor/main/install.ps1 | iex

The 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:

Terminal window
harbor

You 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.

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 step

Why 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):

Terminal window
cd C:\Games\DieRobot

Now run harbor again. Because you’re in a directory without a harbor.config.json yet, the menu surfaces Init as your next step.

Choose Init from the menu. The CLI walks you through:

  1. Confirm the target directory — Yes / pick a different folder / cancel.
  2. Game name — e.g. “Die Robot”.
  3. Game slug — auto-derived from the name; you can override. This becomes the second half of your app_id (e.g. unrealrobin/die-robot).
  4. Pick the game executable — the CLI scans the directory (including subfolders like Game\) for .exe files and offers a pick, or you can browse for one.
  5. Select modules — Patch Notes, News, Dev Comments. All three are enabled by default; toggle any off with Space.
  6. 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:

  1. What kind? — Patch Notes / News / Dev Comments / Harbor Config.
  2. Title — short, informative.
  3. Markdown file — point to a .md file you’ve written.
  4. 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.

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 harborConfigure to adjust, push the config again, and LaunchHarbor again.

This is the only Steam-side step.

  1. Make sure harbor.exe and harbor.config.json are both in the top-level directory (one level up from your Game\ folder), and that they’re included in the build you upload to Steam.
  2. In Steamworks, edit your game’s launch options and change the launch target from YourGame.exe to harbor.exe (the launcher, which ships renamed to your game’s executable name).
  3. 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.

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.exe to the latest release. Check periodically; new launcher releases ship regularly.
  • Import Remote Config — pull your live harbor.config.json onto a new machine or for a teammate.
  • LaunchHarbor — local smoke test, as in step 6.

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:

  • harbor not found after install — open a new terminal. PATH only updates for terminals started after install.
  • init errors 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.exe whose 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.