Important: CoreCLR is provided as an experimental feature in this version of Unity and is available only for macOS, Windows, and Linux build profiles. It’s provided as a technical preview for functional testing and validation and is not suitable for production use.
The CoreCLR scripting back end is the Common Language Runtime (CLR) for the .NET platform, maintained by the .NET Foundation. CoreCLR is the modern, leading .NET runtime that offers the newest .NET features, garbage collection, and enhanced just-in-time (JIT) optimizations.
CoreCLR uses JIT compilation to convert your C# code into machine code at runtime. CoreCLR manages the lifecycle of managed objects, handles code reload, and performs automatic garbage collection of out-of-scope objects with the CoreCLR garbage collector.
CoreCLR supports the debugging of managed code. For more information, refer to Debugging C# code in Unity.
For detailed information on the design and features of CoreCLR, refer to the dotnet/runtime repository.
MonoA scripting backend used in Unity. More info
See in Glossary has historically been Unity’s default managed runtime, offering broad platform support and fast iteration. CoreCLR differs from Mono in the following key ways:
| Feature | Mono | CoreCLR |
|---|---|---|
| Runtime lineage | Legacy .NET Framework–era runtime | Modern .NET runtime |
| JIT compiler | Older, less aggressive optimization | Advanced JIT (RyuJIT) with tiered compilation |
| Garbage collector | Boehm-Demers-Weiser | Modern, generational garbage collector |
| .NET API support | Older .NET Framework and .NET Standard API compatibility levels | .NET Standard API compatibility level and access to newer .NET (System.*) APIs |
To start the build process, open the Build Profiles window (Menu: File > Build Profiles) and select Build.
You can change the scripting back end Unity uses to build your application in one of two ways:
Through the Player Settings menu in the Editor. Perform the following steps to change the scripting back end through the Player Settings menu:
You can also open the Player Settings menu from the Build Profiles window; go to File > Build Profiles and click on the Player Settings tab.
Through the Editor scripting API. Use the PlayerSettings.SetScriptingBackend property to change the scripting back end that Unity uses.
All scripting back ends require a new build for each platform you want to target. For example, to support both the Windows and macOS platforms, you need to build your application twice and produce two binary files, one for Windows and one for macOS.
The Unity Editor embeds Mono, so even if you select CoreCLR as your scripting back end for Player builds, your C# code is managed by Mono and is subject to Mono’s constraints when running in the Editor’s Play mode. A key aspect of this is that modifying scripts triggers AppDomain reloads. You can also configure how Unity enters Play mode so that the Editor performs domain reload on entering Play mode to reset static state. This isn’t recommended, but if you keep the default setting with domain reload off, your code must handle the reset of static state in other ways. For more information, refer to Enter Play mode without domain reload.
For a comprehensive summary of breaking changes that might impact your code when running in CoreCLR and fixes for these issues, refer first to Path to CoreCLR, 2026: Upgrade Guide on Discussions.
The following section lists additional issues you might encounter when trying to build existing projects for a CoreCLR Player, along with potential fixes.
The following are potential causes for this issue:
You can try the following to resolve this issue:
The following are potential causes for this issue:
You can try the following to resolve this issue:
TypeLoadException, FileNotFoundException, MissingMethodException, or initialization exceptions.The following are potential causes for this issue:
You can try the following to resolve this issue:
The following are potential causes for this issue:
You can try the following to resolve this issue:
In suitable projects, you can improve the runtime performance of your project by using the Burst compiler alongside CoreCLR to compile compatible sections of your code to highly optimized machine code. For more information, refer to Burst compilation.