Advanced Topics Ahead!

This listing is provided for reference purposes only. For most third-party software developers, in-depth knowledge of each component is not necessary. The information below is an implementation detail and is intended for developers who are curious about the inner workings of the software suite.

For example, although the REST API uses PostgreSQL as a storage mechanism, very few developers will directly interact with PostgreSQL.

Knowledge of inner components is not required for authorship of Farmware or API usage. It is merely an implementation detail for which knowledge is only required when modifying the core source code.

Firmware

The Firmware runs on an Arduino microcontroller. It is written in C++ and is uploaded to the microcontroller via AVRDude.

FarmBot OS

FarmBot OS is written in Elixir. It uses the Nerves Framework to compile the source code into a single binary image and also handle low-level details such as cross-compilation and driver management.

It communicates with the Web App via HTTP and AMQP.

Here is the GitHub-Repository of FarmBot OS

REST API

The REST API is a Ruby on Rails web server that stores data in a PostgreSQL database and uses RabbitMQ for real-time messaging. It can be configured to store image data on local disc or on Google Cloud Storage.

Aside from data storage and image manipulation, it also handles email delivery and user authorization.

Web App

The user interface is written in ReactJS and Typescript. WebPack is used for compilation and asset management.

The Web App and the REST API are in the same repository.