Skip to content

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

Closed

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
    πŸ—ΊοΈ mapQUESTOnly used as a way to mark an issue as updated for quest. RepoMan should instantly remove it.
    on Oct 21, 2026
  2. removed
    πŸ—ΊοΈ mapQUESTOnly used as a way to mark an issue as updated for quest. RepoMan should instantly remove it.
    on Oct 21, 2026
  3. added
    πŸ—ΊοΈ mapQUESTOnly used as a way to mark an issue as updated for quest. RepoMan should instantly remove it.
    on Oct 21, 2026
  4. moved this from πŸ”– Ready to πŸ‘€ In review in dotnet/docs October 2026 Sprint projecton Oct 21, 2026
  5. removed
    πŸ—ΊοΈ mapQUESTOnly used as a way to mark an issue as updated for quest. RepoMan should instantly remove it.
    on Oct 21, 2026
  6. added
    πŸ“Œ seQUESTeredIdentifies that an issue has been imported into Quest.
    and removed
    πŸ—ΊοΈ reQUESTTriggers an issue to be imported into Quest.
    on Oct 22, 2026
  7. moved this from πŸ‘€ In review to βœ… Done in dotnet/docs October 2026 Sprint projecton Oct 26, 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