Interfacing Erlang with the Outer World
=======================================
Native Libraries
----------------
.. note::
This page was created between 2016 and 2018, more changes might have
happened since.
There are plenty of different approaches on integrating NIFs written in other
languages:
C
````
* `edtk, a port driver toolkit `_
* `dryverl `_ (license BSD)
* `C/C++ Generic Erlang Port Driver `_
(license MIT)
* `Nifty, a NIF wrapper generator `_
C++
````
* `EPI `_ (license LGPL)
* `eixx `_ (license Apache2)
* `C/C++ Generic Erlang Port Driver `_
(license MIT)
* `C++11 NIFPP `_ (license Boost)
Lua
````
* erlua
* `erlualib `_ (license MIT)
Python
``````
* `Pyrlang `_ (Erlang node written in asyncio) (license Apache2)
* ErlPort (see below in "Ports")
* `erlang_py `_ (license MIT)
* py_interface
`Website `_,
`Github `_
(license LGPL)
* PyErl `Github `_ (license MPL)
Ruby
````
* ErlPort (see below in "Ports")
* `Erlang Term Format (Ruby) `_ (MIT)
PHP
````
* `Erlang Term Format (PHP) `_ (MIT)
Rust
````
* `Rustler `_ (license Apache, MIT)
* `erlang-rust-nif `_
Nim
````
* `nimler `_ (MIT)
Javascript
``````````
* `Erlang Term Format (Javascript) `_ (MIT)
Perl
````
* `Erlang Term Format (Perl) `_ (MIT)
Ports and Network
-----------------
For the situations when you still need the speed and can tolerate some call
latency over, but don't want to risk crashing your node: choose interaction over
network or a port.
* `Erlport `_
* `CloudI, A private cloud engine `_
(C/C++, Erlang/Elixir, Java, JavaScript/node.js, Perl, PHP, Python and Ruby)