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 system | Build the plugin | Test the game |
|---|---|---|
| Windows | Native .NET SDK and your installed game references | Windows Rain World installation |
| Linux or SteamOS | Native .NET SDK and the Windows game files installed by Steam | Windows Rain World through Steam Play’s Proton |
| macOS | Native .NET SDK and a private copy of the references from your own Windows game installation | A 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.