# open-rmf/rmf-web architecture

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

- Interactive diagram: https://gitdiagram.com/open-rmf/rmf-web
- Repository: https://github.com/open-rmf/rmf-web

## Overview

RMF Web is a dashboard and API layer for visualizing and controlling Open-RMF deployments. The principal workflow is an operator using the dashboard to inspect maps, fleets, robots, tasks, and facility devices, then issue task or control actions through the API server to the deployment. The server also exposes live state and alert information, persists operational data, and supports user and role administration. The README documents trajectory visualization as a separate WebSocket integration. Some subsystem connections are documented or evident from the tree rather than sampled implementation, so uncertain internal wiring is omitted.

Main entry points: [`packages/api-server/api_server/app.py`](https://github.com/open-rmf/rmf-web/blob/main/packages/api-server/api_server/app.py) (HTTP and socket API), [`packages/rmf-dashboard-framework/src/components`](https://github.com/open-rmf/rmf-web/tree/main/packages/rmf-dashboard-framework/src/components) (Dashboard UI), [`packages/rmf-dashboard-framework/src/utils/api.ts`](https://github.com/open-rmf/rmf-web/blob/main/packages/rmf-dashboard-framework/src/utils/api.ts) (Dashboard API access), [`packages/api-server/api_server/routes/tasks`](https://github.com/open-rmf/rmf-web/tree/main/packages/api-server/api_server/routes/tasks) (Task endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_dashboard["Dashboard"]
  node_dashboard_ui["Dashboard UI"]
  node_map_ui["Map controls"]
  node_alerts_ui["Alert manager<br/>[alert-manager.tsx]"]
  node_admin_ui["Admin pages<br/>[routes.tsx]"]
  node_dashboard_api["Dashboard API access<br/>[api.ts]"]
  node_trajectory_ui["Trajectory visualization"]
end

subgraph group_server["API server"]
  node_api_server["HTTP and socket API<br/>[app.py]"]
  node_task_routes["Task endpoints"]
  node_device_routes["Device and fleet endpoints"]
  node_admin_routes["Administration endpoints<br/>[admin.py]"]
  node_auth["Authentication and permissions<br/>[authenticator.py]"]
  node_task_repository["Task repository<br/>[tasks.py]"]
  node_rmf_repository["RMF repository<br/>[rmf.py]"]
  node_scheduler["Scheduled tasks<br/>[scheduler.py]"]
end

subgraph group_runtime["RMF runtime and state"]
  node_ros_events["RMF event streams<br/>[events.py]"]
  node_ros_gateway["ROS gateway<br/>[gateway.py]"]
  node_database[("Operational database")]
end

subgraph group_contracts["API contracts"]
  node_api_client["Generated API client<br/>[index.ts]"]
  node_api_models["RMF API models"]
end

node_operator(("Operator"))
node_rmf_deployment{{"Open-RMF deployment"}}
node_trajectory_service{{"Trajectory service"}}

node_operator -->|"uses"| node_dashboard_ui
node_dashboard_ui -->|"controls map"| node_map_ui
node_dashboard_ui -->|"displays alerts"| node_alerts_ui
node_dashboard_ui -->|"opens admin"| node_admin_ui
node_dashboard_ui -->|"requests data"| node_dashboard_api
node_dashboard_api -->|"calls"| node_api_client
node_dashboard_api -->|"HTTP and socket"| node_api_server
node_api_server -->|"authenticates"| node_auth
node_api_server -->|"dispatches routes"| node_task_routes
node_api_server -->|"dispatches routes"| node_device_routes
node_api_server -->|"dispatches routes"| node_admin_routes
node_task_routes -->|"queries and saves"| node_task_repository
node_task_routes -->|"schedules tasks"| node_scheduler
node_device_routes -->|"queries state"| node_rmf_repository
node_device_routes -->|"subscribes state"| node_ros_events
node_task_repository -->|"reads and writes"| node_database
node_api_server -->|"initializes and loads"| node_database
node_api_server -->|"starts streams"| node_ros_events
node_api_server -->|"starts gateway"| node_ros_gateway
node_ros_events -->|"exchanges events"| node_rmf_deployment
node_ros_gateway -->|"connects ROS"| node_rmf_deployment
node_api_server -->|"serves schemas"| node_api_models
node_dashboard_ui -.->|"visualizes trajectories"| node_trajectory_ui
node_trajectory_ui -.->|"requests trajectories"| node_trajectory_service

click node_dashboard_ui "https://github.com/open-rmf/rmf-web/tree/main/packages/rmf-dashboard-framework/src/components"
click node_map_ui "https://github.com/open-rmf/rmf-web/blob/main/packages/rmf-dashboard-framework/src/components/map/layers-controller.tsx"
click node_alerts_ui "https://github.com/open-rmf/rmf-web/blob/main/packages/rmf-dashboard-framework/src/components/alert-manager.tsx"
click node_admin_ui "https://github.com/open-rmf/rmf-web/blob/main/packages/rmf-dashboard-framework/src/components/admin/routes.tsx"
click node_dashboard_api "https://github.com/open-rmf/rmf-web/blob/main/packages/rmf-dashboard-framework/src/utils/api.ts"
click node_trajectory_ui "https://github.com/open-rmf/rmf-web/blob/main/packages/rmf-dashboard-framework/src/services/robot-trajectory-manager.ts"
click node_api_server "https://github.com/open-rmf/rmf-web/blob/main/packages/api-server/api_server/app.py"
click node_task_routes "https://github.com/open-rmf/rmf-web/tree/main/packages/api-server/api_server/routes/tasks"
click node_device_routes "https://github.com/open-rmf/rmf-web/tree/main/packages/api-server/api_server/routes"
click node_admin_routes "https://github.com/open-rmf/rmf-web/blob/main/packages/api-server/api_server/routes/admin.py"
click node_auth "https://github.com/open-rmf/rmf-web/blob/main/packages/api-server/api_server/authenticator.py"
click node_task_repository "https://github.com/open-rmf/rmf-web/blob/main/packages/api-server/api_server/repositories/tasks.py"
click node_rmf_repository "https://github.com/open-rmf/rmf-web/blob/main/packages/api-server/api_server/repositories/rmf.py"
click node_scheduler "https://github.com/open-rmf/rmf-web/blob/main/packages/api-server/api_server/scheduler.py"
click node_ros_events "https://github.com/open-rmf/rmf-web/blob/main/packages/api-server/api_server/rmf_io/events.py"
click node_ros_gateway "https://github.com/open-rmf/rmf-web/blob/main/packages/api-server/api_server/gateway.py"
click node_database "https://github.com/open-rmf/rmf-web/tree/main/packages/api-server/api_server/models/tortoise_models"
click node_api_client "https://github.com/open-rmf/rmf-web/blob/main/packages/api-client/lib/index.ts"
click node_api_models "https://github.com/open-rmf/rmf-web/tree/main/packages/api-server/api_server/models"

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_dashboard_ui,node_map_ui,node_alerts_ui,node_admin_ui,node_dashboard_api,node_trajectory_ui toneBlue
class node_api_server,node_task_routes,node_device_routes,node_admin_routes,node_auth,node_task_repository,node_rmf_repository,node_scheduler toneAmber
class node_ros_events,node_ros_gateway,node_database toneMint
class node_api_client,node_api_models toneRose
class node_operator,node_rmf_deployment,node_trajectory_service toneIndigo
```

## Components

### Dashboard

- [Dashboard UI](https://github.com/open-rmf/rmf-web/tree/main/packages/rmf-dashboard-framework/src/components): `packages/rmf-dashboard-framework/src/components`
- [Map controls](https://github.com/open-rmf/rmf-web/blob/main/packages/rmf-dashboard-framework/src/components/map/layers-controller.tsx): `packages/rmf-dashboard-framework/src/components/map/layers-controller.tsx`
- [Alert manager](https://github.com/open-rmf/rmf-web/blob/main/packages/rmf-dashboard-framework/src/components/alert-manager.tsx): `packages/rmf-dashboard-framework/src/components/alert-manager.tsx`
- [Admin pages](https://github.com/open-rmf/rmf-web/blob/main/packages/rmf-dashboard-framework/src/components/admin/routes.tsx): `packages/rmf-dashboard-framework/src/components/admin/routes.tsx`
- [Dashboard API access](https://github.com/open-rmf/rmf-web/blob/main/packages/rmf-dashboard-framework/src/utils/api.ts): `packages/rmf-dashboard-framework/src/utils/api.ts`
- [Trajectory visualization](https://github.com/open-rmf/rmf-web/blob/main/packages/rmf-dashboard-framework/src/services/robot-trajectory-manager.ts): `packages/rmf-dashboard-framework/src/services/robot-trajectory-manager.ts`

### API server

- [HTTP and socket API](https://github.com/open-rmf/rmf-web/blob/main/packages/api-server/api_server/app.py): `packages/api-server/api_server/app.py`
- [Task endpoints](https://github.com/open-rmf/rmf-web/tree/main/packages/api-server/api_server/routes/tasks): `packages/api-server/api_server/routes/tasks`
- [Device and fleet endpoints](https://github.com/open-rmf/rmf-web/tree/main/packages/api-server/api_server/routes): `packages/api-server/api_server/routes`
- [Administration endpoints](https://github.com/open-rmf/rmf-web/blob/main/packages/api-server/api_server/routes/admin.py): `packages/api-server/api_server/routes/admin.py`
- [Authentication and permissions](https://github.com/open-rmf/rmf-web/blob/main/packages/api-server/api_server/authenticator.py): `packages/api-server/api_server/authenticator.py`
- [Task repository](https://github.com/open-rmf/rmf-web/blob/main/packages/api-server/api_server/repositories/tasks.py): `packages/api-server/api_server/repositories/tasks.py`
- [RMF repository](https://github.com/open-rmf/rmf-web/blob/main/packages/api-server/api_server/repositories/rmf.py): `packages/api-server/api_server/repositories/rmf.py`
- [Scheduled tasks](https://github.com/open-rmf/rmf-web/blob/main/packages/api-server/api_server/scheduler.py): `packages/api-server/api_server/scheduler.py`

### RMF runtime and state

- [RMF event streams](https://github.com/open-rmf/rmf-web/blob/main/packages/api-server/api_server/rmf_io/events.py): `packages/api-server/api_server/rmf_io/events.py`
- [ROS gateway](https://github.com/open-rmf/rmf-web/blob/main/packages/api-server/api_server/gateway.py): `packages/api-server/api_server/gateway.py`
- [Operational database](https://github.com/open-rmf/rmf-web/tree/main/packages/api-server/api_server/models/tortoise_models): `packages/api-server/api_server/models/tortoise_models`

### API contracts

- [Generated API client](https://github.com/open-rmf/rmf-web/blob/main/packages/api-client/lib/index.ts): `packages/api-client/lib/index.ts`
- [RMF API models](https://github.com/open-rmf/rmf-web/tree/main/packages/api-server/api_server/models): `packages/api-server/api_server/models`

### Other components

- **Operator**
- **Open-RMF deployment**
- **Trajectory service**

## Connections

- Operator → Dashboard UI: uses
- Dashboard UI → Map controls: controls map
- Dashboard UI → Alert manager: displays alerts
- Dashboard UI → Admin pages: opens admin
- Dashboard UI → Dashboard API access: requests data
- Dashboard API access → Generated API client: calls
- Dashboard API access → HTTP and socket API: HTTP and socket
- HTTP and socket API → Authentication and permissions: authenticates
- HTTP and socket API → Task endpoints: dispatches routes
- HTTP and socket API → Device and fleet endpoints: dispatches routes
- HTTP and socket API → Administration endpoints: dispatches routes
- Task endpoints → Task repository: queries and saves
- Task endpoints → Scheduled tasks: schedules tasks
- Device and fleet endpoints → RMF repository: queries state
- Device and fleet endpoints → RMF event streams: subscribes state
- Task repository → Operational database: reads and writes
- HTTP and socket API → Operational database: initializes and loads
- HTTP and socket API → RMF event streams: starts streams
- HTTP and socket API → ROS gateway: starts gateway
- RMF event streams → Open-RMF deployment: exchanges events
- ROS gateway → Open-RMF deployment: connects ROS
- HTTP and socket API → RMF API models: serves schemas
- Dashboard UI → Trajectory visualization: visualizes trajectories
- Trajectory visualization → Trajectory service: requests trajectories
