{"id":13632388,"url":"https://github.com/dora-rs/dora","last_synced_at":"2026-01-08T17:21:51.928Z","repository":{"id":41356352,"uuid":"460615268","full_name":"dora-rs/dora","owner":"dora-rs","description":"DORA (Dataflow-Oriented Robotic Architecture) is middleware designed to streamline and simplify the creation of AI-based robotic applications. It offers low latency, composable, and distributed dataflow capabilities. Applications are modeled as directed graphs, also referred to as pipelines.","archived":false,"fork":false,"pushed_at":"2025-05-09T15:33:17.000Z","size":11793,"stargazers_count":2169,"open_issues_count":105,"forks_count":177,"subscribers_count":33,"default_branch":"main","last_synced_at":"2025-05-09T15:37:04.207Z","etag":null,"topics":["dataflow","embodied-ai","low-latency","robotics","rust"],"latest_commit_sha":null,"homepage":"https://dora-rs.ai","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dora-rs.png","metadata":{"files":{"readme":"README.md","changelog":"Changelog.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-02-17T21:33:07.000Z","updated_at":"2025-05-09T14:21:02.000Z","dependencies_parsed_at":"2022-07-09T14:46:16.784Z","dependency_job_id":"cd9a32e5-e4d7-4ae0-9035-ec610a2e3e17","html_url":"https://github.com/dora-rs/dora","commit_stats":null,"previous_names":[],"tags_count":126,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dora-rs%2Fdora","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dora-rs%2Fdora/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dora-rs%2Fdora/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dora-rs%2Fdora/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dora-rs","download_url":"https://codeload.github.com/dora-rs/dora/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253745347,"owners_count":21957354,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dataflow","embodied-ai","low-latency","robotics","rust"],"created_at":"2024-08-01T22:03:02.055Z","updated_at":"2026-01-08T17:21:51.917Z","avatar_url":"https://github.com/dora-rs.png","language":"Rust","funding_links":[],"categories":["Applications","Rust","Middleware","Software \u0026 Frameworks","Robot Operating System","rust","Project Status","Data Flow Programming","Frameworks","Dataflow Frameworks"],"sub_categories":["Industrial automation","Medical \u0026 Assistive","SLAM","Teleoperation"],"readme":"#\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/dora-rs/dora/main/docs/src/logo.svg\" width=\"400\"/\u003e\n\u003c/p\u003e\n\n\u003ch2 align=\"center\"\u003e\n  \u003ca href=\"https://www.dora-rs.ai\"\u003eWebsite\u003c/a\u003e\n  |\n  \u003ca href=\"https://dora-rs.ai/docs/guides/getting-started/conversation_py/\"\u003ePython API\u003c/a\u003e\n  |\n  \u003ca href=\"https://docs.rs/dora-node-api/latest/dora_node_api/\"\u003eRust API\u003c/a\u003e\n  |\n  \u003ca href=\"https://www.dora-rs.ai/docs/guides/\"\u003eGuide\u003c/a\u003e\n  |\n  \u003ca href=\"https://discord.gg/6eMGGutkfE\"\u003eDiscord\u003c/a\u003e\n\u003c/h2\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/dora-rs/dora/actions\"\u003e\n    \u003cimg src=\"https://github.com/dora-rs/dora/workflows/CI/badge.svg\" alt=\"Build and test\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://crates.io/crates/dora-rs\"\u003e\n    \u003cimg src=\"https://img.shields.io/crates/v/dora_node_api.svg\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://docs.rs/dora-node-api/latest/dora_node_api/\"\u003e\n    \u003cimg src=\"https://docs.rs/dora-node-api/badge.svg\" alt=\"rust docs\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://pypi.org/project/dora-rs/\"\u003e\n    \u003cimg src=\"https://img.shields.io/pypi/v/dora-rs.svg\" alt=\"PyPi Latest Release\"/\u003e\n  \u003c/a\u003e\n    \u003ca href=\"https://github.com/dora-rs/dora/blob/main/LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/license/dora-rs/dora\" alt=\"PyPi Latest Release\"/\u003e\n  \u003c/a\u003e      \n\u003c/div\u003e\n\u003cdiv align=\"center\"\u003e\n\u003ca href=\"https://trendshift.io/repositories/9190\" target=\"_blank\"\u003e\u003cimg src=\"https://trendshift.io/api/badge/repositories/9190\" alt=\"dora-rs%2Fdora | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n## Highlights\n\n- 🚀 dora-rs is a framework to run realtime multi-AI and multi-hardware applications.\n- 🦀 dora-rs internals are 100% Rust making it extremely fast compared to alternative such as being ⚡️ [10-17x faster](https://github.com/dora-rs/dora-benchmark) than `ros2`.\n- ❇️ Includes a large set of pre-packaged nodes for fast prototyping which simplifies integration of hardware, algorithms, and AI models.\n\n\u003cp align=\"center\"\u003e\n  \u003cpicture align=\"center\"\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/dora-rs/dora/main/docs/src/bar_chart_dark.svg\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/dora-rs/dora/main/docs/src/bar_chart_light.svg\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/dora-rs/dora/main/docs/src/bar_chart_light.svg\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n \u003ca href=\"https://github.com/dora-rs/dora-benchmark/\" \u003e\n  \u003ci\u003eLatency benchmark with Python API for both framework, sending 40M of random bytes.\u003c/i\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n## Latest News 🎉\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cb\u003e2025\u003c/b\u003e\u003c/summary\u003e\n\n- \\[08/25\\] Introduced `dora.builder`, a new Pythonic API for imperatively defining `dora` dataflows.\n- \\[07/25\\] Added Kornia rust nodes in the hub for V4L / Gstreamer cameras and Sobel image processing.\n- \\[06/25\\] Add support for git based node, dora-vggt for multi-camera depth estimation, and adding robot_descriptions_py as a default way to get urdfs within dora.\n- \\[05/25\\] Add support for dora-pytorch-kinematics for fk and ik, dora-mediapipe for pose estimation, dora-rustypot for rust serialport read/write, points2d and points3d visualization in rerun.\n- \\[04/25\\] Add support for dora-cotracker to track any point on a frame, dora-rav1e AV1 encoding up to 12bit and dora-dav1d AV1 decoding,\n- \\[03/25\\] Add support for dora async Python.\n- \\[03/25\\] Add support for Microsoft Phi4, Microsoft Magma.\n- \\[03/25\\] dora-rs has been accepted to [**GSoC 2025 🎉**](https://summerofcode.withgoogle.com/programs/2025/organizations/dora-rs-tb), with the following [**idea list**](https://github.com/dora-rs/dora/wiki/GSoC_2025).\n- \\[03/25\\] Add support for Zenoh for distributed dataflow.\n- \\[03/25\\] Add support for Meta SAM2, Kokoro(TTS), Improved Qwen2.5 Performance using `llama.cpp`.\n- \\[02/25\\] Add support for Qwen2.5(LLM), Qwen2.5-VL(VLM), outetts(TTS)\n\u003c/details\u003e\n\n## Support Matrix\n\n|                                   | dora-rs                                                                                                                                                                                                     |\n| --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **APIs**                          | Python \u003e= 3.7 including sync ⭐✅ \u003cbr\u003e Rust ✅\u003cbr\u003e C/C++ 🆗 \u003cbr\u003eROS2 \u003e= Foxy 🆗                                                                                                                             |\n| **OS**                            | Linux: Arm 32 ⭐✅ Arm 64 ⭐✅ x64_86 ⭐✅ \u003cbr\u003eMacOS: Arm 64 ⭐✅ \u003cbr\u003eWindows: x64_86 🆗 \u003cbr\u003eWSL: x64_86 🆗 \u003cbr\u003e Android: 🛠️ (Blocked by: https://github.com/elast0ny/shared_memory/issues/32) \u003cbr\u003e IOS: 🛠️ |\n| **Message Format**                | Arrow ✅ \u003cbr\u003e Standard Specification 🛠️                                                                                                                                                                     |\n| **Local Communication**           | Shared Memory ✅ \u003cbr\u003e [Cuda IPC](https://arrow.apache.org/docs/python/api/cuda.html) 📐                                                                                                                     |\n| **Remote Communication**          | [Zenoh](https://zenoh.io/) 📐                                                                                                                                                                               |\n| **RGB-D Streaming**               | AV1 Encoding (dora-rav1e), AV1 Decoding (dora-dav1d)📐                                                                                                                                                      |\n| **Metrics, Tracing, and Logging** | Opentelemetry 📐                                                                                                                                                                                            |\n| **Configuration**                 | YAML ✅                                                                                                                                                                                                     |\n| **Package Manager**               | [pip](https://pypi.org/): Python Node ✅ Rust Node ✅ C/C++ Node 🛠️ \u003cbr\u003e[cargo](https://crates.io/): Rust Node ✅                                                                                           |\n\n\u003e - ⭐ = Recommended\n\u003e - ✅ = First Class Support\n\u003e - 🆗 = Best Effort Support\n\u003e - 📐 = Experimental and looking for contributions\n\u003e - 🛠️ = Unsupported but hoped for through contributions\n\u003e\n\u003e Everything is open for contributions 🙋\n\n## Node Hub\n\nThe node hub is available in the [**`dora-rs/dora-hub`**](https://github.com/dora-rs/dora-hub/) repository.\n\n## Examples\n\n| Type      | Title                                                                                                          | Description                             | Last Commit                                                                                                          |\n| --------- | -------------------------------------------------------------------------------------------------------------- | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |\n| Vision    | [YOLO](https://github.com/dora-rs/dora/blob/main/examples/python-dataflow)                                     | Use YOLO to detect object within image. | ![License](https://img.shields.io/github/last-commit/dora-rs/dora?path=examples%2Fpython-dataflow\u0026label=%20)         |\n| ROS2      | [C++ ROS2 Example](https://github.com/dora-rs/dora/blob/main/examples/c++-ros2-dataflow)                       | Example using C++ ROS2                  | ![License](https://img.shields.io/github/last-commit/dora-rs/dora?path=examples%2Fc%2b%2b-ros2-dataflow\u0026label=%20)   |\n| ROS2      | [Rust ROS2 Example](https://github.com/dora-rs/dora/blob/main/examples/rust-ros2-dataflow)                     | Example using Rust ROS2                 | ![License](https://img.shields.io/github/last-commit/dora-rs/dora?path=examples%2Frust-ros2-dataflow\u0026label=%20)      |\n| ROS2      | [Python ROS2 Example](https://github.com/dora-rs/dora/blob/main/examples/python-ros2-dataflow)                 | Example using Python ROS2               | ![License](https://img.shields.io/github/last-commit/dora-rs/dora?path=examples%2Fpython-ros2-dataflow\u0026label=%20)    |\n| Benchmark | [GPU Benchmark](https://github.com/dora-rs/dora/blob/main/examples/cuda-benchmark)                             | GPU Benchmark of dora-rs                | ![License](https://img.shields.io/github/last-commit/dora-rs/dora?path=examples%2Fcuda-benchmark\u0026label=%20)          |\n| Benchmark | [CPU Benchmark](https://github.com/dora-rs/dora-benchmark/blob/main)                                           | CPU Benchmark of dora-rs                | ![License](https://img.shields.io/github/last-commit/dora-rs/dora-benchmark?path=dora-rs\u0026label=%20)                  |\n| Tutorial  | [Rust Example](https://github.com/dora-rs/dora/blob/main/examples/rust-dataflow)                               | Example using Rust                      | ![License](https://img.shields.io/github/last-commit/dora-rs/dora?path=examples%2Frust-dataflow\u0026label=%20)           |\n| Tutorial  | [Python Example](https://github.com/dora-rs/dora/blob/main/examples/python-dataflow)                           | Example using Python                    | ![License](https://img.shields.io/github/last-commit/dora-rs/dora?path=examples%2Fpython-dataflow\u0026label=%20)         |\n| Tutorial  | [CMake Example](https://github.com/dora-rs/dora/blob/main/examples/cmake-dataflow)                             | Example using CMake                     | ![License](https://img.shields.io/github/last-commit/dora-rs/dora?path=examples%2Fcmake-dataflow\u0026label=%20)          |\n| Tutorial  | [C Example](https://github.com/dora-rs/dora/blob/main/examples/c-dataflow)                                     | Example with C node                     | ![License](https://img.shields.io/github/last-commit/dora-rs/dora?path=examples%2Fc-dataflow\u0026label=%20)              |\n| Tutorial  | [CUDA Example](https://github.com/dora-rs/dora/blob/main/examples/cuda-benchmark)                              | Example using CUDA Zero Copy            | ![License](https://img.shields.io/github/last-commit/dora-rs/dora?path=examples%2Fcuda-benchmark\u0026label=%20)          |\n| Tutorial  | [C++ Example](https://github.com/dora-rs/dora/blob/main/examples/c++-dataflow)                                 | Example with C++ node                   | ![License](https://img.shields.io/github/last-commit/dora-rs/dora?path=examples%2Fc%2b%2b-dataflow\u0026label=%20)        |\n| Tutorial  | [Python Dataflow Builder Examples](https://github.com/dora-rs/dora/blob/main/examples/python-dataflow-builder) | Examples using the new Pythonic API.    | ![License](https://img.shields.io/github/last-commit/dora-rs/dora?path=examples%2Fpython-dataflow-builder\u0026label=%20) |\n\n=\n\n## Getting Started\n\n### Installation\n\n```bash\npip install dora-rs-cli\n```\n\n\u003cdetails close\u003e\n\u003csummary\u003e\u003cb\u003eAdditional installation methods\u003c/b\u003e\u003c/summary\u003e\n\nInstall dora with our standalone installers, or from [crates.io](https://crates.io/crates/dora-cli):\n\n### With cargo\n\n```bash\ncargo install dora-cli\n```\n\n### With Github release for macOS and Linux\n\n```bash\ncurl --proto '=https' --tlsv1.2 -LsSf https://github.com/dora-rs/dora/releases/latest/download/dora-cli-installer.sh | sh\n```\n\n### With Github release for Windows\n\n```powershell\npowershell -ExecutionPolicy ByPass -c \"irm https://github.com/dora-rs/dora/releases/latest/download/dora-cli-installer.ps1 | iex\"\n```\n\n### With Source\n\n```bash\ngit clone https://github.com/dora-rs/dora.git\ncd dora\ncargo build --release -p dora-cli\nPATH=$PATH:$(pwd)/target/release\n```\n\n\u003c/details\u003e\n\n### Run\n\n- Run the yolo python example:\n\n```bash\n## Create a virtual environment\nuv venv --seed -p 3.11\n\n## Install nodes dependencies of a remote graph\ndora build https://raw.githubusercontent.com/dora-rs/dora/refs/heads/main/examples/python-dataflow/dataflow.yml --uv\n\n## Run yolo graph\ndora run dataflow.yml --uv\n```\n\u003e Make sure to have a webcam\n\nTo stop your dataflow, you can use \u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003ec\u003c/kbd\u003e\n\n- To understand what is happening, you can look at the dataflow with:\n\n```bash\ncat dataflow.yml\n```\n\n- Resulting in:\n\n```yaml\nnodes:\n  - id: camera\n    build: pip install opencv-video-capture\n    path: opencv-video-capture\n    inputs:\n      tick: dora/timer/millis/20\n    outputs:\n      - image\n    env:\n      CAPTURE_PATH: 0\n      IMAGE_WIDTH: 640\n      IMAGE_HEIGHT: 480\n\n  - id: object-detection\n    build: pip install dora-yolo\n    path: dora-yolo\n    inputs:\n      image: camera/image\n    outputs:\n      - bbox\n\n  - id: plot\n    build: pip install dora-rerun\n    path: dora-rerun\n    inputs:\n      image: camera/image\n      boxes2d: object-detection/bbox\n```\n\n- In the above example, we can understand that the camera is sending image to both the rerun viewer as well as a yolo model that generates bounding box that is visualized within rerun.\n\n### Documentation\n\nThe full documentation is available on [our website](https://dora-rs.ai/).\nA lot of guides are available on [this section](https://dora-rs.ai/docs/guides/) of our website.\n\n## What is Dora? And what features does Dora offer?\n\n**D**ataflow-**O**riented **R**obotic **A**rchitecture (`dora-rs`) is a framework that makes creation of robotic applications fast and simple.\n\n`dora-rs` implements a declarative dataflow paradigm where tasks are split between nodes isolated as individual processes.\n\nThe dataflow paradigm has the advantage of creating an abstraction layer that makes robotic applications modular and easily configurable.\n\n### TCP Communication and Shared Memory\n\nCommunication between nodes is handled with shared memory on a same machine and TCP on distributed machines. Our shared memory implementation tracks messages across processes and discards them when obsolete. Shared memory slots are cached to avoid new memory allocation.\n\n### Arrow Message Format\n\nNodes communicate with Apache Arrow Data Format.\n\n[Apache Arrow](https://github.com/apache/arrow-rs) is a universal memory format for flat and hierarchical data. The Arrow memory format supports zero-copy reads for lightning-fast data access without serialization overhead. It defines a C data interface without any build-time or link-time dependency requirement, that means that `dora-rs` has **no compilation step** beyond the native compiler of your favourite language.\n\n### Opentelemetry\n\ndora-rs uses Opentelemetry to record all your logs, metrics and traces. This means that the data and telemetry can be linked using a shared abstraction.\n\n[Opentelemetry](https://opentelemetry.io/) is an open source observability standard that makes dora-rs telemetry collectable by most backends such as elasticsearch, prometheus, Datadog...\n\nOpentelemetry is language independent, backend agnostic, and easily collect distributed data, making it perfect for dora-rs applications.\n\n### ROS2 Bridge\n\n**Note**: this feature is marked as unstable.\n\n- Compilation Free Message passing to ROS 2\n- Automatic conversion ROS 2 Message \u003c-\u003e Arrow Array\n\n```python\nimport pyarrow as pa\n\n# Configuration Boilerplate...\nturtle_twist_writer = ...\n\n## Arrow Based ROS2 Twist Message\n## which does not require ROS2 import\nmessage = pa.array([{\n            \"linear\": {\n                \"x\": 1,\n            },\n            \"angular\": {\n                \"z\": 1\n            },\n        }])\n\nturtle_twist_writer.publish(message)\n```\n\n\u003e You might want to use ChatGPT to write the Arrow Formatting: https://chat.openai.com/share/4eec1c6d-dbd2-46dc-b6cd-310d2895ba15\n\n## Contributing\n\nWe are passionate about supporting contributors of all levels of experience and would love to see\nyou get involved in the project. See the\n[contributing guide](https://github.com/dora-rs/dora/blob/main/CONTRIBUTING.md) to get started.\n\n## Discussions\n\nOur main communication channels are:\n\n- [Our Discord server](https://discord.gg/6eMGGutkfE)\n- [Our Github Project Discussion](https://github.com/orgs/dora-rs/discussions)\n\nFeel free to reach out on any topic, issues or ideas.\n\nWe also have [a contributing guide](CONTRIBUTING.md).\n\n## License\n\nThis project is licensed under Apache-2.0. Check out [NOTICE.md](NOTICE.md) for more information.\n\n---\n\n## Further Resources 📚\n\n- [Zenoh Documentation](https://zenoh.io/docs/getting-started/first-app/)\n- [DORA Zenoh Discussion (GitHub Issue #512)](https://github.com/dora-rs/dora/issues/512)\n- [Dora Autoware Localization Demo](https://github.com/dora-rs/dora-autoware-localization-demo)\n\n```\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdora-rs%2Fdora","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdora-rs%2Fdora","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdora-rs%2Fdora/lists"}