Desktop app for Steam Workshop management, mod browsing, and publishing for Data Center (Steamworks API, App ID 4170200).
This project is developed in the open and uses many open-source libraries (.NET, MAUI, Facepunch.Steamworks, and more). It also ships Valve’s closed-source steam_api64.dll (Steamworks), which is governed by Valve terms.
See EXTERNAL_DEPENDENCIES.md for a full license and redistribution breakdown.
- Mod Store: Browse, search, subscribe, favorite, and vote on Workshop items.
- Mod Manager: Dependency health checks, MelonLoader status, and FMF plugin channels.
- Authoring tools: Create projects from templates, edit metadata, and publish with change notes.
- Template scaffolding: Modded templates create
content/Mods,content/Plugins, andcontent/ModFramework/(includingModFramework/FMF/Plugins) to mirror{GameRoot}layout. - Post-upload sync: Re-downloads from Steam after publish to keep local content in sync.
- Headless CLI: Supports scripted/CI publish flows.
- Pagination: All major list views support paging.
Use WorkshopUploader.sln in this repository root.
If you open only WorkshopUploader.csproj from another solution context, Visual Studio may pick a different solution unexpectedly.
dotnet build WorkshopUploader.csproj -c DebugOr:
dotnet build WorkshopUploader.sln -c DebugTarget: .NET 9 + .NET MAUI (Windows). The project uses WindowsAppSDKSelfContained so required Windows App SDK components are shipped with the app.
- Use Visual Studio 2022 with the .NET MAUI workload and Windows App SDK components.
- Open
WorkshopUploader.sln. - Set
WorkshopUploaderas startup project. - Press
F5.
dotnet publish WorkshopUploader.csproj -c ReleaseOutput:
bin/Release/net9.0-windows10.0.19041.0/win10-x64/publish/WorkshopUploader.exe
dotnet publish WorkshopUploader.csproj -c Release -p:SelfContained=true -p:WindowsPackageType=None -p:WindowsAppSDKSelfContained=true -o .\publish-out- Install Inno Setup 6 (includes
ISCC.exe). - Run:
.\build.ps1This runs dotnet publish and creates:
installer\Output\GregToolsModmanager-<Version>-Setup.exe
Installer behavior:
- Wizard install/uninstall integration in Windows Apps settings.
- Start menu entry and optional desktop shortcut.
- Default install path:
C:\Program Files\GregTools Modmanager(admin required).
Useful options:
- Skip publish and only rebuild setup:
./build.ps1 -SkipPublish - Inno script path:
installer\GregToolsModmanager.iss
- Setup uses the same
AppId, detects existing installs, and overwrites the target folder. - Running
WorkshopUploader.exeis closed through Windows Restart Manager (CloseApplications). - Portable install via
install-local.ps1also closes the app and replaces the install directory.
- The installer runs elevated, but final launch uses
runasoriginaluserso the app starts non-elevated (important for WinUI/WebView2/MAUI stability). - If problems continue, check Event Viewer and test
CloseApplications=noinGregToolsModmanager.iss.
- Current state: We currently use self-signed code signing for CI/community builds.
- Why: I cannot afford an official OV/EV certificate at the moment.
- Impact for users: Windows/SmartScreen may still show warnings (for example, Unknown Publisher or reputation prompts), even when the file is signed.
- Runtime note: This app targets .NET 9 + .NET MAUI (Windows) and depends on Windows runtime components; if startup fails on end-user systems, install/repair the Visual C++ Redistributable and Windows App SDK runtime (see troubleshooting below).
- Rotation policy: CI rotates/recreates self-signed certificates on a 7-day cadence (or earlier if close to expiry), and refreshes the rolling
latestprerelease artifacts after successful signing.
- Official OV/EV code signing is currently not enabled due to certificate cost.
- A self-signed CI path is available for community/testing builds.
- Manual signing docs:
installer\CODE_SIGNING.md. - Create a self-signed certificate:
.\installer\create-selfsigned-codesign-cert.ps1- Sign only (without rebuilding setup):
.\build.ps1 -SignOnlySet CODE_SIGN_THUMBPRINT (or use -SetupPath when needed).
.\install-local.ps1Installs per-user to %LOCALAPPDATA%\Programs\GregTools Modmanager\ (no admin).
Uninstall:
.\install-local.ps1 -UninstallEnable local dumps:
.\installer\configure-localdumps.ps1Enable machine-wide (elevated shell):
.\installer\configure-localdumps.ps1 -Scope MachineDisable:
.\installer\configure-localdumps.ps1 -DisableDefault dump directories:
- Current user:
%LOCALAPPDATA%\GregToolsModmanager\dumps - Machine:
C:\ProgramData\GregToolsModmanager\dumps
pwsh -File scripts/Deploy-Release-ToWorkshop.ps1Builds framework/plugins/mods and creates Steamworks-compatible project folders under <GameRoot>/workshop/.
- Open Event Viewer → Windows Logs → Application and look for
WorkshopUploader.exefaults. - Install/repair the Microsoft Visual C++ Redistributable.
- Install the Windows App SDK Runtime.
- Prefer running with
F5from Visual Studio on the same machine you use to build. - Ensure Windows 10 version 1809+ (OS build
17763+).
Copy the publish output to:
{GameRoot}/WorkshopUploader/
Place it next to the game executable (not inside Mods or MelonLoader).
Third-party scan for transparency (self-contained .NET apps may be flagged heuristically; always compare checksums from official releases):
- SHA-256:
c0ea7929eee9d754e81363e9ec81c601e763e65f7db1eb0d971edf2c2036f0af - Report: VirusTotal file relations
If this project helps you and you want to support ongoing maintenance and improvements:
- Sponsor: github.com/sponsors/mleem97