{"id":14222488,"url":"https://github.com/eclipse-iceoryx/iceoryx2","last_synced_at":"2025-05-13T19:18:08.255Z","repository":{"id":212185116,"uuid":"730759265","full_name":"eclipse-iceoryx/iceoryx2","owner":"eclipse-iceoryx","description":"Eclipse iceoryx2™ - true zero-copy inter-process-communication in pure Rust","archived":false,"fork":false,"pushed_at":"2025-05-10T17:50:42.000Z","size":6430,"stargazers_count":1427,"open_issues_count":135,"forks_count":62,"subscribers_count":19,"default_branch":"main","last_synced_at":"2025-05-10T18:31:22.517Z","etag":null,"topics":["eclipse","iceoryx","inter-process-communication","ipc","middleware","publish-subscribe","pubsub","request-response","rpc","rust","shared-memory","zero-copy"],"latest_commit_sha":null,"homepage":"https://iceoryx.io","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/eclipse-iceoryx.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-12-12T16:00:07.000Z","updated_at":"2025-05-10T17:50:47.000Z","dependencies_parsed_at":"2024-01-26T23:28:47.283Z","dependency_job_id":"b6d63904-0011-4c81-aa54-370424cf620d","html_url":"https://github.com/eclipse-iceoryx/iceoryx2","commit_stats":null,"previous_names":["eclipse-iceoryx/iceoryx2"],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-iceoryx%2Ficeoryx2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-iceoryx%2Ficeoryx2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-iceoryx%2Ficeoryx2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-iceoryx%2Ficeoryx2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eclipse-iceoryx","download_url":"https://codeload.github.com/eclipse-iceoryx/iceoryx2/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254010830,"owners_count":21999004,"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":["eclipse","iceoryx","inter-process-communication","ipc","middleware","publish-subscribe","pubsub","request-response","rpc","rust","shared-memory","zero-copy"],"created_at":"2024-08-19T19:02:05.595Z","updated_at":"2025-05-13T19:18:08.233Z","avatar_url":"https://github.com/eclipse-iceoryx.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"\u003c!-- markdownlint-disable --\u003e\n\n[![CI](https://github.com/eclipse-iceoryx/iceoryx2/workflows/CI/badge.svg)](https://github.com/eclipse-iceoryx/iceoryx2/actions/workflows/build-test.yml?query=branch%3Amain++)\n[![Cirrus CI](https://img.shields.io/cirrus/github/eclipse-iceoryx/iceoryx2/main?label=Cirrus%20CI)](https://cirrus-ci.com/github/eclipse-iceoryx/iceoryx2/main)\n[![Codecov](https://codecov.io/gh/eclipse-iceoryx/iceoryx2/branch/main/graph/badge.svg?branch=main)](https://codecov.io/gh/eclipse-iceoryx/iceoryx2?branch=main)\n[![Benchmarks](https://img.shields.io/badge/Benchmarks-gray)](benchmarks/README.md)\n[![Changelog](https://img.shields.io/badge/Changelog-gray)](CHANGELOG.md)\n[![Crates.io](https://img.shields.io/crates/v/iceoryx2?color=blue)](https://crates.io/crates/iceoryx2)\n[![Examples](https://img.shields.io/badge/Examples-gray)](examples/)\n[![FAQ](https://img.shields.io/badge/FAQ-gray)](FAQ.md)\n[![Gitter](https://badges.gitter.im/eclipse-iceoryx/iceoryx.svg)](https://gitter.im/eclipse/iceoryx)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![Roadmap](https://img.shields.io/badge/Roadmap-gray)](ROADMAP.md)\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/eclipse-iceoryx/iceoryx2/assets/56729169/3230a125-19e5-4e98-a752-da026a086782\" width=\"50%\"\u003e\n\u003c/p\u003e\n\n\u003c!-- markdownlint-enable --\u003e\n\n# iceoryx2 - Zero-Copy Lock-Free IPC Purely Written In Rust\n\n* [iceoryx2 - Zero-Copy Lock-Free IPC Purely Written In Rust](#iceoryx2---zero-copy-lock-free-ipc-purely-written-in-rust)\n    * [Introduction](#introduction)\n    * [Documentation](#documentation)\n    * [Performance](#performance)\n        * [Comparision Of Mechanisms](#comparision-of-mechanisms)\n            * [Benchmark-System](#benchmark-system)\n        * [Comparision Of Architectures](#comparision-of-architectures)\n    * [Getting Started](#getting-started)\n        * [Publish Subscribe](#publish-subscribe)\n            * [publisher.rs](#publisherrs)\n            * [subscriber.rs](#subscriberrs)\n        * [Events](#events)\n            * [notifier.rs](#notifierrs)\n            * [listener.rs](#listenerrs)\n            * [listener.rs (grabbing all events at once)](#listenerrs-grabbing-all-events-at-once)\n        * [Custom Configuration](#custom-configuration)\n    * [Supported Platforms](#supported-platforms)\n    * [Language Bindings](#language-bindings)\n    * [Commercial Support](#commercial-support)\n    * [Thanks To All Contributors](#thanks-to-all-contributors)\n\n## Introduction\n\nWelcome to iceoryx2, the efficient, and ultra-low latency inter-process\ncommunication middleware. This library is designed to provide you with fast and\nreliable zero-copy and lock-free inter-process communication mechanisms.\n\nSo if you want to communicate efficiently between multiple processes or\napplications iceoryx2 is for you. With iceoryx2, you can:\n\n* Send huge amounts of data using a publish/subscribe, request/response,\n  pipeline (planned) or blackboard pattern (planned), making it ideal\n  for scenarios where large datasets need to be shared.\n* Exchange signals through events, enabling quick and reliable signaling between\n  processes.\n\niceoryx2 is based on a service-oriented architecture (SOA) and facilitates\nseamless inter-process communication (IPC).\n\nIt is all about providing a seamless experience for inter-process communication,\nfeaturing versatile messaging patterns. Whether you're diving into\npublish-subscribe, events, or the promise of upcoming features like\nrequest-response, pipelines, and blackboard, iceoryx2 has you covered.\n\nOne of the features of iceoryx2 is its consistently low transmission latency\nregardless of payload size, ensuring a predictable and reliable communication\nexperience.\n\niceoryx2's origins can be traced back to\n[iceoryx](https://github.com/eclipse-iceoryx/iceoryx). By overcoming past\ntechnical debts and refining the architecture, iceoryx2 enables the modularity\nwe've always desired.\n\nIn the near future, iceoryx2 is poised to support at least the same feature set\nand platforms as [iceoryx](https://github.com/eclipse-iceoryx/iceoryx), ensuring\na seamless transition and offering enhanced capabilities for your inter-process\ncommunication needs. So, if you're looking for lightning-fast, cross-platform\ncommunication that doesn't compromise on performance or modularity, iceoryx2 is\nyour answer.\n\n## Documentation\n\nThe documentation can be found at:\n\n| language |                          documentation link |\n| :------: | ------------------------------------------: |\n|    C     |           \u003chttps://iceoryx2.readthedocs.io\u003e |\n|   C++    |           \u003chttps://iceoryx2.readthedocs.io\u003e |\n|   Rust   | \u003chttps://docs.rs/iceoryx2/latest/iceoryx2/\u003e |\n\n## Performance\n\n### Comparision Of Mechanisms\n\n![benchmark of different mechanism](internal/plots/benchmark_mechanism.svg)\n\n#### Benchmark-System\n\n* **CPU:** Intel i7 13700h\n* **OS:** Linux 6.10.10-arch1-1 #1 SMP PREEMPT_DYNAMIC\n* **Compiler:**\n    * rustc 1.81.0\n    * gcc 14.2.1 20240910\n\n### Comparision Of Architectures\n\n![benchmark on different systems](internal/plots/benchmark_architecture.svg)\n\n## Getting Started\n\n### Publish Subscribe\n\nThis minimal example showcases a publisher sending the number 1234 every second,\nwhile a subscriber efficiently receives and prints the data.\n\n#### publisher.rs\n\n```rust\nuse core::time::Duration;\nuse iceoryx2::prelude::*;\n\nconst CYCLE_TIME: Duration = Duration::from_secs(1);\n\nfn main() -\u003e Result\u003c(), Box\u003cdyn std::error::Error\u003e\u003e {\n    let node = NodeBuilder::new().create::\u003cipc::Service\u003e()?;\n\n    let service = node.service_builder(\u0026\"My/Funk/ServiceName\".try_into()?)\n        .publish_subscribe::\u003cusize\u003e()\n        .open_or_create()?;\n\n    let publisher = service.publisher_builder().create()?;\n\n    while node.wait(CYCLE_TIME).is_ok() {\n        let sample = publisher.loan_uninit()?;\n        let sample = sample.write_payload(1234);\n        sample.send()?;\n    }\n\n    Ok(())\n}\n```\n\n#### subscriber.rs\n\n```rust\nuse core::time::Duration;\nuse iceoryx2::prelude::*;\n\nconst CYCLE_TIME: Duration = Duration::from_secs(1);\n\nfn main() -\u003e Result\u003c(), Box\u003cdyn std::error::Error\u003e\u003e {\n    let node = NodeBuilder::new().create::\u003cipc::Service\u003e()?;\n\n    let service = node.service_builder(\u0026\"My/Funk/ServiceName\".try_into()?)\n        .publish_subscribe::\u003cusize\u003e()\n        .open_or_create()?;\n\n    let subscriber = service.subscriber_builder().create()?;\n\n    while node.wait(CYCLE_TIME).is_ok() {\n        while let Some(sample) = subscriber.receive()? {\n            println!(\"received: {:?}\", *sample);\n        }\n    }\n\n    Ok(())\n}\n```\n\nThis example is a simplified version of the\n[publish-subscribe example](examples/rust/publish_subscribe/). You can execute\nit by opening two terminals and calling:\n\n**Terminal 1:**\n\n```sh\ncargo run --example publish_subscribe_publisher\n```\n\n**Terminal 2:**\n\n```sh\ncargo run --example publish_subscribe_subscriber\n```\n\n### Request Response\n\nThis example showcases a client sending a request with the number 123 every\nsecond, while a server responds with the number 456 as soon as it receives\nthe request.\n\n#### client.rs\n\n```rust\nuse core::time::Duration;\nuse iceoryx2::prelude::*;\n\nconst CYCLE_TIME: Duration = Duration::from_secs(1);\n\nfn main() -\u003e Result\u003c(), Box\u003cdyn core::error::Error\u003e\u003e {\n    let node = NodeBuilder::new().create::\u003cipc::Service\u003e()?;\n\n    let service = node\n        .service_builder(\u0026\"My/Funk/ServiceName\".try_into()?)\n        .request_response::\u003cu64, u64\u003e()\n        .open_or_create()?;\n\n    let client = service.client_builder().create()?;\n\n    // send first request\n    let request = client.loan_uninit()?;\n    let request = request.write_payload(1234);\n    let mut pending_response = request.send()?;\n\n    while node.wait(CYCLE_TIME).is_ok() {\n        // acquire all responses to our request from our buffer that were sent by the servers\n        while let Some(response) = pending_response.receive()? {\n            println!(\"  received response: {:?}\", *response);\n        }\n\n        // send another request\n        let request = client.loan_uninit()?;\n        let request = request.write_payload(123);\n        pending_response = request.send()?;\n   }\n\n    Ok(())\n}\n```\n\n#### server.rs\n\n```rust\nuse core::time::Duration;\nuse iceoryx2::prelude::*;\n\nconst CYCLE_TIME: Duration = Duration::from_millis(100);\n\nfn main() -\u003e Result\u003c(), Box\u003cdyn core::error::Error\u003e\u003e {\n    let node = NodeBuilder::new().create::\u003cipc::Service\u003e()?;\n\n    let service = node\n        .service_builder(\u0026\"My/Funk/ServiceName\".try_into()?)\n        .request_response::\u003cu64, u64\u003e()\n        .open_or_create()?;\n\n    let server = service.server_builder().create()?;\n\n    while node.wait(CYCLE_TIME).is_ok() {\n        while let Some(active_request) = server.receive()? {\n            let response = active_request.loan_uninit()?;\n            let response = response.write_payload(456);\n            response.send()?;\n        }\n    }\n\n    Ok(())\n}\n```\n\nThis example is a simplified version of the\n[request response example](examples/rust/request_response/). You can execute it\nby opening two terminals and calling:\n\n**Terminal 1:**\n\n```sh\ncargo run --example request_response_client\n```\n\n**Terminal 2:**\n\n```sh\ncargo run --example request_response_server\n```\n\n### Events\n\nThis minimal example showcases how push-notifications can be realized by using\nservices with event messaging pattern between two processes. The `listener.rs`\nhereby waits for a notification from the `notifier.rs`.\n\n#### notifier.rs\n\n```rust\nuse core::time::Duration;\nuse iceoryx2::prelude::*;\n\nconst CYCLE_TIME: Duration = Duration::from_secs(1);\n\nfn main() -\u003e Result\u003c(), Box\u003cdyn std::error::Error\u003e\u003e {\n    let node = NodeBuilder::new().create::\u003cipc::Service\u003e()?;\n\n    let event = node.service_builder(\u0026\"MyEventName\".try_into()?)\n        .event()\n        .open_or_create()?;\n\n    let notifier = event.notifier_builder().create()?;\n\n    let id = EventId::new(12);\n    while node.wait(CYCLE_TIME).is_ok() {\n        notifier.notify_with_custom_event_id(id)?;\n\n        println!(\"Trigger event with id {:?} ...\", id);\n    }\n\n    Ok(())\n}\n```\n\n#### listener.rs\n\n```rust\nuse core::time::Duration;\nuse iceoryx2::prelude::*;\n\nconst CYCLE_TIME: Duration = Duration::from_secs(1);\n\nfn main() -\u003e Result\u003c(), Box\u003cdyn std::error::Error\u003e\u003e {\n    let node = NodeBuilder::new().create::\u003cipc::Service\u003e()?;\n\n    let event = node.service_builder(\u0026\"MyEventName\".try_into()?)\n        .event()\n        .open_or_create()?;\n\n    let listener = event.listener_builder().create()?;\n\n    while node.wait(Duration::ZERO).is_ok() {\n        if let Ok(Some(event_id)) = listener.timed_wait_one(CYCLE_TIME) {\n            println!(\"event was triggered with id: {:?}\", event_id);\n        }\n    }\n\n    Ok(())\n}\n```\n\n#### listener.rs (grabbing all events at once)\n\n```rust\nuse core::time::Duration;\nuse iceoryx2::prelude::*;\n\nconst CYCLE_TIME: Duration = Duration::from_secs(1);\n\nfn main() -\u003e Result\u003c(), Box\u003cdyn std::error::Error\u003e\u003e {\n    let node = NodeBuilder::new().create::\u003cipc::Service\u003e()?;\n\n    let event = node.service_builder(\u0026\"MyEventName\".try_into()?)\n        .event()\n        .open_or_create()?;\n\n    let listener = event.listener_builder().create()?;\n\n    while node.wait(Duration::ZERO).is_ok() {\n        listener.timed_wait_all(\n            |event_id| {\n                println!(\"event was triggered with id: {:?}\", event_id);\n            },\n            CYCLE_TIME,\n        )?;\n    }\n\n    Ok(())\n}\n```\n\nThis example is a simplified version of the\n[event example](examples/rust/event/). You can execute it by opening two\nterminals and calling:\n\n**Terminal 1:**\n\n```sh\ncargo run --example event_notifier\n```\n\n**Terminal 2:**\n\n```sh\ncargo run --example event_listener\n```\n\n### Custom Configuration\n\nIt is possible to configure default quality of service settings, paths and file\nsuffixes in a custom configuration file. For more details visit the\n[configuration directory](config/).\n\n## Supported Platforms\n\nThe support levels can be adjusted when required.\n\n| Operating System | State   | Current Support Level | Target Support Level |\n| ---------------- | :------ | :-------------------: | -------------------: |\n| Android          | planned |           -           |               tier 1 |\n| FreeBSD          | done    |        tier 2         |               tier 1 |\n| FreeRTOS         | planned |           -           |               tier 2 |\n| iOS              | planned |           -           |               tier 2 |\n| Linux (x86_64)   | done    |        tier 2         |               tier 1 |\n| Linux (aarch64)  | done    |        tier 2         |               tier 1 |\n| Linux (32-bit)   | done    |        tier 2         |               tier 1 |\n| Mac OS           | done    |        tier 2         |               tier 2 |\n| QNX              | planned |           -           |               tier 1 |\n| VxWorks          | planned |           -           |               tier 1 |\n| WatchOS          | planned |           -           |               tier 2 |\n| Windows          | done    |        tier 2         |               tier 2 |\n\n* **tier 1** - All safety and security features are working.\n* **tier 2** - Works with a restricted security and safety feature set.\n* **tier 3** - Work in progress. Might compile and run or not.\n\n## Language Bindings\n\n| Language |   State |\n| -------- | ------: |\n| C / C++  |    done |\n| Python   | planned |\n| Go       | planned |\n| C#       | planned |\n| Java     | planned |\n| Kotlin   | planned |\n| Lua      | planned |\n| Swift    | planned |\n| Zig      | planned |\n\n## Commercial Support\n\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\n\u003ctable width=\"100%\"\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"33%\"\u003e\n        \u003ca href=\"https://ekxide.io\"\u003e\n        \u003cimg src=\"https://github.com/eclipse-iceoryx/iceoryx2/assets/56729169/c3ce8370-6cef-4c31-8259-93ddaa61c43e\" alt=\"ekxide IO GmbH\"/\u003e\u003cbr /\u003e\n        \u003c/a\u003e\n        \u003ca href=\"mailto:info@ekxide.io\"\u003einfo@ekxide.io\u003c/a\u003e\n      \u003c/td\u003e\n      \u003ctd\u003e\n        \u003cul\u003e\n          \u003cli\u003ecommercial extensions and tooling\u003c/li\u003e\n          \u003cli\u003ecustom feature development\u003c/li\u003e\n          \u003cli\u003etraining and consulting\u003c/li\u003e\n          \u003cli\u003eintegration support\u003c/li\u003e\n          \u003cli\u003eengineering services around the iceoryx ecosystem\u003c/li\u003e\n        \u003c/ul\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n## Thanks To All Contributors\n\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\n          \u003ca href=\"https://github.com/elfenpiff\"\u003e\n          \u003cimg src=\"https://avatars.githubusercontent.com/u/56729169\" width=\"120px;\" alt=\"Christian »elfenpiff« Eltzschig\"/\u003e\u003cbr /\u003e\n          \u003csub\u003e\u003cb\u003eChristian »elfenpiff« Eltzschig\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\n          \u003ca href=\"https://github.com/elboberido\"\u003e\n          \u003cimg src=\"https://avatars.githubusercontent.com/u/56729607\" width=\"120px;\" alt=\"Mathias »elBoberido« Kraus\"/\u003e\u003cbr /\u003e\n          \u003csub\u003e\u003cb\u003eMathias »elBoberido« Kraus\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\n          \u003ca href=\"https://github.com/orecham\"\u003e\n          \u003cimg src=\"https://avatars.githubusercontent.com/u/8487595\" width=\"120px;\" alt=\"»orecham«\"/\u003e\u003cbr /\u003e\n          \u003csub\u003e\u003cb\u003e»orecham«\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\n          \u003ca href=\"https://github.com/FerdinandSpitzschnueffler\"\u003e\n          \u003cimg src=\"https://avatars.githubusercontent.com/u/61289993\" width=\"120px;\" alt=\"»FerdinandSpitzschnueffler«\"/\u003e\u003cbr /\u003e\n          \u003csub\u003e\u003cb\u003e»FerdinandSpitzschnueffler«\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\n          \u003ca href=\"https://github.com/xieyuschen\"\u003e\n          \u003cimg src=\"https://avatars.githubusercontent.com/u/52945328\" width=\"120px;\" alt=\"xieyuschen\"/\u003e\u003cbr /\u003e\n          \u003csub\u003e\u003cb\u003e»xieyuschen«\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\n          \u003ca href=\"https://github.com/brosier01\"\u003e\n          \u003cimg src=\"https://avatars.githubusercontent.com/u/71630425\" width=\"120px;\" alt=\"Bruce »brosier01« Rosier\"/\u003e\u003cbr /\u003e\n          \u003csub\u003e\u003cb\u003eBruce »brosier01« Rosier\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\n          \u003ca href=\"https://github.com/hanky-qorix\"\u003e\n          \u003cimg src=\"https://avatars.githubusercontent.com/u/195170928\" width=\"120px;\" alt=\"\u003e»hanky«\"/\u003e\u003cbr /\u003e\n          \u003csub\u003e\u003cb\u003e»hanky«\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feclipse-iceoryx%2Ficeoryx2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feclipse-iceoryx%2Ficeoryx2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feclipse-iceoryx%2Ficeoryx2/lists"}