Linux Library for low speed IO Communication in C with bindings for C++, Python, Node.js & Java. Supports generic io platforms, as well as Intel Edison, Intel Joule, Raspberry Pi and many more.
C Python CMake C++ Other
Latest commit e386300 Jan 18, 2017 @jontrulson jontrulson committed with arfoll UartOW.cpp example: Use .data() string accessor instead of .c_str().
.c_str() works accidentally, but is technically incorrect as these
"strings" can have embedded 0 bytes in them.

Signed-off-by: Jon Trulson <>
Signed-off-by: Brendan Le Foll <>
Failed to load latest commit information.
api uart_ow.hpp: Correct a logic bug, and 2 questionable uses of c_str() Jan 19, 2017
cmake FindNodejs.cmake: added search paths for Ubuntu 16.04 Sep 12, 2016
docs update UP board hardware details and enable ADC Nov 21, 2016
doxygen2jsdoc @ 9cc90b7 doxygen2jsdoc: add submodule Jun 1, 2015
examples UartOW.cpp example: Use .data() string accessor instead of .c_str(). Jan 19, 2017
imraa imraa: correct imraa.service Nov 8, 2016
include json: Improve i2c and spi configuration. Nov 21, 2016
jsstub Change messaging to indicate mraaStub is on npm Jun 29, 2016
src Firmata: I2C read bytes data array size mismatch fix Dec 29, 2016
tests mock: implement UART functionality Oct 25, 2016
.clang-format clang-format: run clang-format on C/C++ code Mar 23, 2015
.gitignore .gitignore: add .swo tmp files Jun 1, 2015
.gitmodules .gitmodules: use public git url Jun 1, 2015
.travis.yml travis: use mirror of swig-3.0.10.tar.gz Oct 31, 2016 intel_gt: add support for gt + Tuchuck board Jun 23, 2016
CMakeLists.txt mraa: Update to v1.5.1 Nov 4, 2016 Add author rules and suggestion on filing issues for… Oct 24, 2016
COPYING COPYING: Make it very clear this is an MIT license Feb 15, 2016 Add github style contributing rules Feb 2, 2016 Add github style contributing rules Feb 2, 2016
DoxygenLayout.xml DoxygenLayout.xml: move akward dep graph to the bottom Sep 7, 2014 Fix typo in Oct 25, 2016

libmraa - Low Level Skeleton Library for Communication on GNU/Linux platforms

Libmraa is a C/C++ library with bindings to Java, Python and JavaScript to interface with the IO on Galileo, Edison & other platforms, with a structured and sane API where port names/numbering matches the board that you are on. Use of libmraa does not tie you to specific hardware with board detection done at runtime you can create portable code that will work across the supported platforms.

The intent is to make it easier for developers and sensor manufacturers to map their sensors & actuators on top of supported hardware and to allow control of low level communication protocol by high level languages & constructs.

Build Status

Supported Boards





JSON platform

Installing on your board

Installing on Ubuntu

Here is a PPA for installing on ubuntu:

sudo add-apt-repository ppa:mraa/mraa
sudo apt-get update
sudo apt-get install libmraa1 libmraa-dev mraa-tools python-mraa python3-mraa

Node.js package is available seperately.

Install on Arch Linux

There is an AUR package for mraa here:

Installing for Node.js only

You can also install just the node.js mraa module by using npm. You will need a C++ compiler and the node development headers, however it's not required to have SWIG installed.

npm install mraa

Note that installing mraa in this way builds mraa without json-c so you cannot use mraa_init_json_platform(). Also building this way means the mraa.node includes a static version of libmraa rather than relying on a dynamic library in /usr/lib.

Installing on Intel 32bit Yocto based opkg image

See the section below on compiling or use our repository to install on a glibc based yocto poky image that supports opkg. Adding this repository is as simple as and you'll have the latest stable tagged build of mraa installed!

echo "src mraa-upm" > /etc/opkg/mraa-upm.conf
opkg update
opkg install mraa

If you would like to get the latest & greatest builds from master HEAD you can use our -dev repository

echo "src mraa-upm" > /etc/opkg/mraa-upm.conf
opkg update
opkg install mraa


See documentation on building


See the examples available for various languages


Sometimes it just doesn't want to work, let us try and help you, you can file issues in github or join us in #mraa on freenode IRC, hang around for a little while because we're not necessarily on 24/7, but we'll get back to you! Have a glance at our debugging page too.

API Documentation

Contact Us

To ask questions either file issues in github or send emails on our mailing list. You might also catch us on the mraa channel on freenode IRC.

See the Contribution documentation for more details.


Version changelog here.