Thanks for looking into it!
The main differences are:
| rclcpp_async | icey | |
|---|---|---|
| Type | Header-only | Compiled library |
| Dependencies | rclcpp only | rclcpp + Boost (Hana) + FMT |
| Style | Task<T> + async streams |
Promise<T, E> + reactive streams |
| Services | Yes | Yes |
| Actions | Yes | No |
| TF / Lifecycle | No | Yes |
Both use co_await and work with the standard single-threaded executor. icey has a broader scope with TF, lifecycle, and message_filters integration. rclcpp_async is more minimal but covers actions and provides coroutine-aware sync primitives (Event, Mutex, Channel) and Python asyncio-style create_task + co_await for spawning and joining background tasks.