Metadata-Version: 2.4
Name: dimos
Version: 0.0.10
Summary: Powering agentive generalist robotics
Author-email: Dimensional Team <build@dimensionalOS.com>
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: dimos-lcm
Requires-Dist: PyTurboJPEG==1.8.2
Requires-Dist: numpy>=1.26.4
Requires-Dist: scipy>=1.15.1
Requires-Dist: pin>=3.3.0
Requires-Dist: reactivex
Requires-Dist: asyncio==3.4.3
Requires-Dist: sortedcontainers==2.4.0
Requires-Dist: pydantic
Requires-Dist: python-dotenv
Requires-Dist: annotation-protocol>=1.4.0
Requires-Dist: lazy_loader
Requires-Dist: dask[complete]==2025.5.1
Requires-Dist: plum-dispatch==2.5.7
Requires-Dist: structlog<26,>=25.5.0
Requires-Dist: colorlog==6.9.0
Requires-Dist: opencv-python
Requires-Dist: open3d-unofficial-arm; platform_system == "Linux" and platform_machine == "aarch64"
Requires-Dist: open3d>=0.18.0; platform_system != "Linux" or platform_machine != "aarch64"
Requires-Dist: pydantic-settings<3,>=2.11.0
Requires-Dist: textual==3.7.1
Requires-Dist: terminaltexteffects==0.12.2
Requires-Dist: typer<1,>=0.19.2
Requires-Dist: plotext==5.3.2
Requires-Dist: numba>=0.60.0
Requires-Dist: llvmlite>=0.42.0
Requires-Dist: rerun-sdk>=0.20.0
Requires-Dist: toolz>=1.1.0
Provides-Extra: misc
Requires-Dist: cerebras-cloud-sdk; extra == "misc"
Requires-Dist: yapf==0.40.2; extra == "misc"
Requires-Dist: typeguard; extra == "misc"
Requires-Dist: empy==3.3.4; extra == "misc"
Requires-Dist: catkin_pkg; extra == "misc"
Requires-Dist: lark; extra == "misc"
Requires-Dist: tiktoken>=0.8.0; extra == "misc"
Requires-Dist: python-multipart==0.0.20; extra == "misc"
Requires-Dist: tensorzero==2025.7.5; extra == "misc"
Requires-Dist: ipykernel; extra == "misc"
Requires-Dist: sentence_transformers; extra == "misc"
Requires-Dist: scikit-learn; extra == "misc"
Requires-Dist: timm>=1.0.15; extra == "misc"
Requires-Dist: edgetam-dimos; extra == "misc"
Requires-Dist: opencv-contrib-python==4.10.0.84; extra == "misc"
Requires-Dist: open_clip_torch==3.2.0; extra == "misc"
Requires-Dist: torchreid==0.2.5; extra == "misc"
Requires-Dist: gdown==5.2.0; extra == "misc"
Requires-Dist: tensorboard==2.20.0; extra == "misc"
Requires-Dist: googlemaps>=4.10.0; extra == "misc"
Requires-Dist: onnx; extra == "misc"
Requires-Dist: einops==0.8.1; extra == "misc"
Requires-Dist: xarm-python-sdk>=1.17.0; extra == "misc"
Provides-Extra: visualization
Requires-Dist: rerun-sdk>=0.20.0; extra == "visualization"
Provides-Extra: agents
Requires-Dist: langchain==1.2.3; extra == "agents"
Requires-Dist: langchain-chroma<2,>=1; extra == "agents"
Requires-Dist: langchain-core==1.2.3; extra == "agents"
Requires-Dist: langchain-openai<2,>=1; extra == "agents"
Requires-Dist: langchain-text-splitters<2,>=1; extra == "agents"
Requires-Dist: langchain-huggingface<2,>=1; extra == "agents"
Requires-Dist: langchain-ollama<2,>=1; extra == "agents"
Requires-Dist: bitsandbytes<1.0,>=0.48.2; sys_platform == "linux" and extra == "agents"
Requires-Dist: ollama>=0.6.0; extra == "agents"
Requires-Dist: anthropic>=0.19.0; extra == "agents"
Requires-Dist: openai; extra == "agents"
Requires-Dist: openai-whisper; extra == "agents"
Requires-Dist: sounddevice; extra == "agents"
Requires-Dist: mcp>=1.0.0; extra == "agents"
Provides-Extra: web
Requires-Dist: fastapi>=0.115.6; extra == "web"
Requires-Dist: sse-starlette>=2.2.1; extra == "web"
Requires-Dist: uvicorn>=0.34.0; extra == "web"
Requires-Dist: ffmpeg-python; extra == "web"
Requires-Dist: soundfile; extra == "web"
Provides-Extra: perception
Requires-Dist: ultralytics>=8.3.70; extra == "perception"
Requires-Dist: filterpy>=1.4.5; extra == "perception"
Requires-Dist: Pillow; extra == "perception"
Requires-Dist: lap>=0.5.12; extra == "perception"
Requires-Dist: transformers[torch]==4.49.0; extra == "perception"
Requires-Dist: moondream; extra == "perception"
Requires-Dist: omegaconf>=2.3.0; extra == "perception"
Requires-Dist: hydra-core>=1.3.0; extra == "perception"
Provides-Extra: unitree
Requires-Dist: dimos[base]; extra == "unitree"
Requires-Dist: unitree-webrtc-connect-leshy>=2.0.7; extra == "unitree"
Provides-Extra: manipulation
Requires-Dist: drake==1.45.0; (sys_platform == "darwin" and platform_machine != "aarch64") and extra == "manipulation"
Requires-Dist: drake>=1.40.0; (sys_platform != "darwin" and platform_machine != "aarch64") and extra == "manipulation"
Requires-Dist: piper-sdk; extra == "manipulation"
Requires-Dist: xarm-python-sdk>=1.17.0; extra == "manipulation"
Requires-Dist: kaleido>=0.2.1; extra == "manipulation"
Requires-Dist: plotly>=5.9.0; extra == "manipulation"
Requires-Dist: xacro; extra == "manipulation"
Requires-Dist: matplotlib>=3.7.1; extra == "manipulation"
Requires-Dist: pyyaml>=6.0; extra == "manipulation"
Provides-Extra: cpu
Requires-Dist: onnxruntime; extra == "cpu"
Requires-Dist: ctransformers==0.2.27; extra == "cpu"
Provides-Extra: cuda
Requires-Dist: cupy-cuda12x==13.6.0; platform_machine == "x86_64" and extra == "cuda"
Requires-Dist: nvidia-nvimgcodec-cu12[all]; platform_machine == "x86_64" and extra == "cuda"
Requires-Dist: onnxruntime-gpu>=1.17.1; platform_machine == "x86_64" and extra == "cuda"
Requires-Dist: ctransformers[cuda]==0.2.27; extra == "cuda"
Requires-Dist: xformers>=0.0.20; platform_machine == "x86_64" and extra == "cuda"
Provides-Extra: dev
Requires-Dist: ruff==0.14.3; extra == "dev"
Requires-Dist: mypy==1.19.0; extra == "dev"
Requires-Dist: pre_commit==4.2.0; extra == "dev"
Requires-Dist: pytest==8.3.5; extra == "dev"
Requires-Dist: pytest-asyncio==0.26.0; extra == "dev"
Requires-Dist: pytest-mock==3.15.0; extra == "dev"
Requires-Dist: pytest-env==1.1.5; extra == "dev"
Requires-Dist: pytest-timeout==2.4.0; extra == "dev"
Requires-Dist: coverage>=7.0; extra == "dev"
Requires-Dist: requests-mock==1.12.1; extra == "dev"
Requires-Dist: terminaltexteffects==0.12.2; extra == "dev"
Requires-Dist: watchdog>=3.0.0; extra == "dev"
Requires-Dist: md-babel-py==1.1.1; extra == "dev"
Requires-Dist: python-lsp-server[all]==1.14.0; extra == "dev"
Requires-Dist: python-lsp-ruff==2.3.0; extra == "dev"
Requires-Dist: lxml-stubs<1,>=0.5.1; extra == "dev"
Requires-Dist: pandas-stubs<3,>=2.3.2.250926; extra == "dev"
Requires-Dist: types-PySocks<2,>=1.7.1.20251001; extra == "dev"
Requires-Dist: types-PyYAML<7,>=6.0.12.20250915; extra == "dev"
Requires-Dist: types-colorama<1,>=0.4.15.20250801; extra == "dev"
Requires-Dist: types-defusedxml<1,>=0.7.0.20250822; extra == "dev"
Requires-Dist: types-gevent<26,>=25.4.0.20250915; extra == "dev"
Requires-Dist: types-greenlet<4,>=3.2.0.20250915; extra == "dev"
Requires-Dist: types-jmespath<2,>=1.0.2.20250809; extra == "dev"
Requires-Dist: types-jsonschema<5,>=4.25.1.20251009; extra == "dev"
Requires-Dist: types-networkx<4,>=3.5.0.20251001; extra == "dev"
Requires-Dist: types-protobuf<7,>=6.32.1.20250918; extra == "dev"
Requires-Dist: types-psutil<8,>=7.0.0.20251001; extra == "dev"
Requires-Dist: types-pytz<2026,>=2025.2.0.20250809; extra == "dev"
Requires-Dist: types-simplejson<4,>=3.20.0.20250822; extra == "dev"
Requires-Dist: types-tabulate<1,>=0.9.0.20241207; extra == "dev"
Requires-Dist: types-tensorflow<3,>=2.18.0.20251008; extra == "dev"
Requires-Dist: types-tqdm<5,>=4.67.0.20250809; extra == "dev"
Requires-Dist: types-psycopg2>=2.9.21.20251012; extra == "dev"
Requires-Dist: py-spy; extra == "dev"
Provides-Extra: psql
Requires-Dist: psycopg2-binary>=2.9.11; extra == "psql"
Provides-Extra: sim
Requires-Dist: mujoco>=3.3.4; extra == "sim"
Requires-Dist: playground>=0.0.5; extra == "sim"
Requires-Dist: pygame>=2.6.1; extra == "sim"
Provides-Extra: drone
Requires-Dist: pymavlink; extra == "drone"
Provides-Extra: dds
Requires-Dist: dimos[dev]; extra == "dds"
Requires-Dist: cyclonedds>=0.10.5; extra == "dds"
Provides-Extra: docker
Requires-Dist: dimos-lcm; extra == "docker"
Requires-Dist: numpy>=1.26.4; extra == "docker"
Requires-Dist: scipy>=1.15.1; extra == "docker"
Requires-Dist: reactivex; extra == "docker"
Requires-Dist: dask[distributed]==2025.5.1; extra == "docker"
Requires-Dist: plum-dispatch==2.5.7; extra == "docker"
Requires-Dist: structlog<26,>=25.5.0; extra == "docker"
Requires-Dist: pydantic; extra == "docker"
Requires-Dist: pydantic-settings<3,>=2.11.0; extra == "docker"
Requires-Dist: typer<1,>=0.19.2; extra == "docker"
Requires-Dist: opencv-python-headless; extra == "docker"
Requires-Dist: lcm; extra == "docker"
Requires-Dist: sortedcontainers; extra == "docker"
Requires-Dist: PyTurboJPEG; extra == "docker"
Requires-Dist: rerun-sdk; extra == "docker"
Requires-Dist: open3d-unofficial-arm; (platform_system == "Linux" and platform_machine == "aarch64") and extra == "docker"
Requires-Dist: open3d>=0.18.0; (platform_system != "Linux" or platform_machine != "aarch64") and extra == "docker"
Provides-Extra: base
Requires-Dist: dimos[agents,perception,sim,visualization,web]; extra == "base"
Dynamic: license-file


