CoreCLR, Scripting, and Serialization Update - June 2026

CoreCLR, Scripting, and Serialization Update - June 2026

Hi everyone,

Following our public roadmap sessions at GDC 2026 and our previous community update, we are back to share our next quarterly look into the technical evolution of the Unity Engine. As we march closer to our ultimate target of a full CoreCLR Editor in Unity 6.8, we have several crucial adjustments, ecosystem updates, and framework refinements to discuss across our upcoming releases.

Let’s dive straight into what is hitting in Unity versions 6.6, 6.7, and 6.8.

Unity 6.6: Workflow Efficiency & Core Refinement

Unity 6.6 is heavily focused on setting the baseline for workflow efficiencies, engine standardization, and cross-framework modernization. Along with this foundation, we are implementing significant pipeline updates:

Fast Enter Play Mode (FEPM) by Default & Static State Prep

The most significant workflow change in Unity 6.6 is that the default setting for entering playmode is now scene reload only for all new projects. This means code will not be reloaded, and state, such as static variables, is not reset when entering playmode. Making it the standard helps ensure fast transitions from Edit to Play mode in real-world projects.

  • Why are we making this change? With the complete move to CoreCLR, traditional domain reloads go away entirely in Unity 6.8. Code that is migrated today can be prepared for the changes coming with CoreCLR in the future.
  • Ecosystem Readiness via Project Auditor: Turning FEPM on by default gives developers a clear runway to handle static state cleanup. We have been actively using Project Auditor to track down static fields and un-reset delegates across the most popular Asset Store solutions. We have notified the Asset Store creator community on how to repeat these diagnostic tests, and we are already tracking fantastic success stories of developers quickly resolving potential memory leaks and compatibility bugs. Project Auditor is included with the installation of the Unity Editor in versions of Unity 6.4 or later and available as a package for earlier versions of Unity as far back as Unity 2018.4.

Native Dictionary Serialization

We are incredibly excited to announce that Unity 6.6 now natively serializes Dictionary fields directly. You can now author and edit dictionary data in the Inspector without writing custom wrapper structures or boilerplate serialization code.

  • How it works: Simply apply the [SerializeField] attribute to a dictionary field on a MonoBehaviour, ScriptableObject, or nested [Serializable] type, and Unity will seamlessly persist it across domain reloads, scene saves, and Play mode transitions.
  • Inspector & Validation: The Inspector displays serialized dictionaries as an intuitive, two-column list layout with keys on the left and values on the right. Additionally, a built-in serialization rules analyzer validates your key and value types at compile time to catch unsupported signatures immediately.

Deprecation of the Serialization Package (com.unity.serialization)

The com.unity.serialization package is officially marked as deprecated in Unity 6.6.

  • Migration path: If your project relies directly on it for unique JSON or binary traversal, you can avoid immediate compilation friction by embedding the package directly into your local project. For long-term development, we recommend migrating to standard framework alternatives such as System.Text.Json or community ecosystems like Odin Serializer and MemoryPack.

Burst Integration into the Engine Core

While we covered this in another post back in March, another fundamental shift hitting in Unity 6.6 is that the Burst compiler package is no longer needed. Its functionality is now entirely built-in. Burst is moving away from a standalone Package Manager footprint to become a built-in module of the core engine itself.

  • What this means for upgrading: If you reference Burst via your project’s Packages/manifest.json, you do not need to take any action; the legacy package references will automatically redirect to the built-in core module version.
  • Breaking Change Warning: If you have an embedded or local version of the Burst package in your project, it will break upon upgrading to 6.6+. You should prepare to remove any local versions before starting your upgrade, as you will no longer be able to make local modifications to Burst files. Moving forward, all subsequent updates to Burst will be shipped directly as part of the core Editor installation instead of separate package updates.

Memory Optimization: True Multi-Threaded Allocation

We are continually driving optimization across both time and memory dimensions. In Unity 6.6, we are introducing true multi-threaded memory allocation through Microsoft’s open-source mimalloc. This change improves several internal benchmarks and we anticipate it will allow future optimizations regarding memory allocation.

Unity 6.7 LTS: Consolidated Runtimes & Unified Analysis

Unity 6.7 LTS serves as our final release built upon Mono, but it acts as a critical public validation for our new scripting backends.

Public Experimental Releases

First, we’d like to be clear that experimental releases are not supported. Do not use them for active productions. They are a way to get hands on early with new technology and to provide feedback to us on what works and doesn’t work for your particular needs. That being said, we are close to making a public experimental release available alongside the LTS release. In these releases, we’re targeting functionality, and don’t expect performance improvements. While built upon updated scripting runtimes, these experimental releases will be constrained to the current .NET Standard 2.1 API and C# 9 language version supported by Unity.

  • Experimental CoreCLR Desktop Player: Has been released in Unity 6.7 Alpha 2 as a Public Experimental Release.
  • Experimental IL2CPP Player: Coming shortly after as part of the Unity 6.7 Alpha cycle as a Public Experimental Release.

