Before you can start writing code that runs on ev3dev, you need to choose a programming language. Community members have built libraries that let you use features such as motors and sensors from your code. Choose the language you want from below and follow the link to the library’s homepage get started.

If the language you want isn’t listed, you still can use it, but you’ll have to do more of the heavy lifting yourself. You can look at the driver overview page for information on the interfaces you need to use to control devices. Once you get the hang of it, you can even write your own interface library and have it listed on the programming languages page!

Python

https://github.com/ev3dev/ev3dev-lang-python

Python is a high-level, general-purpose, interpreted scripting language. It is great for beginners, while also powerful for experienced coders. If you are new to programming and unsure which language to choose, Python is a great choice!

If you are just starting programming ev3dev, take a look at ev3python.com by @ndward. The site is intended to help users of the LEGO MINDSTORMS EV3 to begin using the ev3dev Python programming language to control their robot.

Warning! There is another Python library named python-ev3 created by @topikachu which is not the same as this one. When searching for documentation online, make sure that you are reading about @rhempel’s ev3dev-lang-python.

Get started with Python

Java

https://github.com/mob41/ev3dev-lang-java

Comparing with other different programming languages, Java is suitable for beginners in programming. It is a object-oriented programming language that can easily represent the objects in the real life. Through learning from the official Java online document and getting started from jev3dev, you will catch up with programming using Java in ev3dev. Moreover, as Java’s syntax is based on C, C/C++/C# programmers are probably hookable into Java.

This project is implemented according the unified language binding specification that ensures you can access the wanted function on every unified bindings on ev3dev.

In addition to features, this binding has also included a dominant way to draw graphics on the EV3 display easily through the Java Graphics2D API. It allows you to draw different shapes and images with a single instruction. For more details about this, please visit the following page.

If you are new from programming, or moving from C/C++/C#, you are also recommended to use Java.

Get started with Java

Java (LeJOS-compatible)

http://ev3dev-lang-java.github.io/

Java is a general-purpose computer programming language that is concurrent, class-based and object-oriented. In Java 8, the language added some functional features very interesting to learn.

The project has support for EV3 Sensors and Actuators. The project includes the support for LeJOS local navigation stack.

In this project, the Objects included in the different libraries follow the LeJOS Interfaces, not to be confused with another Java project based on ev3dev unified language binding for Java

Get started with Java

Go

https://github.com/ev3go/ev3dev

Go is a compiled, statically-typed language created at Google. It aims to be simple and light while still providing modern language features. While it is a compiled language, it has its own built-in cross-compiler, which means that you don’t need to spend time setting up special tooling like you do with most other compiled languages.

Get started with Go

C++

https://github.com/ddemidov/ev3dev-lang-cpp

C++ is a low-level, compiled language which is highly performant while still providing modern language features. It is best for applications which require the fastest execution or interaction with existing C++ libraries.

Get started with C++

C

https://github.com/in4lio/ev3dev-c

C is a low-level, compiled language which is useful for interacting with other C-based code. It is very lightweight and often the most portable across platforms.

Get started with C

Vala, Genie and other GObject-based languages with ev3devKit

https://github.com/ev3dev/ev3devKit

Through GObject-introspection, this library can be used by languages including Vala and Genie, among many others. This is great for people who want to use higher-level syntax while still producing a performant application, or people who want a less error-prone API for C. The Brick Manager for ev3dev is written using this library.

Get started with ev3devKit



Alternative implementations and wrappers

Some of the libraries above also implement interfaces for other languages. If you’re looking for an alternative implementation for any reason, try out the options below.

Python, Ruby and Perl with ev3dev-c

https://github.com/in4lio/ev3dev-c

ev3dev-c also has wrappers for Python, Ruby and Perl.

Python with ev3devKit

https://github.com/ev3dev/ev3devKit

Ev3devKit also has a Python wrapper. You can find demos of using ev3devKit from Python here.

Out-of-date, abandoned and unfinished implementations

Listings below this point are for libraries that are not up-to-date, have been abandoned, or are unfinished.

Use them with caution, as some functionality will likely be broken. If you see a library below that you’d like to see in a better state, consider contributing to it to get it updated and ready to use.

JavaScript

https://github.com/wasabifan/ev3dev-lang-js

C#

https://github.com/pgrudzien12/ev3dev-lang-csharp

Pure Java

https://github.com/mob41/ev3dev-lang-java

R

https://github.com/ev3dev/ev3dev-lang/tree/R-legacy/R

Lua

https://github.com/rhempel/ev3dev-lang-lua

Ruby

https://github.com/noanoa07/ev3dev_ruby

Clojure

https://github.com/annapawlicka/clj-ev3dev

Python (alternative library)

https://github.com/topikachu/python-ev3

Go (alternative library)

https://github.com/ldmberman/GoEV3

C (alternative library)

https://github.com/theZiz/ev3c