Table of Contents:

Why Protelis?

Developing networked systems is really hard. To make a good resilient system, you generally need to bring three types of expertise to bear all at once in the same code:

This "aggregate programming" problem, of obtaining resilient collective behavior from local interactions between machines, has been with us ever since people started networking computers. In some specialized areas, such as cloud computing and GPU programming, there a simple and regular network architecture has already led to good aggregate programming methods (e.g., MapReduce).

The goal of the Protelis language is to make resilient networked systems just as easy to build for complex and heterogeneous networks as for single machines and cloud systems. This accomplished by separating the different tasks and making some of the hard and subtle parts automatic and implicit. A few of the key design decisions behind Protelis are:

Further reading / references:

Developing with Protelis

Contributing to Protelis

Protelis is a free and open project that welcomes additional contributions. The source is available on GitHub at:

If you want to help improve Protelis, just dive in, fork a copy of this code, and get started! Development customs follow a standard GitHub workflow: get things working in your own branch, then request pull integration. The file README.developer contains information about setting up development and contributing.

Current build status of Protelis:

Protelis Build Status Test details FindBugs reporting All build reports
Protelis-Parser Build Status

History and Trivia

Protelis emerged from the synthesis of several prior projects:

The first version of Protelis was designed jointly during the summer of 2014 by Jacob Beal, Danilo Pianini, and Mirko Viroli, with the first implementation carried out primarily by Danilo Pianini.

The name "Protelis," a Latin word which translates approximately as "regarding a team," was chosen to reflect both its nature as an aggregate language and its derivation from Proto.