Unity 6.8: The CoreCLR Era & Unified Tooling

When we cross the threshold into Unity 6.8, Mono is completely stripped from the ecosystem. We are fully committed to delivering a fully-supported, CoreCLR-backed editor and a CoreCLR Desktop Player in this release, with access to .NET 10 and C# 14.

Parity First

We want to be completely transparent regarding our engineering goals for the initial 6.8 Alpha phase:

  • The Goal: Our strict internal focus is on functionality and performance parity. We are working to ensure that the CoreCLR Editor satisfies our rigorous quality bars, third-party code compiles smoothly, and existing games load correctly. We are also doing Production Verification as part of this validation process to check our updates with actual Unity projects like Survival Kids and many others.
  • The Optimization Phase: We are explicitly delaying major performance optimization work until the subsequent LTS release following Unity 6.8 in 2027.

Technical Resource Library & Documentation

To help your teams navigate these foundational updates and update their custom build pipelines, please reference the active links below:

We’ll be watching the comments section below to answer your technical questions, look over your feedback, and hear your thoughts on these changes!

What part of the consolidated .NET, scripting, and CoreCLR modernization are you most excited to deploy in your pipelines?

46 Likes

Nooooooo :sob:
Anyone knows good alternatives? I don’t like Odin and MemoryPack is requiring NuGet for Unity, I don’t want to install this garbage.

1 Like

What is your usecase? Do you use it for Json?

For Json, I’m using GenJson. You can find it on GitHub or OpenUPM.

Binary. Json doesn’t support reading file with offset, right?

I don’t know what this means. But generally Json (de)serialization has nothing to do with file read/write.

However GenJson allows you to (de)serialize a Span of UTF16 or UTF8 characters. It doesn’t care where that span comes from.

Reading only part of save file without loading entire thing into memory. Json doesn’t support this afaik so I’m using custom binary format.

It’s not a nature of Json itself to bother with file access.

So I guess ultimately how you load a file is entirely up to you? Then you can extract a part of that file which contains the json span and feed it into GenJson.

Edit: I believe we’re hijacking this thread. If you want to discuss more I think a new thread is more appropriate.

Sounds great, everything seems to be on track. I noticed 6.5 was released today. I am looking forward to 6.6, 6.7, and 6.8. It will be great to have a modernized .NET ecosystem and ECS integration. Thanks for the update.

If you are using a custom binary format switching to either FileStream or AsyncReadManager should be a big improvement. AsyncReadManager since 6.5, now supports Direct Storage. Direct Storage in Unity - Where We Are and What's Next

6 Likes

Wouldn’t be a bad time to see the new Animation System in action… :sweat_smile:, no just joking, but… :grinning_face_with_smiling_eyes:

4 Likes

Bit of a shame. I think the issue was that it was a package. I wish its features were incorporated into the core engine, and things like adaptors were applied automatically to monobehaviours and scriptable objects.

You can always do what I’m doing: open a secondary project with Nuget for Unity, download the required package, copy the DLLs into your main project’s Plugins folder. These update rarely and when you do, you just repeat it (or write a short script to automate the whole thing). This is how I’m using those kind of packages.

4 Likes

The serialization package had excellent migration support and was super fast. Why is it deprecated?
Can we vote to keep it alive somewhere? Or is this already a decision that can’t be changed anymore? (needless to say that I am using it in my game, right?)

Could you elaborate? Because Unity internally uses YAML, not Json, right? So it doesn’t use that code for serialization at all.

I think it would’ve been cool to be able to opt-in to the more advanced serialization on your custom monobehaviour/scriptable object types potentially.

And I liked the adaptors API and kinda wish they could work on my own types if you’d opted in on the parent asset type like above.

Imagine being able to write an adaptor for unsupported types, rather than having to write a wrapper type and use ISerializationCallbackReceiver. That would be more inline with other serialization APIs.

Can I start looking forward to the new animation system and world-building now?

2 Likes

I think it’s reasonable to push this hope further beyond 2027. I guess 2028 maybe the right time to hope for it.

After functionality is stable they’ll move to optimization. There will be a ton of work to reconcile the 2 runtime CoreCLR and IL2CPP.

1 Like

Could you share any numbers on this?
I assume this helps speedup native array allocation. If so, by how much?
Are there any frequently used methods that have a measurable benefit?

Thanks for the update btw! Really appreciate these posts

3 Likes

Well I mean the process for them have started already in Unity 6.6, but doubt we will get anything functional for a while till CoreCLR. Unity 6.6 is just laying the foundation for prep to start doing major changes with CoreCLR in mind.

Reason I say process has started is several animation packages are now part of the core editor. Animation Rigging,Timeline, and Cinemachine are now like Burst where they will follow the versioning of Unity Editors.

Notice at the manual link here Animation Rigging went from version 1.4 and jumped to 6.6. Same with Cienmachine and Timeline.

Animation Rigging | Animation Rigging | 6.6.0

1 Like

I’m really happy to know this.

1 Like