# telekinesis-ai/babyros architecture

> Architecture diagram of the GitHub repository telekinesis-ai/babyros, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/telekinesis-ai/babyros
- Repository: https://github.com/telekinesis-ai/babyros

## Overview

BabyROS is a lightweight Python robotics communication library built on Zenoh. Applications configure a session, then publish/subscribe on topics or exchange request/reply messages through clients and servers; payloads are encoded for transport and subscribers dispatch received data to callbacks. Session management tracks active nodes and supports topic-liveliness discovery, including the CLI’s live listing. The excerpts establish these core relationships; other documented capabilities are represented only where the tree or README supports them.

Main entry points: [`src/babyros/node.py`](https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/node.py) (Subscriber), [`src/babyros/serializer.py`](https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/serializer.py) (Zenoh codec), [`src/babyros/__init__.py`](https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/__init__.py) (Configuration API), [`src/babyros/cli.py`](https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/cli.py) (Topic CLI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_session["Session and configuration"]
  node_config_api["Configuration API<br/>[__init__.py]"]
  node_session_manager["Session manager<br/>[node.py]"]
end

subgraph group_pubsub["Topic messaging"]
  node_publisher["Publisher<br/>[node.py]"]
  node_subscriber["Subscriber<br/>[node.py]"]
end

subgraph group_reqres["Request response"]
  node_server["Server<br/>[node.py]"]
  node_client["Client<br/>[node.py]"]
end

subgraph group_wire["Encoding and discovery"]
  node_codec["Zenoh codec<br/>[serializer.py]"]
  node_liveliness["Liveliness discovery<br/>[node.py]"]
  node_cli["Topic CLI<br/>[cli.py]"]
end

node_application(("Application"))
node_zenoh(("Zenoh network"))
node_datatype_lib["Datatype serializer"]

node_application -->|"configures"| node_config_api
node_config_api -->|"sets session config"| node_session_manager
node_application -->|"publishes via"| node_publisher
node_application -->|"subscribes via"| node_subscriber
node_application -->|"serves via"| node_server
node_application -->|"requests via"| node_client
node_publisher -->|"gets session"| node_session_manager
node_subscriber -->|"gets session"| node_session_manager
node_server -->|"gets session"| node_session_manager
node_client -->|"gets session"| node_session_manager
node_session_manager -->|"opens session"| node_zenoh
node_publisher -->|"encodes payload"| node_codec
node_publisher -->|"publishes"| node_zenoh
node_zenoh -->|"delivers samples"| node_subscriber
node_subscriber -->|"decodes payload"| node_codec
node_subscriber -->|"dispatches callback"| node_application
node_application -->|"provides callback"| node_subscriber
node_zenoh -->|"delivers queries"| node_server
node_server -->|"encodes replies"| node_codec
node_server -->|"dispatches request callback"| node_application
node_application -->|"provides callback"| node_server
node_client -->|"encodes request"| node_codec
node_client -->|"sends query"| node_zenoh
node_client -->|"decodes replies"| node_codec
node_codec -->|"serializes datatypes"| node_datatype_lib
node_publisher -->|"declares token"| node_liveliness
node_subscriber -->|"declares token"| node_liveliness
node_server -->|"declares token"| node_liveliness
node_liveliness -->|"queries or watches"| node_zenoh
node_cli -->|"configures discovery"| node_config_api
node_cli -->|"lists topics"| node_liveliness

click node_config_api "https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/__init__.py"
click node_session_manager "https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/node.py"
click node_publisher "https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/node.py"
click node_subscriber "https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/node.py"
click node_server "https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/node.py"
click node_client "https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/node.py"
click node_codec "https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/serializer.py"
click node_liveliness "https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/node.py"
click node_cli "https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/cli.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_config_api,node_session_manager toneBlue
class node_publisher,node_subscriber toneAmber
class node_server,node_client toneMint
class node_codec,node_liveliness,node_cli toneRose
class node_application,node_zenoh,node_datatype_lib toneIndigo
```

## Components

### Session and configuration

- [Configuration API](https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/__init__.py): `src/babyros/__init__.py`
- [Session manager](https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/node.py): `src/babyros/node.py`

### Topic messaging

- [Publisher](https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/node.py): `src/babyros/node.py`
- [Subscriber](https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/node.py): `src/babyros/node.py`

### Request response

- [Server](https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/node.py): `src/babyros/node.py`
- [Client](https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/node.py): `src/babyros/node.py`

### Encoding and discovery

- [Zenoh codec](https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/serializer.py): `src/babyros/serializer.py`
- [Liveliness discovery](https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/node.py): `src/babyros/node.py`
- [Topic CLI](https://github.com/telekinesis-ai/babyros/blob/main/src/babyros/cli.py): `src/babyros/cli.py`

### Other components

- **Application**
- **Zenoh network**
- **Datatype serializer**

## Connections

- Application → Configuration API: configures
- Configuration API → Session manager: sets session config
- Application → Publisher: publishes via
- Application → Subscriber: subscribes via
- Application → Server: serves via
- Application → Client: requests via
- Publisher → Session manager: gets session
- Subscriber → Session manager: gets session
- Server → Session manager: gets session
- Client → Session manager: gets session
- Session manager → Zenoh network: opens session
- Publisher → Zenoh codec: encodes payload
- Publisher → Zenoh network: publishes
- Zenoh network → Subscriber: delivers samples
- Subscriber → Zenoh codec: decodes payload
- Subscriber → Application: dispatches callback
- Application → Subscriber: provides callback
- Zenoh network → Server: delivers queries
- Server → Zenoh codec: encodes replies
- Server → Application: dispatches request callback
- Application → Server: provides callback
- Client → Zenoh codec: encodes request
- Client → Zenoh network: sends query
- Client → Zenoh codec: decodes replies
- Zenoh codec → Datatype serializer: serializes datatypes
- Publisher → Liveliness discovery: declares token
- Subscriber → Liveliness discovery: declares token
- Server → Liveliness discovery: declares token
- Liveliness discovery → Zenoh network: queries or watches
- Topic CLI → Configuration API: configures discovery
- Topic CLI → Liveliness discovery: lists topics
