# Unifex

[![API Docs](](

Unifex is a tool for generating interfaces between native C code and Elixir, that:
- provides intuitive and concise tools for defining native interfaces,
- generates all the boilerplate for you,
- provides useful abstractions over binaries and state,
- makes native code independent from [erl_nif]( 
  or [ei]( library, so the same code is usable either with NIFs or CNodes.

API documentation is available at [HexDocs](

Unifex uses [Bundlex]( to compile and load the native code. See there for supported platforms & details.

This tool is maintained by the [Membrane Framework]( team.

This version supports bugged version of functions returning nil, as well as fixed ones. This functionality should be removed in version 2.0.0
For more info see: [Issue](

## Installation

To install, you need to configure Mix project as follows:

defmodule MyApp.Mixfile do
  use Mix.Project

  def project do
      app: :my_app,
      compilers: [:unifex, :bundlex] ++ Mix.compilers, # add unifex and bundlex to compilers
      deps: deps()

  defp deps() do
      {:unifex, "~>> 1.2.0"}

## Usage

For detailed usage description see [Creating Unifex Natives]( guide.

## Supported types

For currently supported types see [Supported Types]( section.

## See also

Unifex depends on the following libraries:
- [Bundlex](
- [Shmex](

## Copyright and License

Copyright 2018, [Software Mansion](

[![Software Mansion](](

Licensed under the [Apache License, Version 2.0](LICENSE)