Resilient Robotics with Elixir

Build any robot, from a single servo to a six-axis arm, with supervision, kinematics, and real-time control built in.

Why Elixir

Sweet BEAM was made for this

Robots are concurrent, failure-prone, real-time systems on flaky hardware. The BEAM (Elixir's runtime) has spent decades solving exactly that in telecoms, with the same toolkit you already reach for in Elixir.

What robotics demands

  • Resilience in the face of partial hardware failure
  • Concurrency across dozens of sensors and actuators
  • Real-time control under deadline pressure
  • Live observability and tuning without restarts
  • Distributed coordination across boards and machines

From the BEAM, for free

  • Supervision trees that isolate failure
  • A lightweight process per component
  • Soft-real-time scheduling without GC pauses
  • Hot code reload with live introspection
  • Distributed Erlang across nodes

Built for Resilient Robotics

The building blocks for reliable robot systems, powered by OTP supervision and Elixir's expressive syntax.

🧩

Declarative DSL

Define robot topology with code that mirrors physical structure. Links, joints, sensors, and actuators nest as they exist in reality, in a syntax that stays readable as your robot grows.
🛡️

Topology-Based Supervision

Supervision trees mirror your robot's structure for fault isolation. A failing gripper doesn't crash the whole system.
📐

Forward & Inverse Kinematics

Compute link positions with Nx tensors, GPU-accelerated where supported, and solve reach with pluggable IK solvers: Damped Least Squares and FABRIK.
📡

Hierarchical PubSub

Subscribe to sensor data by path with type filtering. Get all IMU data from the left arm with a single subscription.
🔌

Hardware Drivers Included

Drive real servos out of the box (PCA9685, Dynamixel, Feetech, and Raspberry Pi GPIO), with more drivers across the ecosystem.
🕹️

Live Visualisation & Control

Drive and monitor your robot in real time with Livebook widgets or a Phoenix LiveView dashboard.

Code That Reads Like a Specification

This is a complete pan-tilt camera mount (every link, joint, and movement limit) in a few dozen lines. It reads more like a description of the hardware than a program that builds it.

And it's ordinary Elixir: version it, test its geometry, refactor it freely. Need a six-legged robot? Loop over the leg instead of copy-pasting it.

defmodule PanTiltCamera do
  use BB

  topology do
    link :base_link do
      visual do
        cylinder do
          radius ~u(0.03 meter)
          height ~u(0.02 meter)
        end
      end

      joint :pan_joint do
        type :revolute
        origin do
          z ~u(0.015 meter)
        end

        limit do
          lower ~u(-170 degree)
          upper ~u(170 degree)
        end

        link :pan_link do
          joint :tilt_joint do
            type :revolute
            limit do
              lower ~u(-45 degree)
              upper ~u(90 degree)
            end

            link :camera_link
          end
        end
      end
    end
  end
end
Get Involved

A Young Project, Moving Fast

Beam Bots is early and built in the open. Real hardware, real drivers, real momentum. Whether you want to drive a servo, write a driver, improve the docs, or just follow along, there's room for you.

Supported By

This project is made possible by the generous support of our sponsors.

Beam Bots is solo-maintained. Sponsorship keeps the work going.