jimsynz
Beam Bots - Resilient Robotics on the BEAM
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns.
Why?
When you look at ROS2’s architecture, so much of what it provides maps directly to BEAM/OTP patterns:
- ROS2’s pubsub → Phoenix.PubSub, Registry, process messaging
- ROS2’s Services → GenServer.call/3
- ROS2’s Actions → supervised Task with progress messages
- ROS2’s Controllers → GenServers with state machines
- ROS2’s parameter system → ETS
The BEAM already gives you fault tolerance, concurrency, soft real-time performance, and good behaviour in resource-constrained environments. BB builds on that
foundation.
See harton.nz • Elixir for Robots for more
Features
- Spark DSL for declarative robot definitions - your code mirrors your robot’s physical structure
- Topology-based supervision - the supervision tree mirrors your robot topology for fault isolation
- Physical units with the ~u sigil - ~u(90 degree), ~u(0.5 meter), ~u(10 newton_meter)
- Forward kinematics using Nx (GPU-accelerated where supported)
- Hierarchical PubSub for sensor data with message type filtering
- URDF export for integration with ROS visualisation tools
Current Status
Early days - the framework compiles, tests pass, and the DSL works, but it hasn’t controlled physical robots yet. I’m currently building a rover to close that loop.
Looking for feedback and contributors.
Read harton.nz • Announcing Beam Bots: Resilient Robotics on the BEAM for more details.
Links
https://github.com/beam-bots/bb
Tutorials
See the tutorials for a guided introduction:
- Your First Robot - defining robots with the DSL
- Starting and Stopping - supervision trees
- Sensors and PubSub - publishing and subscribing to messages
- Forward Kinematics - computing link positions
- Commands and State Machine - controlling the robot
- Exporting to URDF - interoperability with ROS tools
- Parameters - runtime-adjustable configuration
- Parameter Bridges - bidirectional remote access
The DSL Reference documents all available options.
Most Liked
jimsynz
That’s definitely the idea. I want to build it out to the point that it’s a no brainer if you want to build robots to use BB. I know I’m in for the long haul to build out the ecosystem of packages and device support but it’s something that I’ve wanted to exist for years, and now I’ve spent several years being shown how to lovingly own and evangelise a framework by @zachdaniel I think I can handle the challenge.
jimsynz
Week four progress update for Beam Bots - the Elixir robotics framework.
Highlights:
- Collision detection system (broad phase AABB + narrow phase primitives)
- IK solvers can now reject self-colliding solutions
- Commands converted from Tasks to GenServers for interruptibility (E-stop actually stops mid-motion now)
- New Parameters widget for Livebook
- WidowX 200 arm running real motions with DLS inverse kinematics
jimsynz
Last Post!
jimsynz
Here’s what landed in June for Beam Bots, resilient robotics on the BEAM:
- bb’s kinematics core moved to Nx defn — forward kinematics, all-link transforms and analytical Jacobians instead of finite differences.
- Both IK solvers cashed in: bb_ik_dls now uses the analytical Jacobian; bb_ik_fabrik is now composable defns.
- Servo disarm got honest — confirms torque is actually off rather than reporting false success on a dead controller.
- Continuous commands cancel cleanly — no more “cancellation logged as a crash”, plus cancel controls in bb_kino and bb_liveview.
- @mcass19’s ex_ratatui + bb_tui now render a live 3D view of your robot in the terminal.
- Whole ecosystem is on Elixir 1.20 now.
- Balance bot for the Goatmire workshop is rolling its wheels; learned-policy package (bb_policy) has started.
I’ll be at Goatmire in September and the Ash Summit on 3 October in Varberg — the Ash Summit CFP is open, so submit a talk.
Full write-up: July 2026: Show Your Working | Beam Bots
Popular in Announcing
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #hex











