# `mix bb.add_nx_backend`
[🔗](https://github.com/beam-bots/bb/blob/main/lib/mix/tasks/bb.add_nx_backend.ex#L6)

Configures an Nx backend for the project

BB uses Nx for kinematics and motion planning. Nx defaults to
`Nx.BinaryBackend` — a pure-Elixir reference implementation that is fine
for sanity checks but orders of magnitude slower than the native backends.
This task prompts the user to pick a backend and applies the dep + config
changes.

The `config :nx, default_backend: …` line is written to `config/runtime.exs`,
not `config/config.exs`. BB performs compile-time tensor operations in
its Spark transformer chain, and EXLA/Torchx aren't started during
compilation — so a compile-time default crashes the robot module compile.

Skips itself entirely if `:nx` is already configured in `runtime.exs` or
`config.exs`, or if `:exla` / `:torchx` / `:nx_eigen` is already declared
in `mix.exs`.

## Examples

```bash
# Interactive (prompts to choose a backend)
mix bb.add_nx_backend

# Non-interactive (defaults to exla)
mix bb.add_nx_backend --yes

# Explicit choice
mix bb.add_nx_backend --backend exla
mix bb.add_nx_backend --backend torchx
mix bb.add_nx_backend --backend eigen
mix bb.add_nx_backend --backend binary
```

## Options

* `--backend` - One of `exla`, `torchx`, `eigen`, or `binary`. Skips the prompt.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
