# pantor/ruckig architecture

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

- Interactive diagram: https://gitdiagram.com/pantor/ruckig
- Repository: https://github.com/pantor/ruckig

## Overview

Ruckig is a real-time motion-generation library: callers provide current and target kinematic states plus motion limits, then repeatedly request trajectory updates and feed each new state back into the next input. Its domain stages include constrained position/velocity profile calculation, multi-DoF synchronization, and trajectory sampling; waypoint requests can use a separate cloud-calculation path in the Community Version. The graph reflects the README and sampled interfaces; unsampled implementation details are represented only where the tree or documentation supports them.

Main entry points: [`include/ruckig/ruckig.hpp`](https://github.com/pantor/ruckig/blob/main/include/ruckig/ruckig.hpp) (Ruckig Engine), [`include/ruckig/calculator_target.hpp`](https://github.com/pantor/ruckig/blob/main/include/ruckig/calculator_target.hpp) (Target Solver), [`include/ruckig/calculator.hpp`](https://github.com/pantor/ruckig/blob/main/include/ruckig/calculator.hpp) (Target Calculator), [`include/ruckig/profile.hpp`](https://github.com/pantor/ruckig/blob/main/include/ruckig/profile.hpp) (Profile Checks)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Public API"]
  node_input["Motion Inputs"]
  node_ruckig["Ruckig Engine<br/>[ruckig.hpp]"]
  node_output["Step Output"]
end

subgraph group_planning["Trajectory Planning"]
  node_calculator["Target Calculator<br/>[calculator.hpp]"]
  node_target["Target Solver"]
  node_position["Position Profiles<br/>[position.hpp]"]
  node_velocity["Velocity Profiles<br/>[velocity.hpp]"]
  node_profile["Profile Checks<br/>[profile.hpp]"]
  node_block["Profile Blocks<br/>[block.hpp]"]
  node_brake["Braking Profiles<br/>[brake.hpp]"]
  node_trajectory["Trajectory Sampler<br/>[trajectory.hpp]"]
end

subgraph group_waypoints["Waypoint Calculation"]
  node_waypoint_calc["Waypoint Calculator"]
  node_cloud_client["Cloud Client<br/>[cloud_client.cpp]"]
  node_cloud_api(("Ruckig Cloud API"))
  node_waypoint_filter["Waypoint Filtering<br/>[utils.hpp]"]
end

subgraph group_bindings["Language Bindings"]
  node_python["Python Interface<br/>[python.cpp]"]
  node_rust["Rust Interface<br/>[rust.rs]"]
  node_rust_bridge["Rust C++ Bridge<br/>[rust.hpp]"]
end

node_caller(("Motion Client"))

node_caller -->|"sets state"| node_input
node_caller -->|"requests update"| node_ruckig
node_ruckig -->|"calculates motion"| node_calculator
node_calculator -->|"validates inputs"| node_input
node_calculator -->|"plans target"| node_target
node_target -->|"solves position"| node_position
node_target -->|"solves velocity"| node_velocity
node_position -->|"checks candidates"| node_profile
node_velocity -->|"checks candidates"| node_profile
node_profile -->|"forms blocks"| node_block
node_target -->|"builds trajectory"| node_trajectory
node_ruckig -->|"samples step"| node_trajectory
node_ruckig -->|"writes step"| node_output
node_output -->|"returns state"| node_caller
node_caller -->|"feeds next state"| node_input
node_caller -.->|"filters waypoints"| node_waypoint_filter
node_ruckig -.->|"plans waypoints"| node_waypoint_calc
node_waypoint_calc -.->|"sends calculation"| node_cloud_client
node_cloud_client -.->|"posts request"| node_cloud_api
node_python -->|"exposes API"| node_ruckig
node_rust -->|"calls bridge"| node_rust_bridge
node_rust_bridge -->|"invokes engine"| node_ruckig

click node_input "https://github.com/pantor/ruckig/blob/main/include/ruckig/input_parameter.hpp"
click node_ruckig "https://github.com/pantor/ruckig/blob/main/include/ruckig/ruckig.hpp"
click node_output "https://github.com/pantor/ruckig/blob/main/include/ruckig/output_parameter.hpp"
click node_calculator "https://github.com/pantor/ruckig/blob/main/include/ruckig/calculator.hpp"
click node_target "https://github.com/pantor/ruckig/blob/main/include/ruckig/calculator_target.hpp"
click node_position "https://github.com/pantor/ruckig/blob/main/include/ruckig/position.hpp"
click node_velocity "https://github.com/pantor/ruckig/blob/main/include/ruckig/velocity.hpp"
click node_profile "https://github.com/pantor/ruckig/blob/main/include/ruckig/profile.hpp"
click node_block "https://github.com/pantor/ruckig/blob/main/include/ruckig/block.hpp"
click node_brake "https://github.com/pantor/ruckig/blob/main/include/ruckig/brake.hpp"
click node_trajectory "https://github.com/pantor/ruckig/blob/main/include/ruckig/trajectory.hpp"
click node_waypoint_calc "https://github.com/pantor/ruckig/blob/main/include/ruckig/calculator_cloud.hpp"
click node_cloud_client "https://github.com/pantor/ruckig/blob/main/src/ruckig/cloud_client.cpp"
click node_waypoint_filter "https://github.com/pantor/ruckig/blob/main/include/ruckig/utils.hpp"
click node_python "https://github.com/pantor/ruckig/blob/main/src/wrapper/python.cpp"
click node_rust "https://github.com/pantor/ruckig/blob/main/src/wrapper/rust.rs"
click node_rust_bridge "https://github.com/pantor/ruckig/blob/main/src/wrapper/rust.hpp"

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_input,node_ruckig,node_output,node_caller toneBlue
class node_calculator,node_target,node_position,node_velocity,node_profile,node_block,node_brake,node_trajectory toneAmber
class node_waypoint_calc,node_cloud_client,node_cloud_api,node_waypoint_filter toneMint
class node_python,node_rust,node_rust_bridge toneRose
```

## Components

### Public API

- [Motion Inputs](https://github.com/pantor/ruckig/blob/main/include/ruckig/input_parameter.hpp): `include/ruckig/input_parameter.hpp`
- [Ruckig Engine](https://github.com/pantor/ruckig/blob/main/include/ruckig/ruckig.hpp): `include/ruckig/ruckig.hpp`
- [Step Output](https://github.com/pantor/ruckig/blob/main/include/ruckig/output_parameter.hpp): `include/ruckig/output_parameter.hpp`

### Trajectory Planning

- [Target Calculator](https://github.com/pantor/ruckig/blob/main/include/ruckig/calculator.hpp): `include/ruckig/calculator.hpp`
- [Target Solver](https://github.com/pantor/ruckig/blob/main/include/ruckig/calculator_target.hpp): `include/ruckig/calculator_target.hpp`
- [Position Profiles](https://github.com/pantor/ruckig/blob/main/include/ruckig/position.hpp): `include/ruckig/position.hpp`
- [Velocity Profiles](https://github.com/pantor/ruckig/blob/main/include/ruckig/velocity.hpp): `include/ruckig/velocity.hpp`
- [Profile Checks](https://github.com/pantor/ruckig/blob/main/include/ruckig/profile.hpp): `include/ruckig/profile.hpp`
- [Profile Blocks](https://github.com/pantor/ruckig/blob/main/include/ruckig/block.hpp): `include/ruckig/block.hpp`
- [Braking Profiles](https://github.com/pantor/ruckig/blob/main/include/ruckig/brake.hpp): `include/ruckig/brake.hpp`
- [Trajectory Sampler](https://github.com/pantor/ruckig/blob/main/include/ruckig/trajectory.hpp): `include/ruckig/trajectory.hpp`

### Waypoint Calculation

- [Waypoint Calculator](https://github.com/pantor/ruckig/blob/main/include/ruckig/calculator_cloud.hpp): `include/ruckig/calculator_cloud.hpp`
- [Cloud Client](https://github.com/pantor/ruckig/blob/main/src/ruckig/cloud_client.cpp): `src/ruckig/cloud_client.cpp`
- **Ruckig Cloud API**
- [Waypoint Filtering](https://github.com/pantor/ruckig/blob/main/include/ruckig/utils.hpp): `include/ruckig/utils.hpp`

### Language Bindings

- [Python Interface](https://github.com/pantor/ruckig/blob/main/src/wrapper/python.cpp): `src/wrapper/python.cpp`
- [Rust Interface](https://github.com/pantor/ruckig/blob/main/src/wrapper/rust.rs): `src/wrapper/rust.rs`
- [Rust C++ Bridge](https://github.com/pantor/ruckig/blob/main/src/wrapper/rust.hpp): `src/wrapper/rust.hpp`

### Other components

- **Motion Client**

## Connections

- Motion Client → Motion Inputs: sets state
- Motion Client → Ruckig Engine: requests update
- Ruckig Engine → Target Calculator: calculates motion
- Target Calculator → Motion Inputs: validates inputs
- Target Calculator → Target Solver: plans target
- Target Solver → Position Profiles: solves position
- Target Solver → Velocity Profiles: solves velocity
- Position Profiles → Profile Checks: checks candidates
- Velocity Profiles → Profile Checks: checks candidates
- Profile Checks → Profile Blocks: forms blocks
- Target Solver → Trajectory Sampler: builds trajectory
- Ruckig Engine → Trajectory Sampler: samples step
- Ruckig Engine → Step Output: writes step
- Step Output → Motion Client: returns state
- Motion Client → Motion Inputs: feeds next state
- Motion Client → Waypoint Filtering: filters waypoints
- Ruckig Engine → Waypoint Calculator: plans waypoints
- Waypoint Calculator → Cloud Client: sends calculation
- Cloud Client → Ruckig Cloud API: posts request
- Python Interface → Ruckig Engine: exposes API
- Rust Interface → Rust C++ Bridge: calls bridge
- Rust C++ Bridge → Ruckig Engine: invokes engine