<div align="center">

![Dimensional](assets/dimensional-dark.svg#gh-dark-mode-only)
![Dimensional](assets/dimensional-light.svg#gh-light-mode-only)

<h2>The Agentive Operating System for Generalist Robotics</h2>

[![Discord](https://img.shields.io/discord/1341146487186391173?style=flat-square&logo=discord&logoColor=white&label=Discord&color=5865F2)](https://discord.gg/dimos)
[![Stars](https://img.shields.io/github/stars/dimensionalOS/dimos?style=flat-square)](https://github.com/dimensionalOS/dimos/stargazers)
[![Forks](https://img.shields.io/github/forks/dimensionalOS/dimos?style=flat-square)](https://github.com/dimensionalOS/dimos/fork)
[![Contributors](https://img.shields.io/github/contributors/dimensionalOS/dimos?style=flat-square)](https://github.com/dimensionalOS/dimos/graphs/contributors)
![Nix](https://img.shields.io/badge/Nix-flakes-5277C3?style=flat-square&logo=NixOS&logoColor=white)
![NixOS](https://img.shields.io/badge/NixOS-supported-5277C3?style=flat-square&logo=NixOS&logoColor=white)
![CUDA](https://img.shields.io/badge/CUDA-supported-76B900?style=flat-square&logo=nvidia&logoColor=white)
[![Docker](https://img.shields.io/badge/Docker-ready-2496ED?style=flat-square&logo=docker&logoColor=white)](https://www.docker.com/)

<big><big>

[Hardware](#hardware) •
[Installation](#installation) •
[Development](#development) •
[Multi Language](#multi-language-support) •
[ROS](#ros-interop)

⚠️ **Alpha Pre-Release: Expect Breaking Changes** ⚠️

</big></big>

</div>

# Intro

Dimensional is the modern operating system for generalist robotics. We are setting the next-generation SDK standard, integrating with the majority of robot manufacturers.

With a simple install and no ROS required, build physical applications entirely in python that run on any humanoid, quadruped, or drone.

Dimensional is agent native -- "vibecode" your robots in natural language and build (local & hosted) multi-agent systems that work seamlessly with your hardware. Agents run as native modules — subscribing to any embedded stream, from perception (lidar, camera) and spatial memory down to control loops and motor drivers.
<table>
  <tr>
    <td align="center" width="50%">
      <a href="docs/capabilities/navigation/readme.md"><img src="assets/readme/navigation.gif" alt="Navigation" width="100%"></a>
    </td>
    <td align="center" width="50%">
      <a href="docs/capabilities/perception/readme.md"><img src="assets/readme/perception.png" alt="Perception" width="100%"></a>
    </td>
  </tr>
  <tr>
    <td align="center" width="50%">
      <h3><a href="docs/capabilities/navigation/readme.md">Navigation and Mapping</a></h3>
      SLAM, dynamic obstacle avoidance, route planning, and autonomous exploration — via both DimOS native and ROS<br><a href="https://x.com/stash_pomichter/status/2010471593806545367">Watch video</a>
    </td>
    <td align="center" width="50%">
      <h3><a href="docs/capabilities/perception/readme.md">Perception</a></h3>
      Detectors, 3d projections, VLMs, Audio processing
    </td>
  </tr>
  <tr>
    <td align="center" width="50%">
      <a href="docs/capabilities/agents/readme.md"><img src="assets/readme/agentic_control.gif" alt="Agents" width="100%"></a>
    </td>
    <td align="center" width="50%">
      <img src="assets/readme/spatial_memory.gif" alt="Spatial Memory" width="100%"></a>
    </td>
  </tr>
  <tr>
    <td align="center" width="50%">
      <h3><a href="docs/capabilities/agents/readme.md">Agentive Control, MCP</a></h3>
      "hey Robot, go find the kitchen"<br><a href="https://x.com/stash_pomichter/status/2015912688854200322">Watch video</a>
    </td>
    <td align="center" width="50%">
      <h3>Spatial Memory</a></h3>
      Spatio-temporal RAG, Dynamic memory, Object localization and permanence<br><a href="https://x.com/stash_pomichter/status/1980741077205414328">Watch video</a>
    </td>
  </tr>
</table>


# Hardware

<table>
  <tr>
    <td align="center" width="20%">
      <h3>Quadruped</h3>
      <img width="245" height="1" src="assets/readme/spacer.png">
    </td>
    <td align="center" width="20%">
      <h3>Humanoid</h3>
      <img width="245" height="1" src="assets/readme/spacer.png">
    </td>
    <td align="center" width="20%">
      <h3>Arm</h3>
      <img width="245" height="1" src="assets/readme/spacer.png">
    </td>
    <td align="center" width="20%">
      <h3>Drone</h3>
      <img width="245" height="1" src="assets/readme/spacer.png">
    </td>
    <td align="center" width="20%">
      <h3>Misc</h3>
      <img width="245" height="1" src="assets/readme/spacer.png">
    </td>
  </tr>

  <tr>
    <td align="center" width="20%">
      🟩 <a href="docs/platforms/quadruped/go2/index.md">Unitree Go2 pro/air</a><br>
      🟥 <a href="dimos/robot/unitree/b1">Unitree B1</a><br>
    </td>
    <td align="center" width="20%">
      🟨 <a href="docs/todo.md">Unitree G1</a><br>
    </td>
    <td align="center" width="20%">
      🟥 <a href="docs/todo.md">Xarm</a><br>
      🟥 <a href="docs/todo.md">AgileX Piper</a><br>
    </td>
    <td align="center" width="20%">
      🟥 <a href="dimos/robot/drone">Mavlink</a><br>
      🟥 <a href="dimos/robot/drone">DJI SDK</a><br>
    </td>
    <td align="center" width="20%">
      🟥 <a href="https://github.com/dimensionalOS/openFT-sensor">Force Torque Sensor</a><br>
    </td>
  </tr>
</table>
<br>
<div align="right">
🟩 stable 🟨 beta 🟧 alpha 🟥 experimental

</div>

# Installation

## System Install

To set up your system dependencies, follow one of these guides:

- 🟩 [Ubuntu 22.04 / 24.04](docs/installation/ubuntu.md)
- 🟩 [NixOS / General Linux](docs/installation/nix.md)
- 🟧 [macOS](docs/installation/osx.md)

## Python Installs

### Quickstart

```bash
uv venv --python "3.12"
source .venv/bin/activate
uv pip install dimos[base,unitree]

# Replay a recorded Go2 session (no hardware needed)
# NOTE: First run will show a black rerun window while ~2.4 GB downloads from LFS
dimos --replay run unitree-go2
```

```bash
# Install with simulation support
uv pip install dimos[base,unitree,sim]

# Run Go2 in MuJoCo simulation
dimos --simulation run unitree-go2

# Run G1 humanoid in simulation
dimos --simulation run unitree-g1-sim
```

```bash
# Control a real robot (Unitree Go2 over WebRTC)
export ROBOT_IP=<YOUR_ROBOT_IP>
dimos run unitree-go2
```

### Use DimOS as a Library

See below a simple robot connection module that sends streams of continuous `cmd_vel` to the robot and receives `color_image` to a simple `Listener` module. DimOS Modules are subsystems on a robot that communicate with other modules using standardized messages.

```py
import threading, time, numpy as np
from dimos.core import In, Module, Out, rpc, autoconnect
from dimos.msgs.geometry_msgs import Twist
from dimos.msgs.sensor_msgs import Image, ImageFormat

class RobotConnection(Module):
    cmd_vel: In[Twist]
    color_image: Out[Image]

    @rpc
    def start(self):
        threading.Thread(target=self._image_loop, daemon=True).start()

    def _image_loop(self):
        while True:
            img = Image.from_numpy(
                np.zeros((120, 160, 3), np.uint8),
                format=ImageFormat.RGB,
                frame_id="camera_optical",
            )
            self.color_image.publish(img)
            time.sleep(0.2)

class Listener(Module):
    color_image: In[Image]

    @rpc
    def start(self):
        self.color_image.subscribe(lambda img: print(f"image {img.width}x{img.height}"))

if __name__ == "__main__":
    autoconnect(
        RobotConnection.blueprint(),
        Listener.blueprint(),
    ).build().loop()
```

### Blueprints

Blueprints are instructions for how to construct and wire modules. We compose them with
`autoconnect(...)`, which connects streams by `(name, type)` and returns a `Blueprint`.

Blueprints can be composed, remapped, and have transports overridden if `autoconnect()` fails due to conflicting variable names or `In[]` and `Out[]` message types.

A blueprint example that connects the image stream from a robot to an LLM Agent for reasoning and action execution.
```py
from dimos.core import autoconnect, LCMTransport
from dimos.msgs.sensor_msgs import Image
from dimos.robot.unitree.go2.connection import go2_connection
from dimos.agents.agent import agent

blueprint = autoconnect(
    go2_connection(),
    agent(),
).transports({("color_image", Image): LCMTransport("/color_image", Image)})

# Run the blueprint
if __name__ == "__main__":
    blueprint.build().loop()
```

## Library API

- [Modules](docs/usage/modules.md)
- [LCM](docs/usage/lcm.md)
- [Blueprints](docs/usage/blueprints.md)
- [Transports](docs/usage/transports/index.md)
- [Data Streams](docs/usage/data_streams/README.md)
- [Configuration](docs/usage/configuration.md)
- [Visualization](docs/usage/visualization.md)

### Develop on DimOS

```sh
export GIT_LFS_SKIP_SMUDGE=1
git clone -b dev https://github.com/dimensionalOS/dimos.git
cd dimos

uv sync --all-extras --no-extra dds

# Run fast test suite
uv run pytest dimos
```

### Demos

<img src="assets/readme/dimos_demo.gif" alt="DimOS Demo" width="100%">

# Development

## Multi Language Support

Python is our glue and prototyping language, but we support many languages via LCM interop.

Check our language interop examples:
- [C++](examples/language-interop/cpp/)
- [Lua](examples/language-interop/lua/)
- [TypeScript](examples/language-interop/ts/)

## ROS interop

For researchers, we can talk to ROS directly via [ROS Transports](docs/usage/transports/index.md), or host dockerized ROS deployments as first-class DimOS modules, allowing you easy installation and portability
