Install the .NET SDK for your operating system, then follow the project-file tutorial. It provides a complete .csproj, shell commands, and references to your own Rain World installation. The example was compiled on Windows. Its Linux and macOS build instructions use the same SDK workflow but have not been executed here.

Rain World’s Steam store page lists Windows 10 64-bit in its system requirements. It does not document a native macOS version. Linux or macOS users should treat compiling the DLL and starting the Windows game as separate tasks. A successful dotnet build does not show that the game, BepInEx, or plugin loads.

Choose a development and testing setup

Your systemBuild the pluginTest the game
WindowsNative .NET SDK and your installed game referencesWindows Rain World installation
Linux or SteamOSNative .NET SDK and the Windows game files installed by SteamWindows Rain World through Steam Play’s Proton
macOSNative .NET SDK and a private copy of the references from your own Windows game installationA separate Windows machine, or a separately configured and tested Wine-based environment

Proton is Valve’s tool for running Windows games on Linux. A macOS SDK installation does not provide Proton or a native Rain World executable. Keeping development and game testing on different machines is an option. Copy only your resulting plugin into the testing installation, and record which game build supplied the references.

Linux and SteamOS runtime checks

Establish that Rain World starts through Steam Play before testing your plugin. BepInEx’s Windows loader also needs DLL forwarding under Proton or Wine. Its maintainer guide uses winecfg for the game’s own prefix to add the winhttp override. Configure the Rain World prefix, since changing a different Wine prefix will not affect that Steam game. Follow the BepInEx Proton/Wine instructions for the configuration steps.

Use the actual game directory for RainWorldPath. The game directory and the prefix’s emulated Windows user profile are different locations. Reading error logs explains where their logs belong. Confirm that BepInEx starts before diagnosing a plugin that produces no log message.

Keep paths portable

Preserve filename capitalization when copying references and assets. A file lookup that succeeds on a typical Windows filesystem can fail on a case-sensitive Linux or macOS volume. GitHub source paths are also case-sensitive. Docs/file.md and docs/file.md can identify different tracked files.

Keep machine-specific paths in RAINWORLD_PATH or pass -p:RainWorldPath=... when building. Use quoted paths when a directory contains spaces. The project uses forward slashes in HintPath, which MSBuild accepts across these host systems.

Obsidian and a code editor are authoring tools. Their operating-system support does not change the game process. BepInEx lists Rider and Visual Studio Code as cross-platform editors. On each operating system, install a .NET SDK, verify it with dotnet --list-sdks, and build with the same dotnet build command.

Sources