I recently stumbled across CoreRT (https://github.com/dotnet/corert) and was wondering why its not used by default if whats promised is true (faster and more efficient).

It’s experimental and not fully vetted.
AOT isn’t necessarily faster or more efficient, it’s just more appropriate for certain scenarios. JIT gives the ability to compile tuned for the specific platform and machine that a program is run on and JIT also has the opportunity to make optimizations based on actual execution metrics, often increasing performance over AOT. Reflection and Runtime code-generation can be problematic with AOT as well.

In a constrained system where you want very low file sizes and no added startup time (think Blazor/WASM and Xamarin apps, the main targets for .NET AOT) AOT is ideal, but there’s likely to be performance loss when looking at a typical server deployment.

CoreRt isn’t really being worked on anymore; its migrated to NativeAOT in https://github.com/dotnet/runtimelab

source