Skip to content

[Breaking change]: Mono embedding APIs no longer supported on mobile platforms #56482

Description

@vitek-karas

Description

Mono embedding APIs no longer supported on mobile platforms

Version

.NET 11

Previous behavior

Native code could embed Mono by using Mono header files, linking to
libmonosgen-2.0, and calling mono_* APIs. These APIs exposed runtime,
domain, metadata, object, method-call, GC-handle, internal-call, thread, and
profiling features.

New behavior

Mono embedding APIs are no longer supported. CoreCLR on mobile platforms
doesn't provide a direct replacement for the Mono embedding API.

This change doesn't affect normal P/Invoke, LibraryImport, Java interop, or
Objective-C interop.

Type of breaking change

  • Source incompatible
  • Binary incompatible
  • Behavioral change

Reason for change

Mono and CoreCLR use different hosting and embedding interfaces.

Recommended action

  • Follow
    native interoperability best practices.
  • Use [UnmanagedCallersOnly] and C# function pointers for native-to-managed
    callbacks.
  • Use values that have the same layout in managed and native code (blittable
    values).
  • Consider moving performance-critical, chatty managed/native interfaces to a
    fully managed implementation to reduce interop overhead.

Feature area

Interop

Affected APIs

The Mono native embedding API, including mono_* functions and
libmonosgen-2.0.

@rolfbjarne @jonathanpeppers @jkotas @steveisok


Associated WorkItem - 640005

Activity

  1. added
    🗺️ reQUESTTriggers an issue to be imported into Quest.
    and removed on Oct 21, 2026
  2. added
    🗺️ mapQUESTOnly used as a way to mark an issue as updated for quest. RepoMan should instantly remove it.
    on Oct 21, 2026
  3. removed
    🗺️ mapQUESTOnly used as a way to mark an issue as updated for quest. RepoMan should instantly remove it.
    on Oct 21, 2026
  4. added
    🗺️ mapQUESTOnly used as a way to mark an issue as updated for quest. RepoMan should instantly remove it.
    on Oct 21, 2026
  5. moved this from 🔖 Ready to 👀 In review in dotnet/docs October 2026 Sprint projecton Oct 21, 2026
  6. removed
    🗺️ mapQUESTOnly used as a way to mark an issue as updated for quest. RepoMan should instantly remove it.
    on Oct 21, 2026
  7. added
    📌 seQUESTeredIdentifies that an issue has been imported into Quest.
    and removed
    🗺️ reQUESTTriggers an issue to be imported into Quest.
    on Oct 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

📌 seQUESTeredIdentifies that an issue has been imported into Quest.breaking-changeIndicates a .NET Core breaking change

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions