Skip to content

Getting Started

Chrison Simtian edited this page May 17, 2026 · 1 revision

Getting Started

Prerequisites

  • .NET SDK — the version pinned in global.json (currently .NET 10 preview). Install via dot.net or winget install Microsoft.DotNet.SDK.Preview.
  • GitHub CLI (gh) — required because SatisfactorySaveNet is consumed from the fork's GitHub Packages feed which always needs auth (even for public packages).
  • (Optional) Docker if you want to use the Postgres provider or run the CI guards locally.

One-time gh setup

gh auth refresh -h github.com -s read:packages

Clone & run

git clone https://github.com/ChrisonSimtian/ERP.Satisfactory.git
cd ERP.Satisfactory

export GITHUB_TOKEN=$(gh auth token)   # nuget.config reads it for GitHub Packages
dotnet build ERP.Satisfactory.slnx
dotnet run --project src/AppHost

The Aspire dashboard URL prints in the console — open it and click webfrontend.

NUKE targets

Everything CI runs is available locally through NUKE:

./build.sh Compile          # restore + build
./build.sh Test             # build + run xUnit + Playwright UI tests
./build.sh Format           # dotnet format --verify-no-changes
./build.sh ComputeVersion   # print the NB.GV-computed version for HEAD
./build.sh CheckMigrations  # EF migrations drift guard (both providers)

Windows users have build.ps1 and build.cmd equivalents.

Playwright

./build.sh Test installs the Chromium build automatically.

If you want to pre-install manually:

pwsh test/Web/Web.UiTests/bin/Debug/net10.0/playwright.ps1 install chromium

Submodules (optional)

The repo has two submodules under vendor/ (SatisfactorySaveNet and CUE4Parse), both marked update = none + ignore = all. They're not required for the build — they're kept as optional drop-ins for iterating on the fork locally.

To populate one explicitly:

git submodule update --init --checkout vendor/SatisfactorySaveNet

Game catalogue

The planner reads items / buildings / recipes from the catalogue JSON shipped with your Satisfactory install. Modern installs use per-locale files (en-US.json, …); legacy installs had a single Docs.json. Resolution order on first run:

  1. ERP_SATISFACTORY_DOCS_PATH environment variable
  2. A user-saved path (set via the in-app Settings page)
  3. Catalogue:Satisfactory:DocsPath in appsettings.json
  4. Steam library auto-detect on Windows

Typical Steam path on Windows:

C:\Program Files (x86)\Steam\steamapps\common\Satisfactory\CommunityResources\Docs

Save file

The .sav path resolves the same way the catalogue does (ERP_SATISFACTORY_SAVE_PATH env var → user-saved setting → appsettings → auto-detect under %LocalAppData%\FactoryGame\Saved\SaveGames\<steamId>\).

When auto-ingest is enabled (see Background Scheduler), the app picks up newer saves automatically.

Item icons

Per ADR-0016, per-item icons and map backdrops live in a gitignored .assets/ folder at the repo root, served at /assets/* by the Web project. A fresh clone has no icons — the picker degrades to text-only until they're downloaded.

# 1. Start the app first (the script reads /catalog/items from the running ApiService)
dotnet run --project src/AppHost

# 2. In another shell:
pwsh tools/Update-Assets.ps1

The script pulls icons from satisfactory.wiki.gg at a polite 1 req/s. Pass -Force to re-download after a game patch.

Clone this wiki locally