Tools to turn .NET libraries into native libraries that can be consumed on Android, iOS, Mac, Linux and other platforms.
C# Objective-C C Java C++ Shell Other
Switch branches/tags
Nothing to show
Latest commit 74a7f2f Jul 21, 2017 @jonathanpeppers jonathanpeppers committed on GitHub Merge pull request #451 from jonathanpeppers/docs
[docs] clarifications on Java 1.8 / Android Studio 3.0
Failed to load latest commit information.
.cake [cake] forgot packages.config Jun 29, 2017
.nuget [windows] fixed CustomBuildActions.targets Jun 21, 2017
binder [c] changes to fix field collisions with interfaces Jul 21, 2017
build [android] moved Xamarin.Android path logic to XamarinAndroid.cs Jul 6, 2017
docs [docs] clarifications on Java 1.8 / Android Studio 3.0 Jul 21, 2017
external Bump Xamarin.Android.Tools Jun 29, 2017
objcgen [support] Remove unused main.c file. Jul 19, 2017
samples [objc] Add `--nowarn:` and `--warnaserror:` options to the driver (#339) May 12, 2017
support [support] Remove unused main.c file. Jul 19, 2017
tests [c] changes to fix field collisions with interfaces Jul 21, 2017
tools/diff [windows] move Cake `tools` directory to `.cake` Jun 29, 2017
.gitignore .gitignore for vscode Jul 12, 2017
.gitmodules Bump Xamarin.Android.Tools Jun 29, 2017
.travis.yml [travis] Provision Mono and Xamarin.iOS using the provisioning script… May 5, 2017
LICENSE Pushed initial work-in-progress code for managed-to-native bindings g… Jul 25, 2016 [ci] Switch to the correct AppVeyor badge URLs. Jul 11, 2017
appveyor.yml [ci] AppVeyor cache directory settings Jul 11, 2017
build.cake [cake] delete unused Xamarin.Android files Jul 20, 2017
build.ps1 [cake] build.ps1 should use our included nuget.exe Jun 29, 2017 [cake] OS X verbosity=normal Jun 29, 2017
e4000-logo.png Corrected logo spelling error (#387) Jun 5, 2017
generator.sln [tests] added .NET standard library Jul 13, 2017

Embeddinator-4000 Logo

windows-vs-x86 osx-clang-x86
windows-vs-x86 osx-clang-x86

Embeddinator-4000 is a tool to turn existing .NET libraries into libraries that can be consumed by other languages.

It is a tool that takes a .NET assembly and generates the necessary glue to surface the .NET API as a native API. The goal is to surface .NET libraries to all ecosystems where Mono/Xamarin run, and for each platform we provide an interface that is native to that platform as well as the tools needed to turn a .NET library into something that can be consumed on that platform.

This is a work in progress, the initial goals for this project are to surface .NET to C, C++, Objective-C (across the various Apple platforms) and Java (Android and regular Java).

Getting Started

Check out our documentation to get started


Feel free to join us at our #managed-interop Gitter discussion channel.


Clone this repository and initialize/update submodules as well as solution depends on them.

Open the solution in build/MonoEmbeddinator4000.sln with Visual Studio or Xamarin Studio and press F7.


To generate bindings for a managed library you invoke the MonoEmbeddinator4000.exe command line tool.

Important: please follow the instructions in objcgen's README to use the new and improved Objective-C generator (will eventually fusion with MonoEmbeddinator4000.exe.

If you do not pass any arguments, you will get a list of the tool options:

MonoEmbeddinator4000.exe [options]+ ManagedAssembly.dll
Generates target language bindings for interop with managed code.

      --gen=VALUE            target generator (C, C++, Obj-C, Java)
  -p, --platform=VALUE       target platform (iOS, macOS, Android, Windows)
  -o, --out, --outdir=VALUE  output directory
  -c, --compile              compiles the generated output
  -d, --debug                enables debug mode for generated native and
                               managed code
  -t, --target=VALUE         compilation target (static, shared, app)
      --dll, --shared        compiles as a shared library
      --static               compiles as a static library
      --vs=VALUE             Visual Studio version for compilation: 2012, 2013,
                               2015, Latest (defaults to Latest)
  -v, --verbose              generates diagnostic verbose output
  -h, --help                 show this message and exit

To generate C bindings for a Xamarin.Foo.dll assembly you would call the tool like:

MonoEmbeddinator4000.exe -gen=c -out=foo Xamarin.Foo.dll