About the Project

    I hope for FarmBot to become more than an idea, more than a hack, more than a product. I hope for it to become a thriving community of individuals and businesses that develop, share, and distribute the technology - much like how the RepRap project has done for 3D printing.

    As you read through my entry on Hackaday, you'll notice that I link to several places: FarmBot.io, and FarmBot.cc. FarmBot.io is my brand new company that develops and is planning on distributing FarmBot hardware kits and software services. FarmBot.cc is the free-form community wiki and forum where anyone can get involved and share ideas. You can read the announcement of the new company here, and learn about why it is important to distinguish it from the community as a whole. I hope you check it out and enjoy what we're doing :)


    - Rory

    Open is at our Core

    FarmBot is 100% open-source. We document everything we do on our dedicated hardware documentation and software documentation hubs, as well as on the community wiki. All of our code lives with permissive licenses on GitHub. We openly welcome feedback, replications, modifications, and questions. To facilitate collaboration, we've setup a community forum for anyone to get involved in the discussion, as well as dedicated hardware and software support forums.

    Not Just Open-Source, Useful-Source

    We believe that great documentation is the the key to building a community of hackers who continue to build upon this technology. While being open-source means making our source files and ideas free for others to use and modify, we don't believe this is enough. At the FarmBot Project, we're going one step further than open-source, we're going useful-source.

    This means that in addition to sharing the source files, we're also sharing detailed assembly instructions, bills of materials, troubleshooting tips, past iterations, and our design intentions from the entire FarmBot journey. We're striving to design beautiful hardware that is reproducible with common tools and processes; built from low cost and readily available materials and components; and easily assembled and hacked. Our software is built to give users full control of their machine through and through. And we're even committed to operating our company with transparency and open company values at the forefront.

    With all of this effort, we hope that thousands of individuals and business can learn how to use, hack, redistribute, and even monetize FarmBot just like us, ultimately pushing the technology forward and making it more accessible to the masses.

    Mission and Vision Driven

    The FarmBot Project vision is to:

    Create an open and accessible technology aiding everyone to grow food and to grow food for everyone.

    In order to achieve this vision, our mission is to:

    Grow a community that produces free and open-source hardware plans, software, data, and documentation enabling everyone to build and operate a farming machine.

    Hardware Overview

    FarmBot is a CNC machine that uses special tools and software to grow plants. Our first device, FarmBot Genesis, is an outdoor XYZ machine that can scale from a planting area as small as one square meter, to as large as 20 square meters. It is estimated to cost between $1,500 and $4,000 depening on the size of the installation.

    Core Components

    We've chosen the following core components and materials for their utility within the FarmBot design, excellent corrosion resistance, general availability, ease of manufacturability, and relative low cost.


    Tracks are one of the components that differentiates FarmBot technology from traditional free-driving wheeled tractors. The tracks are what allow the system to have great precision in an efficient and simple manner. There are many reasons of why Tracks are superior, a few of which are listed below.

    1. Tracks provide great precision and allow the the FarmBot to return to the same position repeatedly without the use of GPS, short-range radio, or other sensors
    2. Any type of plant packing structure can be created and managed (eg: hexagonal packing)
    3. Tracks take up less area than paths for tractor wheels and do not compact the soil


    The gantry is the the structural component that bridges the two tracks and moves in the X-direction. It is operated with a single NEMA 17 stepper motor and a driveshaft spanning the gantry width. The motor and driveshaft are connected to a belt and pulley system on each of the tracks, allowing for synchronized movement of the gantry across the tracks without binding. The gantry serves as a linear guide for the cross-slide.


    The cross-slide moves in the Y-direction across the gantry. This motion provides the second major degree of freedom for FarmBot, and allows operations such as planting to be done anywhere in the XY plane. The cross-slide is moved using a NEMA 17 stepper motor in combination with a belt and pulley system. The cross-slide serves as the mounting point and linear guide for the Z-axis.


    The Z-axis attaches to the cross-slide and provides the FarmBot with Z-direction movement via a NEMA 17 stepper motor and leadscrew. It serves as the base for attaching the Universal Tool Mount and other tools.

    Universal Tool Mount

    The universal tool mounting system provides 12 electrical connections and three liquid or gas lines that can support any tool you can imagine. Tools are magnetically coupled allowing FarmBot to automatically select the right tool for the job.

    Seed Injector

    The seed injector is a single 3D printable component that funnels vacuum suction down to a precision tip. It works by picking up and suction-holding a single seed from a seed bin, and then depositing it into the ground at a precise location. FarmBot controls an off-the-shelf vacuum pump to apply and remove vacuum pressure to the tip.

    Watering Nozzle

    The watering nozzle is also a single 3D printed component that disperses incoming water from the universal tool mount into a gentle shower stream. To control the watering, FarmBot uses an inline solenoid valve to turn on and off the input water source coming from a standard garden hose. As you can imagine, FarmBot can water plants with precise amounts depending on soil type and moisture content; local weather history and forecasts; and plant type and age! Check out this time lapse of FarmBot watering the Swiss Chard seeds we plant in the video above.

    You can see how this method of watering is much more efficient than soaking the entire bed with water:


    Software Overview

    There are many software systems contributing to FarmBot's functionality. The diagram below shows the different components and how data flows between them. Read the brief descriptions of each component in the following sections to understand the system as a whole, and then dive into setting up the needed components for your FarmBot. Click here for a high res version of the overview diagram.

    Everything is open-source

    All of our software is licensed permissively with the MIT license, allowing you to contribute to, copy, modify, redistribute, and even sell FarmBot software. Want to help build new features or have a bug to report? Get involved on GitHub!

    We're here to help

    Have a question or need help setting up some of the software? You can ask a question and find answers in our software support forum.

    The FarmBot Web Application

    The web app allows you to easily configure and control your FarmBot from a web browser on your laptop, tablet, or smartphone. The application features real-time manual controls and logging, a sequence builder for creating custom routines for FarmBot to execute, and a drag-and-drop farm designer so you can graphically design and manage your farm.

    Drag and Drop Farming

    Graphically design your farm by dragging and dropping plants into the map. The game-like interface is learned in just a few minutes so you’ll be growing in no time. Plants are automatically spaced and growing regimens can be applied upon planting.

    Growing Regimens

    Build complete regimens for taking care of a plant throughout its lifetime by scheduling sequences to run when a plant is a certain age. Regimens can be reused, saving you time and effort during replanting.

    Sequence Building

    Quickly and easily create custom sequences of operations to take full advantage of your hardware – no programming is required. Simply drag and drop basic operations and other sequences together, adjust the parameters to your liking, and save.

    Real-Time Control

    Move FarmBot and operate its tools in real-time with the manual controls. Next time friends are over, pull out your phone for a quick and impressive demo!

    FarmBot Mesh

    FarmBot Mesh is a cloud application that acts as an intermediary between the FarmBot web app and FarmBot devices. It handles socket connections, device identification, and authentication. We offer a hosted FarmBot Mesh service at mesh.farmbot.io. We recommend that most people use this because it is convenient and always up-to-date with the latest features and security.

    Improve FarmBot Mesh

    Submit feature requests, bugs, and code for FarmBot Mesh on GitHub.

    Coming Soon: Decision Support System

    The decision support system (DSS) is a cloud service that employs fine tuned algorithms to optimize scheduled events based on relevant data. For example, the DSS may optimize a watering sequence to use more or less water based on the weather forecast.

    Bring the DSS to life

    Help us build the DSS on GitHub.

    FarmBot Raspberry Pi Controller

    FarmBot's Raspberry Pi uses this software to maintain a connection and synchronize with the web application via FarmBot Mesh. This allows FarmBot to download and execute scheduled events, be controlled in real-time, and upload logs and sensor data. The controller uses a ruby gem named FarmBot Serial (mentioned in the next section) to communicate with the Arduino over USB.

    Improve the Raspberry Pi Controller

    Submit feature requests, bugs, and code for the Raspberry Pi Controller on GitHub

    FarmBot Serial

    FarmBot Serial is a ruby gem that is bundled into the Raspberry Pi Controller. It uses a USB serial connection to send G and F code commands to the Arduino and also receive collected data.

    Improve FarmBot Serial

    Submit feature requests, bugs, and code for the FarmBot Serial gem on GitHub

    FarmBot Arduino Firmware

    This software is flashed onto FarmBot's Arduino MEGA 2560 microcontroller and is responsible for physically operating FarmBot's hardware, tools, sensors, and other electronics. It receives G and F codes from FarmBot Serial via the USB serial connection, and then moves the motors and reads and writes pins accordingly. It also sends collected data from the rotary encoders and pin reads back to the Raspberry Pi via FarmBot Serial.

    Improve the Arduino Firmware

    Submit feature requests, bugs, and code for the FarmBot Arduino Firmware on GitHub

    Coming Soon: WiFi Configurator

    The Raspberry Pi will have a WiFi Configurator utility allowing you to easily login to the Pi from a WiFi enabled device (such as a laptop or smartphone) in order to access a terminal and some configuration settings. This is useful for initial setup in order to get your FarmBot connected to your home WiFi, or for debugging purposes when the Pi cannot connect to the Internet.

    Bring the WiFi Configurator to life

    Submit feature requests, bugs, and code for the WiFi Configurator utility on GitHub


    OpenFarm.cc is a free and open database for farming and gardening knowledge. This service provides crop and growing information to the web app for a streamlined user experienced.

    OpenFarm is built by us too!

    OpenFarm was originally conceived as a small component of the FarmBot project. As progress was made, it became clear that OpenFarm had no reason to be tied to FarmBot, but could rather live on its own. In September of 2014, 1,605 people backed OpenFarm on Kickstarter. Today, OpenFarm is a standalone application, non-profit, and community. You can get involved with OpenFarm by joining the Slack channel, contributing on GitHub, or going to OpenFarm.cc and creating content!

    Data is exchanged across the web application, Raspberry Pi controller, and the user's web browser session in three ways.

    Automatic and Manual Synchronization

    FarmBot's Raspberry Pi controller automatically synchronizes with the web application every hour and with manual initiation from the user via the browser. The data that is transferred during synchronization includes logs, configuration settings, sensor data, sequences, schedules, and events. The diagram below explains how this works. Click here for a high res image.

    Real-Time Data Exchange

    In addition to synchronization, data is also exchanged in real-time between the user's web browser and the FarmBot device. This is used for emergency stop and real-time control commands, as well as real-time log and video streaming.