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
Latest commit 1dceb93 Jan 15, 2018 @tritao tritao Merge pull request #569 from mono/java-sdk-cake
Do not lookup Java SDK path on global Cake scope.
Failed to load latest commit information.
.cake Update to Cake 0.23.0. Oct 18, 2017
binder [c] Ignore unsupported types when checking for array types. Nov 28, 2017
build Do not lookup Java SDK path on global Cake scope. Jan 15, 2018
docs Update Jan 8, 2018
external [binder] Fixed ManagedQualifiedName for non-synthetized property aces… Nov 24, 2017
objcgen Fix objcgen Makefile Nov 15, 2017
samples [objc] Add `--nowarn:` and `--warnaserror:` options to the driver (#339) May 12, 2017
support [android] update latest 15-4 stable branch of Xamarin.Android Nov 10, 2017
tests Update Jan 15, 2018
tools/diff [windows] move Cake `tools` directory to `.cake` Jun 29, 2017
.gitignore Update .gitignore for VS and Windows Oct 23, 2017
.gitmodules Bump Xamarin.Android.Tools Jun 29, 2017
.travis.yml [ci] Use OpenJDK 8 from Travis. Sep 6, 2017
Embeddinator-4000.nuspec [nuget] Added Nuget package spec. Jul 31, 2017
Embeddinator-4000.sln Adding generic F# test suit. Aug 28, 2017
LICENSE Pushed initial work-in-progress code for managed-to-native bindings g… Jul 25, 2016 [docs] Update readme to reflect current status of project. Sep 19, 2017
appveyor.yml [android] update latest 15-4 stable branch of Xamarin.Android Nov 10, 2017
build.cake [build] Linux fixes. Aug 30, 2017
build.ps1 [cake] Do NOT remove our custom NuGet config file... Sep 8, 2017 [cake] Use a custom NuGet config. Sep 8, 2017
e4000-logo.png Logo - Fixed kerning between A and T Nov 29, 2017

Embeddinator-4000 Logo

Windows macOS
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.

Presently there is support for .NET to C, Objective-C (across the various Apple platforms) and Java (Android and regular Java), across Windows, Linux and macOS platforms.

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 file Embeddinator-4000.sln with Visual Studio or Xamarin Studio and press F7.


To generate bindings for a managed library you invoke the Embeddinator-4000.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 Embeddinator-4000.exe.

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

Embeddinator-4000.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, 2017, 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:

Embeddinator-4000.exe -gen=c -out=foo Xamarin.Foo.dll