S1Interop.Generators 0.1.0-alpha.1

This is a prerelease version of S1Interop.Generators.
dotnet add package S1Interop.Generators --version 0.1.0-alpha.1
                    
NuGet\Install-Package S1Interop.Generators -Version 0.1.0-alpha.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="S1Interop.Generators" Version="0.1.0-alpha.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="S1Interop.Generators" Version="0.1.0-alpha.1" />
                    
Directory.Packages.props
<PackageReference Include="S1Interop.Generators" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add S1Interop.Generators --version 0.1.0-alpha.1
                    
#r "nuget: S1Interop.Generators, 0.1.0-alpha.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package S1Interop.Generators@0.1.0-alpha.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=S1Interop.Generators&version=0.1.0-alpha.1&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=S1Interop.Generators&version=0.1.0-alpha.1&prerelease
                    
Install as a Cake Tool

S1Interop

S1Interop helps Schedule I mod developers catch Mono/IL2CPP problems earlier and change projects more safely.

Licensed under GPL-3.0-only.

Its dependable early value is:

  • compile-time diagnostics for known IL2CPP boundary problems;
  • read-only project and source analysis;
  • explainable migration plans with dry-run defaults;
  • rollbackable, narrow source and project transformations;
  • disposable sandbox verification and explicit Mono/IL2CPP build targets.

Backend-neutral generated facades are available as an experimental opt-in. They are still fragile and are not the default scaffold or the primary product promise. Keep a dual-runtime fallback until a mod has sustained real-world validation on both game branches.

Choose a path

New to modding — build your first mod

Create the recommended dual-runtime starter:

s1interop new .\MyFirstMod
s1interop new .\MyFirstMod --apply
Set-Location .\MyFirstMod

The first command previews every file. The second creates the project only when the target directory is empty.

Detect and validate local prerequisites:

s1interop doctor .
s1interop setup .
s1interop setup . --apply

doctor is read-only. setup is also a dry run unless --apply is present. It writes only an ignored local.build.props, never installs software, never edits the project, and never overwrites existing local configuration.

Build the branch you have installed:

dotnet build .\MyFirstMod.sln -c "Debug Mono"
dotnet build .\MyFirstMod.sln -c "Debug Il2Cpp"

The matching DLL is written under:

bin\Mono\Debug Mono\netstandard2.1\MyFirstMod.dll
bin\Il2Cpp\Debug Il2Cpp\net6.0\MyFirstMod.dll

Copy the matching DLL to that game install's Mods folder. A successful launch logs:

MyFirstMod loaded on Mono.

or:

MyFirstMod loaded on Il2Cpp.

Continue with Build your first mod and Common tasks.

Existing or advanced mod — analyze safely

Start without changing files:

s1interop analyze .
s1interop lint .
s1interop migrate . --dual-runtime --dry-run
s1interop verify-migration . --dual-runtime --include-source-migrations --build

Use the smallest feature that solves the current problem:

Goal Start with
Understand configurations, references, and source risks s1interop analyze .
Fail CI on supported high-confidence diagnostics s1interop lint . or build-hook
Preview separate Mono/IL2CPP project support s1interop migrate . --dual-runtime --dry-run
Test changes without touching the project s1interop verify-migration . --dual-runtime
Add selected generated diagnostics or helpers s1interop init . --dry-run
Experiment with backend-neutral facades Read the warning below, then use sdkgen narrowly

See Choose an adoption path, Use cases, and Commands.

Install the current alpha

S1Interop is distributed as a .NET tool on NuGet.org. You need .NET SDK 8 or newer:

dotnet tool install --global S1Interop --version 0.1.0-alpha.1
s1interop --version
s1interop --help

Use dotnet tool update --global S1Interop --version 0.1.0-alpha.1 when that version is already installed. Generated projects restore S1Interop.Generators from NuGet.org through their normal PackageReference; local game configuration contains only game paths.

Full installation details are in Install S1Interop.

Common tasks

# Read-only reports
s1interop doctor .
s1interop analyze .
s1interop lint .

# Preview or write ignored local configuration
s1interop setup .
s1interop setup . --apply

# Preview safe project changes
s1interop init . --dry-run
s1interop migrate . --dual-runtime --dry-run

# Verify in a disposable copy
s1interop verify-migration . --dual-runtime --include-source-migrations --build

--dry-run and --apply are mutually exclusive. File-changing commands keep dry-run behavior as the default.

Applied migrations write backups and a manifest under s1interop-runs/<run-id>/:

s1interop migrate rollback .\s1interop-runs\<run-id>\manifest.json

Experimental backend-neutral facades

The one-DLL generated-facade path is experimental and fragile.

Use it only when:

  • the mod's direct game access is narrow enough for the current generated surface;
  • both Mono and IL2CPP reference builds pass;
  • the exact shipped assembly is smoke-tested in both game branches;
  • a dual-runtime build remains available as the safe fallback.

Create an experimental scaffold explicitly:

s1interop new .\MyExperiment --backend-neutral --apply

For existing projects, prefer narrow usage-driven generation:

s1interop init . --dry-run
s1interop sdkgen . --dry-run

sdkgen --full-sdk is for local exploration, not the default beginner or production workflow. Unsupported, ambiguous, overloaded, generic, collection, cast, and runtime-wrapper shapes can still require manual code or separate runtime builds.

Read Backend-neutral SDK, SDK generation, and Real mod evidence before adopting it.

Scope and safety

S1Interop is low-level tooling. It does not replace gameplay libraries:

  • use S1API for items, NPCs, shops, saveables, UI, and other domain workflows;
  • use MAPI for building and model workflows;
  • use SteamNetworkLib for higher-level networking;
  • use DedicatedServerMod APIs for server/client addon lifecycles.

S1Interop must not commit or redistribute game assemblies, generated IL2CPP wrappers, decompiled output, AssetRipper exports, prefabs, scenes, textures, or local game paths.

Architecture

CLI
  -> read-only analysis and diagnosis
  -> migration planning
  -> optional rollbackable apply
  -> optional disposable verification/build

S1Interop.Generators
  -> compile-time diagnostics
  -> selected generated helpers
  -> experimental facades when explicitly declared

Repository layout:

src/S1Interop.Cli/          commands and user-facing reporting
src/S1Interop.Core/         analysis, setup, migration, generation, rollback, verification
src/S1Interop.Generators/   Roslyn generator and diagnostics package
tests/S1Interop.Tests/      portable and local integration coverage
docs/docfx/                 public documentation site

See Architecture, Testing, and Contributing.

There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.0-alpha.1 83 7/31/2026