From a2394b9b33fb0911be18f8ba18e72c7d8d3cd6a2 Mon Sep 17 00:00:00 2001
From: GitHub Action <action@github.com>
Date: Fri, 3 Jan 2025 19:55:02 +0000
Subject: [PATCH] Add build files 2025-01-03-1955

---
 .github/workflows/osx.yml                     | 1472 +++++++++++++++++
 activate.bat                                  |   15 +
 activate.ps1                                  |   16 +
 activate.sh                                   |   26 +
 bld_ament_cmake.bat                           |   52 +
 bld_ament_python.bat                          |   25 +
 bld_catkin.bat                                |   81 +
 bld_catkin_merge.bat                          |   34 +
 bld_colcon_merge.bat                          |   38 +
 build_ament_cmake.sh                          |   84 +
 build_ament_python.sh                         |   19 +
 build_catkin.sh                               |  131 ++
 buildorder.txt                                |  268 +++
 deactivate.bat                                |   18 +
 deactivate.ps1                                |   18 +
 deactivate.sh                                 |   21 +
 .../ros-jazzy-action-msgs/bld_ament_cmake.bat |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-action-msgs/recipe.yaml     |   94 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   94 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   88 +
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 .../ros-jazzy-action-tutorials-py/recipe.yaml |   91 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-actionlib-msgs/recipe.yaml  |   91 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-actuator-msgs/recipe.yaml   |   90 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-ament-cmake-ros/recipe.yaml |   95 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-ament-index-cpp/recipe.yaml |   87 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-ament-lint-common/recipe.yaml   |   94 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-builtin-interfaces/recipe.yaml  |   87 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-class-loader/recipe.yaml    |   94 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-common-interfaces/recipe.yaml   |   98 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   89 +
 .../ros-jazzy-composition/bld_ament_cmake.bat |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-composition/recipe.yaml     |  103 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   91 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   90 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   90 +
 .../ros-jazzy-cv-bridge/bld_ament_cmake.bat   |   52 +
 .../ros-jazzy-cv-bridge/build_ament_cmake.sh  |   84 +
 recipes/ros-jazzy-cv-bridge/recipe.yaml       |  115 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   99 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-demo-nodes-cpp/recipe.yaml  |  111 ++
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-demo-nodes-py/recipe.yaml   |   93 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  110 ++
 recipes/ros-jazzy-desktop/bld_ament_cmake.bat |   52 +
 .../ros-jazzy-desktop/build_ament_cmake.sh    |   84 +
 recipes/ros-jazzy-desktop/recipe.yaml         |  129 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-diagnostic-msgs/recipe.yaml |   93 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-dummy-map-server/recipe.yaml    |   91 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-dummy-robot-bringup/recipe.yaml |   93 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-dummy-sensors/recipe.yaml   |   91 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-example-interfaces/recipe.yaml  |   86 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   92 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   92 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   90 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   92 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   90 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   90 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   92 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   88 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   90 +
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 .../recipe.yaml                               |   90 +
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 .../recipe.yaml                               |   91 +
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 .../recipe.yaml                               |   90 +
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 .../recipe.yaml                               |   91 +
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 .../recipe.yaml                               |   90 +
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 .../recipe.yaml                               |   91 +
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 .../recipe.yaml                               |   90 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   86 +
 recipes/ros-jazzy-fastrtps/bld_catkin.bat     |   81 +
 recipes/ros-jazzy-fastrtps/build_catkin.sh    |  131 ++
 .../patch/ros-jazzy-fastrtps.patch            |   30 +
 recipes/ros-jazzy-fastrtps/recipe.yaml        |   94 ++
 .../bld_catkin.bat                            |   81 +
 .../build_catkin.sh                           |  131 ++
 .../recipe.yaml                               |   90 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-geometry-msgs/recipe.yaml   |   89 +
 .../ros-jazzy-geometry2/bld_ament_cmake.bat   |   52 +
 .../ros-jazzy-geometry2/build_ament_cmake.sh  |   84 +
 recipes/ros-jazzy-geometry2/recipe.yaml       |   95 ++
 .../ros-jazzy-gps-msgs/bld_ament_cmake.bat    |   52 +
 .../ros-jazzy-gps-msgs/build_ament_cmake.sh   |   84 +
 recipes/ros-jazzy-gps-msgs/recipe.yaml        |   88 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../patch/ros-jazzy-gz-cmake-vendor.patch     |    8 +
 recipes/ros-jazzy-gz-cmake-vendor/recipe.yaml |   94 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../patch/ros-jazzy-gz-common-vendor.patch    |   13 +
 .../ros-jazzy-gz-common-vendor/recipe.yaml    |  112 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-gz-fuel-tools-vendor.patch      |   15 +
 .../recipe.yaml                               |  117 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../patch/ros-jazzy-gz-gui-vendor.patch       |   15 +
 recipes/ros-jazzy-gz-gui-vendor/recipe.yaml   |  130 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../patch/ros-jazzy-gz-math-vendor.patch      |   13 +
 recipes/ros-jazzy-gz-math-vendor/recipe.yaml  |  104 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../patch/ros-jazzy-gz-msgs-vendor.patch      |   13 +
 recipes/ros-jazzy-gz-msgs-vendor/recipe.yaml  |  106 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../patch/ros-jazzy-gz-physics-vendor.patch   |   13 +
 .../ros-jazzy-gz-physics-vendor/recipe.yaml   |  113 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../patch/ros-jazzy-gz-plugin-vendor.patch    |   13 +
 .../ros-jazzy-gz-plugin-vendor/recipe.yaml    |   99 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../patch/ros-jazzy-gz-rendering-vendor.patch |   13 +
 .../ros-jazzy-gz-rendering-vendor/recipe.yaml |  117 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../patch/ros-jazzy-gz-sensors-vendor.patch   |   13 +
 .../ros-jazzy-gz-sensors-vendor/recipe.yaml   |  109 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../patch/ros-jazzy-gz-sim-vendor.patch       |   13 +
 recipes/ros-jazzy-gz-sim-vendor/recipe.yaml   |  156 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-gz-tools-vendor/recipe.yaml |   94 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../patch/ros-jazzy-gz-transport-vendor.patch |   13 +
 .../ros-jazzy-gz-transport-vendor/recipe.yaml |  124 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../patch/ros-jazzy-gz-utils-vendor.patch     |   13 +
 recipes/ros-jazzy-gz-utils-vendor/recipe.yaml |   95 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-image-geometry/recipe.yaml  |  106 ++
 .../ros-jazzy-image-tools/bld_ament_cmake.bat |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-image-tools/recipe.yaml     |  116 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   88 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-image-transport/recipe.yaml |   97 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-interactive-markers/recipe.yaml |  107 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-intra-process-demo/recipe.yaml  |  111 ++
 recipes/ros-jazzy-joy/bld_ament_cmake.bat     |   52 +
 recipes/ros-jazzy-joy/build_ament_cmake.sh    |   84 +
 recipes/ros-jazzy-joy/recipe.yaml             |   94 ++
 .../ros-jazzy-kdl-parser/bld_ament_cmake.bat  |   52 +
 .../ros-jazzy-kdl-parser/build_ament_cmake.sh |   84 +
 recipes/ros-jazzy-kdl-parser/recipe.yaml      |   95 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-keyboard-handler/recipe.yaml    |   87 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-laser-geometry/recipe.yaml  |  104 ++
 .../ros-jazzy-launch-ros/bld_ament_python.bat |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-launch-ros/recipe.yaml      |  104 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   91 +
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 .../ros-jazzy-launch-testing-ros/recipe.yaml  |   93 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  102 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-libyaml-vendor/recipe.yaml  |   95 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-lifecycle-msgs/recipe.yaml  |   88 +
 .../ros-jazzy-lifecycle/bld_ament_cmake.bat   |   52 +
 .../ros-jazzy-lifecycle/build_ament_cmake.sh  |   84 +
 recipes/ros-jazzy-lifecycle/recipe.yaml       |   95 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-logging-demo/recipe.yaml    |  102 ++
 .../ros-jazzy-map-msgs/bld_ament_cmake.bat    |   52 +
 .../ros-jazzy-map-msgs/build_ament_cmake.sh   |   84 +
 recipes/ros-jazzy-map-msgs/recipe.yaml        |   93 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-message-filters/recipe.yaml |   99 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-mimick-vendor/recipe.yaml   |   88 +
 .../ros-jazzy-nav-msgs/bld_ament_cmake.bat    |   52 +
 .../ros-jazzy-nav-msgs/build_ament_cmake.sh   |   84 +
 recipes/ros-jazzy-nav-msgs/recipe.yaml        |   93 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-orocos-kdl-vendor/recipe.yaml   |   93 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-pcl-conversions/recipe.yaml |  114 ++
 .../ros-jazzy-pcl-msgs/bld_ament_cmake.bat    |   52 +
 .../ros-jazzy-pcl-msgs/build_ament_cmake.sh   |   84 +
 recipes/ros-jazzy-pcl-msgs/recipe.yaml        |   91 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-pendulum-msgs/recipe.yaml   |   88 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   95 ++
 .../ros-jazzy-pluginlib/bld_ament_cmake.bat   |   52 +
 .../ros-jazzy-pluginlib/build_ament_cmake.sh  |   84 +
 recipes/ros-jazzy-pluginlib/recipe.yaml       |   95 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  100 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-python-cmake-module/recipe.yaml |   86 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../patch/ros-jazzy-python-qt-binding.patch   |  254 +++
 .../ros-jazzy-python-qt-binding/recipe.yaml   |  110 ++
 .../ros-jazzy-qt-dotgraph/bld_ament_cmake.bat |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-qt-dotgraph/recipe.yaml     |   90 +
 .../ros-jazzy-qt-gui-cpp/bld_ament_cmake.bat  |   52 +
 .../ros-jazzy-qt-gui-cpp/build_ament_cmake.sh |   84 +
 .../patch/ros-jazzy-qt-gui-cpp.patch          |   61 +
 recipes/ros-jazzy-qt-gui-cpp/recipe.yaml      |  118 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-qt-gui-py-common/recipe.yaml    |   88 +
 recipes/ros-jazzy-qt-gui/bld_ament_cmake.bat  |   52 +
 recipes/ros-jazzy-qt-gui/build_ament_cmake.sh |   84 +
 recipes/ros-jazzy-qt-gui/recipe.yaml          |  109 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  104 ++
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 .../recipe.yaml                               |   91 +
 .../ros-jazzy-rcl-action/bld_ament_cmake.bat  |   52 +
 .../ros-jazzy-rcl-action/build_ament_cmake.sh |   84 +
 recipes/ros-jazzy-rcl-action/recipe.yaml      |  101 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-rcl-interfaces/recipe.yaml  |   90 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-rcl-lifecycle/recipe.yaml   |  101 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   89 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-rcl-logging-spdlog/recipe.yaml  |   97 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  101 ++
 recipes/ros-jazzy-rcl/bld_ament_cmake.bat     |   52 +
 recipes/ros-jazzy-rcl/build_ament_cmake.sh    |   84 +
 recipes/ros-jazzy-rcl/recipe.yaml             |  124 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-rclcpp-action/recipe.yaml   |  104 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-rclcpp-components/recipe.yaml   |   99 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-rclcpp-lifecycle/recipe.yaml    |  107 ++
 recipes/ros-jazzy-rclcpp/bld_ament_cmake.bat  |   52 +
 recipes/ros-jazzy-rclcpp/build_ament_cmake.sh |   84 +
 recipes/ros-jazzy-rclcpp/recipe.yaml          |  131 ++
 recipes/ros-jazzy-rclpy/bld_ament_cmake.bat   |   52 +
 recipes/ros-jazzy-rclpy/build_ament_cmake.sh  |   84 +
 .../patch/ros-jazzy-rclpy.osx.patch           |   13 +
 recipes/ros-jazzy-rclpy/recipe.yaml           |  135 ++
 .../ros-jazzy-rcpputils/bld_ament_cmake.bat   |   52 +
 .../ros-jazzy-rcpputils/build_ament_cmake.sh  |   84 +
 recipes/ros-jazzy-rcpputils/recipe.yaml       |   97 ++
 recipes/ros-jazzy-rcutils/bld_ament_cmake.bat |   52 +
 .../ros-jazzy-rcutils/build_ament_cmake.sh    |   84 +
 recipes/ros-jazzy-rcutils/recipe.yaml         |   96 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-resource-retriever/recipe.yaml  |   96 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  114 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-rmw-connextdds/recipe.yaml  |   90 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-rmw-cyclonedds-cpp/recipe.yaml  |  109 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-rmw-dds-common/recipe.yaml  |  101 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-rmw-fastrtps-cpp/recipe.yaml    |  121 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  113 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  112 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   87 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-rmw-implementation/recipe.yaml  |  105 ++
 recipes/ros-jazzy-rmw/bld_ament_cmake.bat     |   52 +
 recipes/ros-jazzy-rmw/build_ament_cmake.sh    |   84 +
 recipes/ros-jazzy-rmw/recipe.yaml             |   95 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  111 ++
 .../ros-jazzy-ros-base/bld_ament_cmake.bat    |   52 +
 .../ros-jazzy-ros-base/build_ament_cmake.sh   |   84 +
 recipes/ros-jazzy-ros-base/recipe.yaml        |   90 +
 .../ros-jazzy-ros-core/bld_ament_cmake.bat    |   52 +
 .../ros-jazzy-ros-core/build_ament_cmake.sh   |   84 +
 recipes/ros-jazzy-ros-core/recipe.yaml        |  116 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-ros-gz-bridge/recipe.yaml   |  128 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../patch/ros-jazzy-ros-gz-image.patch        |   14 +
 recipes/ros-jazzy-ros-gz-image/recipe.yaml    |  101 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-ros-gz-interfaces/recipe.yaml   |   95 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-ros-gz-sim-demos/recipe.yaml    |   99 ++
 .../ros-jazzy-ros-gz-sim/bld_ament_cmake.bat  |   52 +
 .../ros-jazzy-ros-gz-sim/build_ament_cmake.sh |   84 +
 recipes/ros-jazzy-ros-gz-sim/recipe.yaml      |  123 ++
 recipes/ros-jazzy-ros-gz/bld_ament_cmake.bat  |   52 +
 recipes/ros-jazzy-ros-gz/build_ament_cmake.sh |   84 +
 recipes/ros-jazzy-ros-gz/recipe.yaml          |   90 +
 .../ros-jazzy-ros-testing/bld_ament_cmake.bat |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-ros-testing/recipe.yaml     |   94 ++
 .../ros-jazzy-ros2action/bld_ament_python.bat |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-ros2action/recipe.yaml      |   99 ++
 .../ros-jazzy-ros2bag/bld_ament_python.bat    |   25 +
 .../ros-jazzy-ros2bag/build_ament_python.sh   |   19 +
 recipes/ros-jazzy-ros2bag/recipe.yaml         |   97 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  103 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   87 +
 .../ros-jazzy-ros2cli/bld_ament_python.bat    |   25 +
 .../ros-jazzy-ros2cli/build_ament_python.sh   |   19 +
 recipes/ros-jazzy-ros2cli/recipe.yaml         |   96 ++
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-ros2component/recipe.yaml   |   99 ++
 .../ros-jazzy-ros2doctor/bld_ament_python.bat |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-ros2doctor/recipe.yaml      |  104 ++
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-ros2interface/recipe.yaml   |   99 ++
 .../ros-jazzy-ros2launch/bld_ament_python.bat |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-ros2launch/recipe.yaml      |  102 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   90 +
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-ros2lifecycle/recipe.yaml   |  100 ++
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-ros2multicast/recipe.yaml   |   91 +
 .../ros-jazzy-ros2node/bld_ament_python.bat   |   25 +
 .../ros-jazzy-ros2node/build_ament_python.sh  |   19 +
 recipes/ros-jazzy-ros2node/recipe.yaml        |   98 ++
 .../ros-jazzy-ros2param/bld_ament_python.bat  |   25 +
 .../ros-jazzy-ros2param/build_ament_python.sh |   19 +
 recipes/ros-jazzy-ros2param/recipe.yaml       |   99 ++
 .../ros-jazzy-ros2pkg/bld_ament_python.bat    |   25 +
 .../ros-jazzy-ros2pkg/build_ament_python.sh   |   19 +
 recipes/ros-jazzy-ros2pkg/recipe.yaml         |   98 ++
 .../ros-jazzy-ros2run/bld_ament_python.bat    |   25 +
 .../ros-jazzy-ros2run/build_ament_python.sh   |   19 +
 recipes/ros-jazzy-ros2run/recipe.yaml         |   92 ++
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-ros2service/recipe.yaml     |   99 ++
 .../ros-jazzy-ros2test/bld_ament_python.bat   |   25 +
 .../ros-jazzy-ros2test/build_ament_python.sh  |   19 +
 recipes/ros-jazzy-ros2test/recipe.yaml        |   99 ++
 .../ros-jazzy-ros2topic/bld_ament_python.bat  |   25 +
 .../ros-jazzy-ros2topic/build_ament_python.sh |   19 +
 recipes/ros-jazzy-ros2topic/recipe.yaml       |  103 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   97 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-rosbag2-compression/recipe.yaml |   98 ++
 .../ros-jazzy-rosbag2-cpp/bld_ament_cmake.bat |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-rosbag2-cpp/recipe.yaml     |  117 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-rosbag2-interfaces/recipe.yaml  |   90 +
 .../ros-jazzy-rosbag2-py/bld_ament_cmake.bat  |   52 +
 .../ros-jazzy-rosbag2-py/build_ament_cmake.sh |   84 +
 .../patch/ros-jazzy-rosbag2-py.osx.patch      |   74 +
 recipes/ros-jazzy-rosbag2-py/recipe.yaml      |  114 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   86 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  103 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  102 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-rosbag2-storage/recipe.yaml |   99 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-rosbag2-test-common/recipe.yaml |   94 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   87 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-rosbag2-tests/recipe.yaml   |  102 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-rosbag2-transport/recipe.yaml   |  116 ++
 recipes/ros-jazzy-rosbag2/bld_ament_cmake.bat |   52 +
 .../ros-jazzy-rosbag2/build_ament_cmake.sh    |   84 +
 recipes/ros-jazzy-rosbag2/recipe.yaml         |   94 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-rosgraph-msgs/recipe.yaml   |   89 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-rosidl-adapter/recipe.yaml  |   91 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-rosidl-cmake/recipe.yaml    |   91 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  110 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-rosidl-core-runtime/recipe.yaml |  104 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   94 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   90 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   93 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   88 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-rosidl-generator-c/recipe.yaml  |  102 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  100 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-rosidl-generator-py.osx.patch   |   69 +
 .../ros-jazzy-rosidl-generator-py/recipe.yaml |  123 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   92 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-rosidl-parser/recipe.yaml   |   90 +
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-rosidl-pycommon/recipe.yaml |   89 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-rosidl-runtime-c/recipe.yaml    |   93 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-rosidl-runtime-cpp/recipe.yaml  |   91 +
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 .../ros-jazzy-rosidl-runtime-py/recipe.yaml   |   95 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  105 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  109 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  114 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  114 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   87 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  101 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  106 ++
 .../ros-jazzy-rqt-action/bld_ament_python.bat |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-rqt-action/recipe.yaml      |   90 +
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-rqt-bag-plugins/recipe.yaml |   96 ++
 .../ros-jazzy-rqt-bag/bld_ament_python.bat    |   25 +
 .../ros-jazzy-rqt-bag/build_ament_python.sh   |   19 +
 recipes/ros-jazzy-rqt-bag/recipe.yaml         |   91 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-rqt-common-plugins/recipe.yaml  |  100 ++
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-rqt-console/recipe.yaml     |   92 ++
 .../ros-jazzy-rqt-graph/bld_ament_python.bat  |   25 +
 .../ros-jazzy-rqt-graph/build_ament_python.sh |   19 +
 recipes/ros-jazzy-rqt-graph/recipe.yaml       |   90 +
 .../ros-jazzy-rqt-gui-cpp/bld_ament_cmake.bat |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-rqt-gui-cpp/recipe.yaml     |  102 ++
 .../ros-jazzy-rqt-gui-py/bld_ament_python.bat |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-rqt-gui-py/recipe.yaml      |   90 +
 .../ros-jazzy-rqt-gui/bld_ament_python.bat    |   25 +
 .../ros-jazzy-rqt-gui/build_ament_python.sh   |   19 +
 recipes/ros-jazzy-rqt-gui/recipe.yaml         |   92 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-rqt-image-view/recipe.yaml  |  112 ++
 .../ros-jazzy-rqt-msg/bld_ament_python.bat    |   25 +
 .../ros-jazzy-rqt-msg/build_ament_python.sh   |   19 +
 recipes/ros-jazzy-rqt-msg/recipe.yaml         |   95 ++
 .../ros-jazzy-rqt-plot/bld_ament_python.bat   |   25 +
 .../ros-jazzy-rqt-plot/build_ament_python.sh  |   19 +
 recipes/ros-jazzy-rqt-plot/recipe.yaml        |   96 ++
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-rqt-publisher/recipe.yaml   |   94 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-rqt-py-common/recipe.yaml   |  105 ++
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-rqt-py-console/recipe.yaml  |   92 ++
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-rqt-reconfigure/recipe.yaml |   97 ++
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 .../ros-jazzy-rqt-service-caller/recipe.yaml  |   88 +
 .../ros-jazzy-rqt-shell/bld_ament_python.bat  |   25 +
 .../ros-jazzy-rqt-shell/build_ament_python.sh |   19 +
 recipes/ros-jazzy-rqt-shell/recipe.yaml       |   91 +
 .../ros-jazzy-rqt-srv/bld_ament_python.bat    |   25 +
 .../ros-jazzy-rqt-srv/build_ament_python.sh   |   19 +
 recipes/ros-jazzy-rqt-srv/recipe.yaml         |   90 +
 .../ros-jazzy-rqt-topic/bld_ament_python.bat  |   25 +
 .../ros-jazzy-rqt-topic/build_ament_python.sh |   19 +
 recipes/ros-jazzy-rqt-topic/recipe.yaml       |   93 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   87 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-rviz-assimp-vendor/recipe.yaml  |   90 +
 .../ros-jazzy-rviz-common/bld_ament_cmake.bat |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-rviz-common/recipe.yaml     |  135 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  146 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../patch/ros-jazzy-rviz-ogre-vendor.patch    |   61 +
 .../ros-jazzy-rviz-ogre-vendor/recipe.yaml    |  119 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  109 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-rviz-rendering/recipe.yaml  |  118 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  123 ++
 recipes/ros-jazzy-rviz2/bld_ament_cmake.bat   |   52 +
 recipes/ros-jazzy-rviz2/build_ament_cmake.sh  |   84 +
 recipes/ros-jazzy-rviz2/recipe.yaml           |  112 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-sdformat-urdf/recipe.yaml   |  103 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../patch/ros-jazzy-sdformat-vendor.patch     |   13 +
 recipes/ros-jazzy-sdformat-vendor/recipe.yaml |  113 ++
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-sensor-msgs-py/recipe.yaml  |   91 +
 .../ros-jazzy-sensor-msgs/bld_ament_cmake.bat |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-sensor-msgs/recipe.yaml     |   96 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-service-msgs/recipe.yaml    |   90 +
 .../ros-jazzy-shape-msgs/bld_ament_cmake.bat  |   52 +
 .../ros-jazzy-shape-msgs/build_ament_cmake.sh |   84 +
 recipes/ros-jazzy-shape-msgs/recipe.yaml      |   89 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-spdlog-vendor/recipe.yaml   |   89 +
 .../ros-jazzy-sros2-cmake/bld_ament_cmake.bat |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-sros2-cmake/recipe.yaml     |   91 +
 recipes/ros-jazzy-sros2/bld_ament_python.bat  |   25 +
 recipes/ros-jazzy-sros2/build_ament_python.sh |   19 +
 recipes/ros-jazzy-sros2/recipe.yaml           |   98 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-statistics-msgs/recipe.yaml |   89 +
 .../ros-jazzy-std-msgs/bld_ament_cmake.bat    |   52 +
 .../ros-jazzy-std-msgs/build_ament_cmake.sh   |   84 +
 recipes/ros-jazzy-std-msgs/recipe.yaml        |   89 +
 .../ros-jazzy-std-srvs/bld_ament_cmake.bat    |   52 +
 .../ros-jazzy-std-srvs/build_ament_cmake.sh   |   84 +
 recipes/ros-jazzy-std-srvs/recipe.yaml        |   87 +
 .../ros-jazzy-stereo-msgs/bld_ament_cmake.bat |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-stereo-msgs/recipe.yaml     |   91 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-tango-icons-vendor/recipe.yaml  |   86 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-teleop-twist-joy/recipe.yaml    |   98 ++
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 .../recipe.yaml                               |   89 +
 .../ros-jazzy-test-msgs/bld_ament_cmake.bat   |   52 +
 .../ros-jazzy-test-msgs/build_ament_cmake.sh  |   84 +
 recipes/ros-jazzy-test-msgs/recipe.yaml       |   92 ++
 .../ros-jazzy-tf2-bullet/bld_ament_cmake.bat  |   52 +
 .../ros-jazzy-tf2-bullet/build_ament_cmake.sh |   84 +
 recipes/ros-jazzy-tf2-bullet/recipe.yaml      |   95 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-tf2-eigen-kdl/recipe.yaml   |   93 ++
 .../ros-jazzy-tf2-eigen/bld_ament_cmake.bat   |   52 +
 .../ros-jazzy-tf2-eigen/build_ament_cmake.sh  |   84 +
 recipes/ros-jazzy-tf2-eigen/recipe.yaml       |   95 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-tf2-geometry-msgs/recipe.yaml   |  100 ++
 recipes/ros-jazzy-tf2-kdl/bld_ament_cmake.bat |   52 +
 .../ros-jazzy-tf2-kdl/build_ament_cmake.sh    |   84 +
 recipes/ros-jazzy-tf2-kdl/recipe.yaml         |   98 ++
 .../ros-jazzy-tf2-msgs/bld_ament_cmake.bat    |   52 +
 .../ros-jazzy-tf2-msgs/build_ament_cmake.sh   |   84 +
 recipes/ros-jazzy-tf2-msgs/recipe.yaml        |   91 +
 recipes/ros-jazzy-tf2-py/bld_ament_cmake.bat  |   52 +
 recipes/ros-jazzy-tf2-py/build_ament_cmake.sh |   84 +
 recipes/ros-jazzy-tf2-py/recipe.yaml          |   95 ++
 .../ros-jazzy-tf2-ros-py/bld_ament_python.bat |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-tf2-ros-py/recipe.yaml      |   93 ++
 recipes/ros-jazzy-tf2-ros/bld_ament_cmake.bat |   52 +
 .../ros-jazzy-tf2-ros/build_ament_cmake.sh    |   84 +
 recipes/ros-jazzy-tf2-ros/recipe.yaml         |  106 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-tf2-sensor-msgs/recipe.yaml |  106 ++
 .../ros-jazzy-tf2-tools/bld_ament_python.bat  |   25 +
 .../ros-jazzy-tf2-tools/build_ament_python.sh |   19 +
 recipes/ros-jazzy-tf2-tools/recipe.yaml       |   94 ++
 recipes/ros-jazzy-tf2/bld_ament_cmake.bat     |   52 +
 recipes/ros-jazzy-tf2/build_ament_cmake.sh    |   84 +
 recipes/ros-jazzy-tf2/recipe.yaml             |  101 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |  122 ++
 .../bld_ament_python.bat                      |   25 +
 .../build_ament_python.sh                     |   19 +
 recipes/ros-jazzy-topic-monitor/recipe.yaml   |   92 ++
 .../ros-jazzy-tracetools/bld_ament_cmake.bat  |   52 +
 .../ros-jazzy-tracetools/build_ament_cmake.sh |   84 +
 recipes/ros-jazzy-tracetools/recipe.yaml      |   91 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-trajectory-msgs/recipe.yaml |   93 ++
 .../ros-jazzy-turtlesim/bld_ament_cmake.bat   |   52 +
 .../ros-jazzy-turtlesim/build_ament_cmake.sh  |   84 +
 recipes/ros-jazzy-turtlesim/recipe.yaml       |  115 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   90 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   88 +
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-urdf-parser-plugin/recipe.yaml  |   88 +
 recipes/ros-jazzy-urdf/bld_ament_cmake.bat    |   52 +
 recipes/ros-jazzy-urdf/build_ament_cmake.sh   |   84 +
 recipes/ros-jazzy-urdf/recipe.yaml            |   97 ++
 recipes/ros-jazzy-urdfdom-headers/recipe.yaml |   20 +
 recipes/ros-jazzy-urdfdom-py/recipe.yaml      |   20 +
 recipes/ros-jazzy-urdfdom/recipe.yaml         |   20 +
 .../ros-jazzy-vision-msgs/bld_ament_cmake.bat |   52 +
 .../build_ament_cmake.sh                      |   84 +
 recipes/ros-jazzy-vision-msgs/recipe.yaml     |   93 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../ros-jazzy-visualization-msgs/recipe.yaml  |   95 ++
 .../bld_ament_cmake.bat                       |   52 +
 .../build_ament_cmake.sh                      |   84 +
 .../recipe.yaml                               |   90 +
 recipes/ros2-distro-mutex/recipe.yaml         |   52 +
 vinca.yaml                                    |   47 +
 vinca_ec4ef9dfb4.json                         |    1 +
 836 files changed, 60579 insertions(+)
 create mode 100644 .github/workflows/osx.yml
 create mode 100755 activate.bat
 create mode 100755 activate.ps1
 create mode 100755 activate.sh
 create mode 100755 bld_ament_cmake.bat
 create mode 100755 bld_ament_python.bat
 create mode 100755 bld_catkin.bat
 create mode 100755 bld_catkin_merge.bat
 create mode 100755 bld_colcon_merge.bat
 create mode 100755 build_ament_cmake.sh
 create mode 100755 build_ament_python.sh
 create mode 100755 build_catkin.sh
 create mode 100644 buildorder.txt
 create mode 100755 deactivate.bat
 create mode 100755 deactivate.ps1
 create mode 100755 deactivate.sh
 create mode 100755 recipes/ros-jazzy-action-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-action-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-action-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-action-tutorials-cpp/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-action-tutorials-cpp/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-action-tutorials-cpp/recipe.yaml
 create mode 100755 recipes/ros-jazzy-action-tutorials-interfaces/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-action-tutorials-interfaces/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-action-tutorials-interfaces/recipe.yaml
 create mode 100755 recipes/ros-jazzy-action-tutorials-py/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-action-tutorials-py/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-action-tutorials-py/recipe.yaml
 create mode 100755 recipes/ros-jazzy-actionlib-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-actionlib-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-actionlib-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-actuator-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-actuator-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-actuator-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ament-cmake-ros/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-ament-cmake-ros/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-ament-cmake-ros/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ament-index-cpp/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-ament-index-cpp/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-ament-index-cpp/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ament-lint-common/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-ament-lint-common/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-ament-lint-common/recipe.yaml
 create mode 100755 recipes/ros-jazzy-builtin-interfaces/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-builtin-interfaces/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-builtin-interfaces/recipe.yaml
 create mode 100755 recipes/ros-jazzy-class-loader/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-class-loader/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-class-loader/recipe.yaml
 create mode 100755 recipes/ros-jazzy-common-interfaces/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-common-interfaces/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-common-interfaces/recipe.yaml
 create mode 100755 recipes/ros-jazzy-composition-interfaces/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-composition-interfaces/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-composition-interfaces/recipe.yaml
 create mode 100755 recipes/ros-jazzy-composition/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-composition/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-composition/recipe.yaml
 create mode 100755 recipes/ros-jazzy-compressed-depth-image-transport/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-compressed-depth-image-transport/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-compressed-depth-image-transport/recipe.yaml
 create mode 100755 recipes/ros-jazzy-compressed-image-transport/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-compressed-image-transport/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-compressed-image-transport/recipe.yaml
 create mode 100755 recipes/ros-jazzy-console-bridge-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-console-bridge-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-console-bridge-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-cv-bridge/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-cv-bridge/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-cv-bridge/recipe.yaml
 create mode 100755 recipes/ros-jazzy-demo-nodes-cpp-native/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-demo-nodes-cpp-native/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-demo-nodes-cpp-native/recipe.yaml
 create mode 100755 recipes/ros-jazzy-demo-nodes-cpp/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-demo-nodes-cpp/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-demo-nodes-cpp/recipe.yaml
 create mode 100755 recipes/ros-jazzy-demo-nodes-py/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-demo-nodes-py/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-demo-nodes-py/recipe.yaml
 create mode 100755 recipes/ros-jazzy-depthimage-to-laserscan/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-depthimage-to-laserscan/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-depthimage-to-laserscan/recipe.yaml
 create mode 100755 recipes/ros-jazzy-desktop/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-desktop/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-desktop/recipe.yaml
 create mode 100755 recipes/ros-jazzy-diagnostic-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-diagnostic-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-diagnostic-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-dummy-map-server/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-dummy-map-server/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-dummy-map-server/recipe.yaml
 create mode 100755 recipes/ros-jazzy-dummy-robot-bringup/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-dummy-robot-bringup/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-dummy-robot-bringup/recipe.yaml
 create mode 100755 recipes/ros-jazzy-dummy-sensors/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-dummy-sensors/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-dummy-sensors/recipe.yaml
 create mode 100755 recipes/ros-jazzy-example-interfaces/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-example-interfaces/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-example-interfaces/recipe.yaml
 create mode 100755 recipes/ros-jazzy-examples-rclcpp-minimal-action-client/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-examples-rclcpp-minimal-action-client/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-examples-rclcpp-minimal-action-client/recipe.yaml
 create mode 100755 recipes/ros-jazzy-examples-rclcpp-minimal-action-server/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-examples-rclcpp-minimal-action-server/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-examples-rclcpp-minimal-action-server/recipe.yaml
 create mode 100755 recipes/ros-jazzy-examples-rclcpp-minimal-client/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-examples-rclcpp-minimal-client/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-examples-rclcpp-minimal-client/recipe.yaml
 create mode 100755 recipes/ros-jazzy-examples-rclcpp-minimal-composition/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-examples-rclcpp-minimal-composition/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-examples-rclcpp-minimal-composition/recipe.yaml
 create mode 100755 recipes/ros-jazzy-examples-rclcpp-minimal-publisher/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-examples-rclcpp-minimal-publisher/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-examples-rclcpp-minimal-publisher/recipe.yaml
 create mode 100755 recipes/ros-jazzy-examples-rclcpp-minimal-service/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-examples-rclcpp-minimal-service/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-examples-rclcpp-minimal-service/recipe.yaml
 create mode 100755 recipes/ros-jazzy-examples-rclcpp-minimal-subscriber/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-examples-rclcpp-minimal-subscriber/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-examples-rclcpp-minimal-subscriber/recipe.yaml
 create mode 100755 recipes/ros-jazzy-examples-rclcpp-minimal-timer/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-examples-rclcpp-minimal-timer/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-examples-rclcpp-minimal-timer/recipe.yaml
 create mode 100755 recipes/ros-jazzy-examples-rclcpp-multithreaded-executor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-examples-rclcpp-multithreaded-executor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-examples-rclcpp-multithreaded-executor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-examples-rclpy-executors/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-examples-rclpy-executors/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-examples-rclpy-executors/recipe.yaml
 create mode 100755 recipes/ros-jazzy-examples-rclpy-minimal-action-client/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-examples-rclpy-minimal-action-client/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-examples-rclpy-minimal-action-client/recipe.yaml
 create mode 100755 recipes/ros-jazzy-examples-rclpy-minimal-action-server/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-examples-rclpy-minimal-action-server/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-examples-rclpy-minimal-action-server/recipe.yaml
 create mode 100755 recipes/ros-jazzy-examples-rclpy-minimal-client/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-examples-rclpy-minimal-client/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-examples-rclpy-minimal-client/recipe.yaml
 create mode 100755 recipes/ros-jazzy-examples-rclpy-minimal-publisher/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-examples-rclpy-minimal-publisher/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-examples-rclpy-minimal-publisher/recipe.yaml
 create mode 100755 recipes/ros-jazzy-examples-rclpy-minimal-service/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-examples-rclpy-minimal-service/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-examples-rclpy-minimal-service/recipe.yaml
 create mode 100755 recipes/ros-jazzy-examples-rclpy-minimal-subscriber/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-examples-rclpy-minimal-subscriber/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-examples-rclpy-minimal-subscriber/recipe.yaml
 create mode 100755 recipes/ros-jazzy-fastrtps-cmake-module/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-fastrtps-cmake-module/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-fastrtps-cmake-module/recipe.yaml
 create mode 100755 recipes/ros-jazzy-fastrtps/bld_catkin.bat
 create mode 100755 recipes/ros-jazzy-fastrtps/build_catkin.sh
 create mode 100644 recipes/ros-jazzy-fastrtps/patch/ros-jazzy-fastrtps.patch
 create mode 100644 recipes/ros-jazzy-fastrtps/recipe.yaml
 create mode 100755 recipes/ros-jazzy-foonathan-memory-vendor/bld_catkin.bat
 create mode 100755 recipes/ros-jazzy-foonathan-memory-vendor/build_catkin.sh
 create mode 100644 recipes/ros-jazzy-foonathan-memory-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-geometry-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-geometry-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-geometry-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-geometry2/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-geometry2/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-geometry2/recipe.yaml
 create mode 100755 recipes/ros-jazzy-gps-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-gps-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-gps-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-gz-cmake-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-gz-cmake-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-gz-cmake-vendor/patch/ros-jazzy-gz-cmake-vendor.patch
 create mode 100644 recipes/ros-jazzy-gz-cmake-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-gz-common-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-gz-common-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-gz-common-vendor/patch/ros-jazzy-gz-common-vendor.patch
 create mode 100644 recipes/ros-jazzy-gz-common-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-gz-fuel-tools-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-gz-fuel-tools-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-gz-fuel-tools-vendor/patch/ros-jazzy-gz-fuel-tools-vendor.patch
 create mode 100644 recipes/ros-jazzy-gz-fuel-tools-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-gz-gui-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-gz-gui-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-gz-gui-vendor/patch/ros-jazzy-gz-gui-vendor.patch
 create mode 100644 recipes/ros-jazzy-gz-gui-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-gz-math-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-gz-math-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-gz-math-vendor/patch/ros-jazzy-gz-math-vendor.patch
 create mode 100644 recipes/ros-jazzy-gz-math-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-gz-msgs-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-gz-msgs-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-gz-msgs-vendor/patch/ros-jazzy-gz-msgs-vendor.patch
 create mode 100644 recipes/ros-jazzy-gz-msgs-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-gz-physics-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-gz-physics-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-gz-physics-vendor/patch/ros-jazzy-gz-physics-vendor.patch
 create mode 100644 recipes/ros-jazzy-gz-physics-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-gz-plugin-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-gz-plugin-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-gz-plugin-vendor/patch/ros-jazzy-gz-plugin-vendor.patch
 create mode 100644 recipes/ros-jazzy-gz-plugin-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-gz-rendering-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-gz-rendering-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-gz-rendering-vendor/patch/ros-jazzy-gz-rendering-vendor.patch
 create mode 100644 recipes/ros-jazzy-gz-rendering-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-gz-sensors-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-gz-sensors-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-gz-sensors-vendor/patch/ros-jazzy-gz-sensors-vendor.patch
 create mode 100644 recipes/ros-jazzy-gz-sensors-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-gz-sim-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-gz-sim-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-gz-sim-vendor/patch/ros-jazzy-gz-sim-vendor.patch
 create mode 100644 recipes/ros-jazzy-gz-sim-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-gz-tools-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-gz-tools-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-gz-tools-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-gz-transport-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-gz-transport-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-gz-transport-vendor/patch/ros-jazzy-gz-transport-vendor.patch
 create mode 100644 recipes/ros-jazzy-gz-transport-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-gz-utils-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-gz-utils-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-gz-utils-vendor/patch/ros-jazzy-gz-utils-vendor.patch
 create mode 100644 recipes/ros-jazzy-gz-utils-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-image-geometry/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-image-geometry/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-image-geometry/recipe.yaml
 create mode 100755 recipes/ros-jazzy-image-tools/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-image-tools/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-image-tools/recipe.yaml
 create mode 100755 recipes/ros-jazzy-image-transport-plugins/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-image-transport-plugins/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-image-transport-plugins/recipe.yaml
 create mode 100755 recipes/ros-jazzy-image-transport/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-image-transport/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-image-transport/recipe.yaml
 create mode 100755 recipes/ros-jazzy-interactive-markers/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-interactive-markers/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-interactive-markers/recipe.yaml
 create mode 100755 recipes/ros-jazzy-intra-process-demo/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-intra-process-demo/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-intra-process-demo/recipe.yaml
 create mode 100755 recipes/ros-jazzy-joy/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-joy/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-joy/recipe.yaml
 create mode 100755 recipes/ros-jazzy-kdl-parser/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-kdl-parser/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-kdl-parser/recipe.yaml
 create mode 100755 recipes/ros-jazzy-keyboard-handler/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-keyboard-handler/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-keyboard-handler/recipe.yaml
 create mode 100755 recipes/ros-jazzy-laser-geometry/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-laser-geometry/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-laser-geometry/recipe.yaml
 create mode 100755 recipes/ros-jazzy-launch-ros/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-launch-ros/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-launch-ros/recipe.yaml
 create mode 100755 recipes/ros-jazzy-launch-testing-ament-cmake/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-launch-testing-ament-cmake/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-launch-testing-ament-cmake/recipe.yaml
 create mode 100755 recipes/ros-jazzy-launch-testing-ros/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-launch-testing-ros/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-launch-testing-ros/recipe.yaml
 create mode 100755 recipes/ros-jazzy-libstatistics-collector/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-libstatistics-collector/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-libstatistics-collector/recipe.yaml
 create mode 100755 recipes/ros-jazzy-libyaml-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-libyaml-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-libyaml-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-lifecycle-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-lifecycle-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-lifecycle-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-lifecycle/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-lifecycle/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-lifecycle/recipe.yaml
 create mode 100755 recipes/ros-jazzy-logging-demo/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-logging-demo/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-logging-demo/recipe.yaml
 create mode 100755 recipes/ros-jazzy-map-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-map-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-map-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-message-filters/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-message-filters/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-message-filters/recipe.yaml
 create mode 100755 recipes/ros-jazzy-mimick-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-mimick-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-mimick-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-nav-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-nav-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-nav-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-orocos-kdl-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-orocos-kdl-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-orocos-kdl-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-pcl-conversions/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-pcl-conversions/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-pcl-conversions/recipe.yaml
 create mode 100755 recipes/ros-jazzy-pcl-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-pcl-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-pcl-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-pendulum-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-pendulum-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-pendulum-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-performance-test-fixture/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-performance-test-fixture/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-performance-test-fixture/recipe.yaml
 create mode 100755 recipes/ros-jazzy-pluginlib/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-pluginlib/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-pluginlib/recipe.yaml
 create mode 100755 recipes/ros-jazzy-point-cloud-transport/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-point-cloud-transport/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-point-cloud-transport/recipe.yaml
 create mode 100755 recipes/ros-jazzy-python-cmake-module/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-python-cmake-module/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-python-cmake-module/recipe.yaml
 create mode 100755 recipes/ros-jazzy-python-qt-binding/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-python-qt-binding/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-python-qt-binding/patch/ros-jazzy-python-qt-binding.patch
 create mode 100644 recipes/ros-jazzy-python-qt-binding/recipe.yaml
 create mode 100755 recipes/ros-jazzy-qt-dotgraph/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-qt-dotgraph/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-qt-dotgraph/recipe.yaml
 create mode 100755 recipes/ros-jazzy-qt-gui-cpp/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-qt-gui-cpp/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-qt-gui-cpp/patch/ros-jazzy-qt-gui-cpp.patch
 create mode 100644 recipes/ros-jazzy-qt-gui-cpp/recipe.yaml
 create mode 100755 recipes/ros-jazzy-qt-gui-py-common/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-qt-gui-py-common/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-qt-gui-py-common/recipe.yaml
 create mode 100755 recipes/ros-jazzy-qt-gui/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-qt-gui/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-qt-gui/recipe.yaml
 create mode 100755 recipes/ros-jazzy-quality-of-service-demo-cpp/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-quality-of-service-demo-cpp/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-quality-of-service-demo-cpp/recipe.yaml
 create mode 100755 recipes/ros-jazzy-quality-of-service-demo-py/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-quality-of-service-demo-py/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-quality-of-service-demo-py/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rcl-action/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rcl-action/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rcl-action/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rcl-interfaces/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rcl-interfaces/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rcl-interfaces/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rcl-lifecycle/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rcl-lifecycle/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rcl-lifecycle/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rcl-logging-interface/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rcl-logging-interface/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rcl-logging-interface/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rcl-logging-spdlog/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rcl-logging-spdlog/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rcl-logging-spdlog/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rcl-yaml-param-parser/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rcl-yaml-param-parser/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rcl-yaml-param-parser/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rcl/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rcl/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rcl/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rclcpp-action/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rclcpp-action/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rclcpp-action/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rclcpp-components/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rclcpp-components/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rclcpp-components/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rclcpp-lifecycle/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rclcpp-lifecycle/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rclcpp-lifecycle/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rclcpp/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rclcpp/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rclcpp/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rclpy/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rclpy/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rclpy/patch/ros-jazzy-rclpy.osx.patch
 create mode 100644 recipes/ros-jazzy-rclpy/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rcpputils/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rcpputils/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rcpputils/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rcutils/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rcutils/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rcutils/recipe.yaml
 create mode 100755 recipes/ros-jazzy-resource-retriever/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-resource-retriever/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-resource-retriever/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rmw-connextdds-common/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rmw-connextdds-common/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rmw-connextdds-common/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rmw-connextdds/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rmw-connextdds/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rmw-connextdds/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rmw-cyclonedds-cpp/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rmw-cyclonedds-cpp/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rmw-cyclonedds-cpp/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rmw-dds-common/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rmw-dds-common/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rmw-dds-common/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rmw-fastrtps-cpp/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rmw-fastrtps-cpp/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rmw-fastrtps-cpp/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rmw-fastrtps-dynamic-cpp/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rmw-fastrtps-dynamic-cpp/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rmw-fastrtps-dynamic-cpp/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rmw-fastrtps-shared-cpp/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rmw-fastrtps-shared-cpp/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rmw-fastrtps-shared-cpp/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rmw-implementation-cmake/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rmw-implementation-cmake/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rmw-implementation-cmake/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rmw-implementation/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rmw-implementation/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rmw-implementation/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rmw/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rmw/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rmw/recipe.yaml
 create mode 100755 recipes/ros-jazzy-robot-state-publisher/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-robot-state-publisher/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-robot-state-publisher/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros-base/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-ros-base/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-ros-base/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros-core/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-ros-core/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-ros-core/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros-gz-bridge/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-ros-gz-bridge/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-ros-gz-bridge/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros-gz-image/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-ros-gz-image/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-ros-gz-image/patch/ros-jazzy-ros-gz-image.patch
 create mode 100644 recipes/ros-jazzy-ros-gz-image/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros-gz-interfaces/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-ros-gz-interfaces/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-ros-gz-interfaces/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros-gz-sim-demos/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-ros-gz-sim-demos/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-ros-gz-sim-demos/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros-gz-sim/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-ros-gz-sim/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-ros-gz-sim/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros-gz/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-ros-gz/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-ros-gz/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros-testing/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-ros-testing/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-ros-testing/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros2action/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-ros2action/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-ros2action/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros2bag/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-ros2bag/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-ros2bag/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros2cli-common-extensions/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-ros2cli-common-extensions/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-ros2cli-common-extensions/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros2cli-test-interfaces/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-ros2cli-test-interfaces/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-ros2cli-test-interfaces/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros2cli/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-ros2cli/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-ros2cli/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros2component/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-ros2component/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-ros2component/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros2doctor/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-ros2doctor/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-ros2doctor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros2interface/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-ros2interface/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-ros2interface/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros2launch/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-ros2launch/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-ros2launch/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros2lifecycle-test-fixtures/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-ros2lifecycle-test-fixtures/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-ros2lifecycle-test-fixtures/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros2lifecycle/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-ros2lifecycle/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-ros2lifecycle/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros2multicast/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-ros2multicast/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-ros2multicast/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros2node/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-ros2node/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-ros2node/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros2param/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-ros2param/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-ros2param/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros2pkg/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-ros2pkg/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-ros2pkg/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros2run/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-ros2run/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-ros2run/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros2service/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-ros2service/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-ros2service/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros2test/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-ros2test/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-ros2test/recipe.yaml
 create mode 100755 recipes/ros-jazzy-ros2topic/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-ros2topic/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-ros2topic/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosbag2-compression-zstd/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosbag2-compression-zstd/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosbag2-compression-zstd/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosbag2-compression/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosbag2-compression/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosbag2-compression/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosbag2-cpp/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosbag2-cpp/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosbag2-cpp/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosbag2-interfaces/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosbag2-interfaces/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosbag2-interfaces/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosbag2-py/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosbag2-py/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosbag2-py/patch/ros-jazzy-rosbag2-py.osx.patch
 create mode 100644 recipes/ros-jazzy-rosbag2-py/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosbag2-storage-default-plugins/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosbag2-storage-default-plugins/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosbag2-storage-default-plugins/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosbag2-storage-mcap/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosbag2-storage-mcap/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosbag2-storage-mcap/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosbag2-storage-sqlite3/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosbag2-storage-sqlite3/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosbag2-storage-sqlite3/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosbag2-storage/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosbag2-storage/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosbag2-storage/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosbag2-test-common/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosbag2-test-common/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosbag2-test-common/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosbag2-test-msgdefs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosbag2-test-msgdefs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosbag2-test-msgdefs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosbag2-tests/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosbag2-tests/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosbag2-tests/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosbag2-transport/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosbag2-transport/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosbag2-transport/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosbag2/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosbag2/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosbag2/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosgraph-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosgraph-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosgraph-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-adapter/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-adapter/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-adapter/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-cmake/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-cmake/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-cmake/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-core-generators/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-core-generators/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-core-generators/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-core-runtime/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-core-runtime/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-core-runtime/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-default-generators/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-default-generators/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-default-generators/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-default-runtime/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-default-runtime/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-default-runtime/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-dynamic-typesupport-fastrtps/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-dynamic-typesupport-fastrtps/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-dynamic-typesupport-fastrtps/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-dynamic-typesupport/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-dynamic-typesupport/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-dynamic-typesupport/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-generator-c/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-generator-c/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-generator-c/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-generator-cpp/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-generator-cpp/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-generator-cpp/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-generator-py/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-generator-py/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-generator-py/patch/ros-jazzy-rosidl-generator-py.osx.patch
 create mode 100644 recipes/ros-jazzy-rosidl-generator-py/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-generator-type-description/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-generator-type-description/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-generator-type-description/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-parser/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-parser/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-parser/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-pycommon/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-rosidl-pycommon/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-rosidl-pycommon/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-runtime-c/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-runtime-c/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-runtime-c/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-runtime-cpp/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-runtime-cpp/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-runtime-cpp/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-runtime-py/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-rosidl-runtime-py/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-rosidl-runtime-py/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-typesupport-c/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-typesupport-c/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-typesupport-c/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-typesupport-cpp/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-typesupport-cpp/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-typesupport-cpp/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-typesupport-fastrtps-c/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-typesupport-fastrtps-c/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-typesupport-fastrtps-c/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-typesupport-fastrtps-cpp/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-typesupport-fastrtps-cpp/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-typesupport-fastrtps-cpp/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-typesupport-interface/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-typesupport-interface/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-typesupport-interface/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-typesupport-introspection-c/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-typesupport-introspection-c/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-typesupport-introspection-c/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rosidl-typesupport-introspection-cpp/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rosidl-typesupport-introspection-cpp/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rosidl-typesupport-introspection-cpp/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rqt-action/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-rqt-action/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-rqt-action/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rqt-bag-plugins/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-rqt-bag-plugins/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-rqt-bag-plugins/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rqt-bag/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-rqt-bag/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-rqt-bag/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rqt-common-plugins/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rqt-common-plugins/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rqt-common-plugins/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rqt-console/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-rqt-console/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-rqt-console/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rqt-graph/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-rqt-graph/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-rqt-graph/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rqt-gui-cpp/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rqt-gui-cpp/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rqt-gui-cpp/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rqt-gui-py/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-rqt-gui-py/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-rqt-gui-py/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rqt-gui/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-rqt-gui/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-rqt-gui/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rqt-image-view/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rqt-image-view/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rqt-image-view/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rqt-msg/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-rqt-msg/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-rqt-msg/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rqt-plot/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-rqt-plot/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-rqt-plot/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rqt-publisher/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-rqt-publisher/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-rqt-publisher/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rqt-py-common/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rqt-py-common/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rqt-py-common/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rqt-py-console/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-rqt-py-console/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-rqt-py-console/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rqt-reconfigure/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-rqt-reconfigure/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-rqt-reconfigure/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rqt-service-caller/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-rqt-service-caller/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-rqt-service-caller/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rqt-shell/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-rqt-shell/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-rqt-shell/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rqt-srv/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-rqt-srv/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-rqt-srv/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rqt-topic/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-rqt-topic/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-rqt-topic/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rti-connext-dds-cmake-module/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rti-connext-dds-cmake-module/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rti-connext-dds-cmake-module/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rviz-assimp-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rviz-assimp-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rviz-assimp-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rviz-common/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rviz-common/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rviz-common/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rviz-default-plugins/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rviz-default-plugins/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rviz-default-plugins/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rviz-ogre-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rviz-ogre-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rviz-ogre-vendor/patch/ros-jazzy-rviz-ogre-vendor.patch
 create mode 100644 recipes/ros-jazzy-rviz-ogre-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rviz-rendering-tests/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rviz-rendering-tests/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rviz-rendering-tests/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rviz-rendering/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rviz-rendering/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rviz-rendering/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rviz-visual-testing-framework/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rviz-visual-testing-framework/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rviz-visual-testing-framework/recipe.yaml
 create mode 100755 recipes/ros-jazzy-rviz2/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-rviz2/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-rviz2/recipe.yaml
 create mode 100755 recipes/ros-jazzy-sdformat-urdf/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-sdformat-urdf/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-sdformat-urdf/recipe.yaml
 create mode 100755 recipes/ros-jazzy-sdformat-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-sdformat-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-sdformat-vendor/patch/ros-jazzy-sdformat-vendor.patch
 create mode 100644 recipes/ros-jazzy-sdformat-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-sensor-msgs-py/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-sensor-msgs-py/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-sensor-msgs-py/recipe.yaml
 create mode 100755 recipes/ros-jazzy-sensor-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-sensor-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-sensor-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-service-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-service-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-service-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-shape-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-shape-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-shape-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-spdlog-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-spdlog-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-spdlog-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-sros2-cmake/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-sros2-cmake/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-sros2-cmake/recipe.yaml
 create mode 100755 recipes/ros-jazzy-sros2/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-sros2/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-sros2/recipe.yaml
 create mode 100755 recipes/ros-jazzy-statistics-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-statistics-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-statistics-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-std-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-std-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-std-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-std-srvs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-std-srvs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-std-srvs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-stereo-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-stereo-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-stereo-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-tango-icons-vendor/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-tango-icons-vendor/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-tango-icons-vendor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-teleop-twist-joy/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-teleop-twist-joy/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-teleop-twist-joy/recipe.yaml
 create mode 100755 recipes/ros-jazzy-teleop-twist-keyboard/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-teleop-twist-keyboard/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-teleop-twist-keyboard/recipe.yaml
 create mode 100755 recipes/ros-jazzy-test-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-test-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-test-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-tf2-bullet/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-tf2-bullet/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-tf2-bullet/recipe.yaml
 create mode 100755 recipes/ros-jazzy-tf2-eigen-kdl/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-tf2-eigen-kdl/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-tf2-eigen-kdl/recipe.yaml
 create mode 100755 recipes/ros-jazzy-tf2-eigen/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-tf2-eigen/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-tf2-eigen/recipe.yaml
 create mode 100755 recipes/ros-jazzy-tf2-geometry-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-tf2-geometry-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-tf2-geometry-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-tf2-kdl/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-tf2-kdl/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-tf2-kdl/recipe.yaml
 create mode 100755 recipes/ros-jazzy-tf2-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-tf2-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-tf2-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-tf2-py/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-tf2-py/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-tf2-py/recipe.yaml
 create mode 100755 recipes/ros-jazzy-tf2-ros-py/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-tf2-ros-py/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-tf2-ros-py/recipe.yaml
 create mode 100755 recipes/ros-jazzy-tf2-ros/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-tf2-ros/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-tf2-ros/recipe.yaml
 create mode 100755 recipes/ros-jazzy-tf2-sensor-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-tf2-sensor-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-tf2-sensor-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-tf2-tools/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-tf2-tools/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-tf2-tools/recipe.yaml
 create mode 100755 recipes/ros-jazzy-tf2/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-tf2/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-tf2/recipe.yaml
 create mode 100755 recipes/ros-jazzy-theora-image-transport/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-theora-image-transport/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-theora-image-transport/recipe.yaml
 create mode 100755 recipes/ros-jazzy-topic-monitor/bld_ament_python.bat
 create mode 100755 recipes/ros-jazzy-topic-monitor/build_ament_python.sh
 create mode 100644 recipes/ros-jazzy-topic-monitor/recipe.yaml
 create mode 100755 recipes/ros-jazzy-tracetools/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-tracetools/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-tracetools/recipe.yaml
 create mode 100755 recipes/ros-jazzy-trajectory-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-trajectory-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-trajectory-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-turtlesim/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-turtlesim/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-turtlesim/recipe.yaml
 create mode 100755 recipes/ros-jazzy-type-description-interfaces/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-type-description-interfaces/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-type-description-interfaces/recipe.yaml
 create mode 100755 recipes/ros-jazzy-unique-identifier-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-unique-identifier-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-unique-identifier-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-urdf-parser-plugin/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-urdf-parser-plugin/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-urdf-parser-plugin/recipe.yaml
 create mode 100755 recipes/ros-jazzy-urdf/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-urdf/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-urdf/recipe.yaml
 create mode 100644 recipes/ros-jazzy-urdfdom-headers/recipe.yaml
 create mode 100644 recipes/ros-jazzy-urdfdom-py/recipe.yaml
 create mode 100644 recipes/ros-jazzy-urdfdom/recipe.yaml
 create mode 100755 recipes/ros-jazzy-vision-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-vision-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-vision-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-visualization-msgs/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-visualization-msgs/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-visualization-msgs/recipe.yaml
 create mode 100755 recipes/ros-jazzy-zstd-image-transport/bld_ament_cmake.bat
 create mode 100755 recipes/ros-jazzy-zstd-image-transport/build_ament_cmake.sh
 create mode 100644 recipes/ros-jazzy-zstd-image-transport/recipe.yaml
 create mode 100644 recipes/ros2-distro-mutex/recipe.yaml
 create mode 100644 vinca.yaml
 create mode 100644 vinca_ec4ef9dfb4.json

diff --git a/.github/workflows/osx.yml b/.github/workflows/osx.yml
new file mode 100644
index 00000000..68ef7756
--- /dev/null
+++ b/.github/workflows/osx.yml
@@ -0,0 +1,1472 @@
+jobs:
+  stage_0_job_0:
+    name: mutex urdfdom-headers urdfdom urdfdom-py
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs: []
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros2-distro-mutex ros-jazzy-urdfdom-headers ros-jazzy-urdfdom ros-jazzy-urdfdom-py
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros2-distro-mutex ros-jazzy-urdfdom-headers ros-jazzy-urdfdom
+          ros-jazzy-urdfdom-py
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_1_job_1:
+    name: ament-lint-common foonathan-memory-vendor gz-cmake-vendor rviz-ogre-vendor
+      rviz-assimp-vendor
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_0_job_0
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-ament-lint-common ros-jazzy-foonathan-memory-vendor ros-jazzy-gz-cmake-vendor
+        ros-jazzy-rviz-ogre-vendor ros-jazzy-rviz-assimp-vendor
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-ament-lint-common ros-jazzy-foonathan-memory-vendor
+          ros-jazzy-gz-cmake-vendor ros-jazzy-rviz-ogre-vendor ros-jazzy-rviz-assimp-vendor
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_2_job_2:
+    name: python-cmake-module rosidl-adapter performance-test-fixture mimick-vendor
+      ament-cmake-ros
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_1_job_1
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-python-cmake-module ros-jazzy-rosidl-adapter ros-jazzy-performance-test-fixture
+        ros-jazzy-mimick-vendor ros-jazzy-ament-cmake-ros
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-python-cmake-module ros-jazzy-rosidl-adapter ros-jazzy-performance-test-fixture
+          ros-jazzy-mimick-vendor ros-jazzy-ament-cmake-ros
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_2_job_3:
+    name: rosidl-typesupport-interface fastrtps-cmake-module fastrtps rti-connext-dds-cmake-module
+      rmw-implementation-cmake
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_1_job_1
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rosidl-typesupport-interface ros-jazzy-fastrtps-cmake-module
+        ros-jazzy-fastrtps ros-jazzy-rti-connext-dds-cmake-module ros-jazzy-rmw-implementation-cmake
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rosidl-typesupport-interface ros-jazzy-fastrtps-cmake-module
+          ros-jazzy-fastrtps ros-jazzy-rti-connext-dds-cmake-module ros-jazzy-rmw-implementation-cmake
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_2_job_4:
+    name: ament-index-cpp spdlog-vendor gz-utils-vendor gz-tools-vendor orocos-kdl-vendor
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_1_job_1
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-ament-index-cpp ros-jazzy-spdlog-vendor ros-jazzy-gz-utils-vendor
+        ros-jazzy-gz-tools-vendor ros-jazzy-orocos-kdl-vendor
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-ament-index-cpp ros-jazzy-spdlog-vendor ros-jazzy-gz-utils-vendor
+          ros-jazzy-gz-tools-vendor ros-jazzy-orocos-kdl-vendor
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_2_job_5:
+    name: python-qt-binding tango-icons-vendor keyboard-handler
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_1_job_1
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-python-qt-binding ros-jazzy-tango-icons-vendor ros-jazzy-keyboard-handler
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-python-qt-binding ros-jazzy-tango-icons-vendor
+          ros-jazzy-keyboard-handler
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_3_job_6:
+    name: launch-testing-ament-cmake rosidl-parser tracetools libyaml-vendor console-bridge-vendor
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_2_job_2
+    - stage_2_job_3
+    - stage_2_job_4
+    - stage_2_job_5
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-launch-testing-ament-cmake ros-jazzy-rosidl-parser ros-jazzy-tracetools
+        ros-jazzy-libyaml-vendor ros-jazzy-console-bridge-vendor
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-launch-testing-ament-cmake ros-jazzy-rosidl-parser
+          ros-jazzy-tracetools ros-jazzy-libyaml-vendor ros-jazzy-console-bridge-vendor
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_3_job_7:
+    name: urdf-parser-plugin gz-math-vendor resource-retriever gz-plugin-vendor qt-gui
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_2_job_2
+    - stage_2_job_3
+    - stage_2_job_4
+    - stage_2_job_5
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-urdf-parser-plugin ros-jazzy-gz-math-vendor ros-jazzy-resource-retriever
+        ros-jazzy-gz-plugin-vendor ros-jazzy-qt-gui
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-urdf-parser-plugin ros-jazzy-gz-math-vendor ros-jazzy-resource-retriever
+          ros-jazzy-gz-plugin-vendor ros-jazzy-qt-gui
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_3_job_8:
+    name: qt-gui-py-common qt-dotgraph
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_2_job_2
+    - stage_2_job_3
+    - stage_2_job_4
+    - stage_2_job_5
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-qt-gui-py-common ros-jazzy-qt-dotgraph
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-qt-gui-py-common ros-jazzy-qt-dotgraph
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_4_job_9:
+    name: rcutils rosidl-pycommon rosidl-generator-type-description sdformat-vendor
+      rviz-rendering
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_3_job_6
+    - stage_3_job_7
+    - stage_3_job_8
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rcutils ros-jazzy-rosidl-pycommon ros-jazzy-rosidl-generator-type-description
+        ros-jazzy-sdformat-vendor ros-jazzy-rviz-rendering
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rcutils ros-jazzy-rosidl-pycommon ros-jazzy-rosidl-generator-type-description
+          ros-jazzy-sdformat-vendor ros-jazzy-rviz-rendering
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_4_job_10:
+    name: gz-msgs-vendor gz-common-vendor
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_3_job_6
+    - stage_3_job_7
+    - stage_3_job_8
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-gz-msgs-vendor ros-jazzy-gz-common-vendor
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-gz-msgs-vendor ros-jazzy-gz-common-vendor
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_5_job_11:
+    name: rosidl-runtime-c rosidl-cmake rcpputils rviz-rendering-tests gz-transport-vendor
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_4_job_9
+    - stage_4_job_10
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rosidl-runtime-c ros-jazzy-rosidl-cmake ros-jazzy-rcpputils
+        ros-jazzy-rviz-rendering-tests ros-jazzy-gz-transport-vendor
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rosidl-runtime-c ros-jazzy-rosidl-cmake ros-jazzy-rcpputils
+          ros-jazzy-rviz-rendering-tests ros-jazzy-gz-transport-vendor
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_5_job_12:
+    name: gz-rendering-vendor gz-physics-vendor gz-fuel-tools-vendor
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_4_job_9
+    - stage_4_job_10
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-gz-rendering-vendor ros-jazzy-gz-physics-vendor ros-jazzy-gz-fuel-tools-vendor
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-gz-rendering-vendor ros-jazzy-gz-physics-vendor
+          ros-jazzy-gz-fuel-tools-vendor
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_6_job_13:
+    name: rosidl-runtime-cpp rosidl-generator-c rosidl-dynamic-typesupport rcl-logging-interface
+      class-loader
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_5_job_11
+    - stage_5_job_12
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rosidl-runtime-cpp ros-jazzy-rosidl-generator-c ros-jazzy-rosidl-dynamic-typesupport
+        ros-jazzy-rcl-logging-interface ros-jazzy-class-loader
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rosidl-runtime-cpp ros-jazzy-rosidl-generator-c
+          ros-jazzy-rosidl-dynamic-typesupport ros-jazzy-rcl-logging-interface ros-jazzy-class-loader
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_6_job_14:
+    name: gz-sensors-vendor gz-gui-vendor
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_5_job_11
+    - stage_5_job_12
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-gz-sensors-vendor ros-jazzy-gz-gui-vendor
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-gz-sensors-vendor ros-jazzy-gz-gui-vendor
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_7_job_15:
+    name: rosidl-generator-cpp rmw rosidl-typesupport-introspection-c rosidl-dynamic-typesupport-fastrtps
+      rcl-logging-spdlog
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_6_job_13
+    - stage_6_job_14
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rosidl-generator-cpp ros-jazzy-rmw ros-jazzy-rosidl-typesupport-introspection-c
+        ros-jazzy-rosidl-dynamic-typesupport-fastrtps ros-jazzy-rcl-logging-spdlog
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rosidl-generator-cpp ros-jazzy-rmw ros-jazzy-rosidl-typesupport-introspection-c
+          ros-jazzy-rosidl-dynamic-typesupport-fastrtps ros-jazzy-rcl-logging-spdlog
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_7_job_16:
+    name: pluginlib gz-sim-vendor
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_6_job_13
+    - stage_6_job_14
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-pluginlib ros-jazzy-gz-sim-vendor
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-pluginlib ros-jazzy-gz-sim-vendor
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_8_job_17:
+    name: rosidl-typesupport-fastrtps-cpp rosidl-typesupport-introspection-cpp rcl-yaml-param-parser
+      urdf qt-gui-cpp
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_7_job_15
+    - stage_7_job_16
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rosidl-typesupport-fastrtps-cpp ros-jazzy-rosidl-typesupport-introspection-cpp
+        ros-jazzy-rcl-yaml-param-parser ros-jazzy-urdf ros-jazzy-qt-gui-cpp
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rosidl-typesupport-fastrtps-cpp ros-jazzy-rosidl-typesupport-introspection-cpp
+          ros-jazzy-rcl-yaml-param-parser ros-jazzy-urdf ros-jazzy-qt-gui-cpp
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_9_job_18:
+    name: rosidl-typesupport-fastrtps-c sdformat-urdf kdl-parser rosidl-typesupport-c
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_8_job_17
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rosidl-typesupport-fastrtps-c ros-jazzy-sdformat-urdf
+        ros-jazzy-kdl-parser ros-jazzy-rosidl-typesupport-c
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rosidl-typesupport-fastrtps-c ros-jazzy-sdformat-urdf
+          ros-jazzy-kdl-parser ros-jazzy-rosidl-typesupport-c
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_10_job_19:
+    name: rosidl-typesupport-cpp rosidl-generator-py rosidl-core-runtime rosidl-core-generators
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_9_job_18
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rosidl-typesupport-cpp ros-jazzy-rosidl-generator-py ros-jazzy-rosidl-core-runtime
+        ros-jazzy-rosidl-core-generators
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rosidl-typesupport-cpp ros-jazzy-rosidl-generator-py
+          ros-jazzy-rosidl-core-runtime ros-jazzy-rosidl-core-generators
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_11_job_20:
+    name: builtin-interfaces unique-identifier-msgs service-msgs
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_10_job_19
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-builtin-interfaces ros-jazzy-unique-identifier-msgs ros-jazzy-service-msgs
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-builtin-interfaces ros-jazzy-unique-identifier-msgs
+          ros-jazzy-service-msgs
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_12_job_21:
+    name: action-msgs type-description-interfaces rosidl-default-runtime rosidl-default-generators
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_11_job_20
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-action-msgs ros-jazzy-type-description-interfaces ros-jazzy-rosidl-default-runtime
+        ros-jazzy-rosidl-default-generators
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-action-msgs ros-jazzy-type-description-interfaces
+          ros-jazzy-rosidl-default-runtime ros-jazzy-rosidl-default-generators
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_13_job_22:
+    name: rmw-dds-common test-msgs rcl-interfaces std-msgs statistics-msgs
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_12_job_21
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rmw-dds-common ros-jazzy-test-msgs ros-jazzy-rcl-interfaces
+        ros-jazzy-std-msgs ros-jazzy-statistics-msgs
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rmw-dds-common ros-jazzy-test-msgs ros-jazzy-rcl-interfaces
+          ros-jazzy-std-msgs ros-jazzy-statistics-msgs
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_13_job_23:
+    name: rosgraph-msgs lifecycle-msgs std-srvs example-interfaces ros2cli-test-interfaces
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_12_job_21
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rosgraph-msgs ros-jazzy-lifecycle-msgs ros-jazzy-std-srvs
+        ros-jazzy-example-interfaces ros-jazzy-ros2cli-test-interfaces
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rosgraph-msgs ros-jazzy-lifecycle-msgs ros-jazzy-std-srvs
+          ros-jazzy-example-interfaces ros-jazzy-ros2cli-test-interfaces
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_13_job_24:
+    name: rosbag2-test-msgdefs rosbag2-interfaces action-tutorials-interfaces pendulum-msgs
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_12_job_21
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rosbag2-test-msgdefs ros-jazzy-rosbag2-interfaces ros-jazzy-action-tutorials-interfaces
+        ros-jazzy-pendulum-msgs
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rosbag2-test-msgdefs ros-jazzy-rosbag2-interfaces
+          ros-jazzy-action-tutorials-interfaces ros-jazzy-pendulum-msgs
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_14_job_25:
+    name: rmw-fastrtps-shared-cpp rmw-connextdds-common rmw-cyclonedds-cpp composition-interfaces
+      geometry-msgs
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_13_job_22
+    - stage_13_job_23
+    - stage_13_job_24
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rmw-fastrtps-shared-cpp ros-jazzy-rmw-connextdds-common
+        ros-jazzy-rmw-cyclonedds-cpp ros-jazzy-composition-interfaces ros-jazzy-geometry-msgs
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rmw-fastrtps-shared-cpp ros-jazzy-rmw-connextdds-common
+          ros-jazzy-rmw-cyclonedds-cpp ros-jazzy-composition-interfaces ros-jazzy-geometry-msgs
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_14_job_26:
+    name: rosidl-runtime-py actionlib-msgs gps-msgs actuator-msgs
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_13_job_22
+    - stage_13_job_23
+    - stage_13_job_24
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rosidl-runtime-py ros-jazzy-actionlib-msgs ros-jazzy-gps-msgs
+        ros-jazzy-actuator-msgs
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rosidl-runtime-py ros-jazzy-actionlib-msgs ros-jazzy-gps-msgs
+          ros-jazzy-actuator-msgs
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_15_job_27:
+    name: rmw-fastrtps-dynamic-cpp rmw-fastrtps-cpp rmw-connextdds sensor-msgs trajectory-msgs
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_14_job_25
+    - stage_14_job_26
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rmw-fastrtps-dynamic-cpp ros-jazzy-rmw-fastrtps-cpp ros-jazzy-rmw-connextdds
+        ros-jazzy-sensor-msgs ros-jazzy-trajectory-msgs
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rmw-fastrtps-dynamic-cpp ros-jazzy-rmw-fastrtps-cpp
+          ros-jazzy-rmw-connextdds ros-jazzy-sensor-msgs ros-jazzy-trajectory-msgs
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_15_job_28:
+    name: tf2-msgs tf2 diagnostic-msgs shape-msgs nav-msgs
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_14_job_25
+    - stage_14_job_26
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-tf2-msgs ros-jazzy-tf2 ros-jazzy-diagnostic-msgs ros-jazzy-shape-msgs
+        ros-jazzy-nav-msgs
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-tf2-msgs ros-jazzy-tf2 ros-jazzy-diagnostic-msgs
+          ros-jazzy-shape-msgs ros-jazzy-nav-msgs
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_15_job_29:
+    name: vision-msgs ros-gz-interfaces
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_14_job_25
+    - stage_14_job_26
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-vision-msgs ros-jazzy-ros-gz-interfaces
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-vision-msgs ros-jazzy-ros-gz-interfaces
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_16_job_30:
+    name: rmw-implementation visualization-msgs stereo-msgs sensor-msgs-py map-msgs
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_15_job_27
+    - stage_15_job_28
+    - stage_15_job_29
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rmw-implementation ros-jazzy-visualization-msgs ros-jazzy-stereo-msgs
+        ros-jazzy-sensor-msgs-py ros-jazzy-map-msgs
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rmw-implementation ros-jazzy-visualization-msgs
+          ros-jazzy-stereo-msgs ros-jazzy-sensor-msgs-py ros-jazzy-map-msgs
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_16_job_31:
+    name: tf2-eigen-kdl image-geometry pcl-msgs
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_15_job_27
+    - stage_15_job_28
+    - stage_15_job_29
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-tf2-eigen-kdl ros-jazzy-image-geometry ros-jazzy-pcl-msgs
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-tf2-eigen-kdl ros-jazzy-image-geometry ros-jazzy-pcl-msgs
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_17_job_32:
+    name: rcl common-interfaces
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_16_job_30
+    - stage_16_job_31
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rcl ros-jazzy-common-interfaces
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rcl ros-jazzy-common-interfaces
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_18_job_33:
+    name: libstatistics-collector rcl-lifecycle rcl-action
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_17_job_32
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-libstatistics-collector ros-jazzy-rcl-lifecycle ros-jazzy-rcl-action
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-libstatistics-collector ros-jazzy-rcl-lifecycle
+          ros-jazzy-rcl-action
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_19_job_34:
+    name: rclcpp rclpy
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_18_job_33
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rclcpp ros-jazzy-rclpy
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rclcpp ros-jazzy-rclpy
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_20_job_35:
+    name: rclcpp-lifecycle rclcpp-action launch-ros ros2cli rclcpp-components
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_19_job_34
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rclcpp-lifecycle ros-jazzy-rclcpp-action ros-jazzy-launch-ros
+        ros-jazzy-ros2cli ros-jazzy-rclcpp-components
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rclcpp-lifecycle ros-jazzy-rclcpp-action ros-jazzy-launch-ros
+          ros-jazzy-ros2cli ros-jazzy-rclcpp-components
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_20_job_36:
+    name: rosbag2-test-common tf2-py cv-bridge laser-geometry rqt-gui
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_19_job_34
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rosbag2-test-common ros-jazzy-tf2-py ros-jazzy-cv-bridge
+        ros-jazzy-laser-geometry ros-jazzy-rqt-gui
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rosbag2-test-common ros-jazzy-tf2-py ros-jazzy-cv-bridge
+          ros-jazzy-laser-geometry ros-jazzy-rqt-gui
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_20_job_37:
+    name: rqt-py-common rqt-gui-cpp teleop-twist-keyboard dummy-sensors dummy-map-server
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_19_job_34
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rqt-py-common ros-jazzy-rqt-gui-cpp ros-jazzy-teleop-twist-keyboard
+        ros-jazzy-dummy-sensors ros-jazzy-dummy-map-server
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rqt-py-common ros-jazzy-rqt-gui-cpp ros-jazzy-teleop-twist-keyboard
+          ros-jazzy-dummy-sensors ros-jazzy-dummy-map-server
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_20_job_38:
+    name: demo-nodes-py quality-of-service-demo-py intra-process-demo examples-rclpy-minimal-subscriber
+      examples-rclpy-minimal-service
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_19_job_34
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-demo-nodes-py ros-jazzy-quality-of-service-demo-py ros-jazzy-intra-process-demo
+        ros-jazzy-examples-rclpy-minimal-subscriber ros-jazzy-examples-rclpy-minimal-service
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-demo-nodes-py ros-jazzy-quality-of-service-demo-py
+          ros-jazzy-intra-process-demo ros-jazzy-examples-rclpy-minimal-subscriber
+          ros-jazzy-examples-rclpy-minimal-service
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_20_job_39:
+    name: examples-rclpy-minimal-publisher examples-rclpy-minimal-client examples-rclpy-minimal-action-server
+      examples-rclpy-minimal-action-client examples-rclpy-executors
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_19_job_34
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-examples-rclpy-minimal-publisher ros-jazzy-examples-rclpy-minimal-client
+        ros-jazzy-examples-rclpy-minimal-action-server ros-jazzy-examples-rclpy-minimal-action-client
+        ros-jazzy-examples-rclpy-executors
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-examples-rclpy-minimal-publisher ros-jazzy-examples-rclpy-minimal-client
+          ros-jazzy-examples-rclpy-minimal-action-server ros-jazzy-examples-rclpy-minimal-action-client
+          ros-jazzy-examples-rclpy-executors
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_20_job_40:
+    name: examples-rclcpp-multithreaded-executor examples-rclcpp-minimal-timer examples-rclcpp-minimal-service
+      examples-rclcpp-minimal-publisher examples-rclcpp-minimal-client
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_19_job_34
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-examples-rclcpp-multithreaded-executor ros-jazzy-examples-rclcpp-minimal-timer
+        ros-jazzy-examples-rclcpp-minimal-service ros-jazzy-examples-rclcpp-minimal-publisher
+        ros-jazzy-examples-rclcpp-minimal-client
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-examples-rclcpp-multithreaded-executor ros-jazzy-examples-rclcpp-minimal-timer
+          ros-jazzy-examples-rclcpp-minimal-service ros-jazzy-examples-rclcpp-minimal-publisher
+          ros-jazzy-examples-rclcpp-minimal-client
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_20_job_41:
+    name: action-tutorials-py
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_19_job_34
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-action-tutorials-py
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-action-tutorials-py
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_21_job_42:
+    name: launch-testing-ros message-filters ros2lifecycle-test-fixtures rosbag2-storage
+      ros2multicast
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_20_job_35
+    - stage_20_job_36
+    - stage_20_job_37
+    - stage_20_job_38
+    - stage_20_job_39
+    - stage_20_job_40
+    - stage_20_job_41
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-launch-testing-ros ros-jazzy-message-filters ros-jazzy-ros2lifecycle-test-fixtures
+        ros-jazzy-rosbag2-storage ros-jazzy-ros2multicast
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-launch-testing-ros ros-jazzy-message-filters ros-jazzy-ros2lifecycle-test-fixtures
+          ros-jazzy-rosbag2-storage ros-jazzy-ros2multicast
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_21_job_43:
+    name: tf2-ros-py ros-gz-bridge rqt-gui-py ros-gz-sim joy
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_20_job_35
+    - stage_20_job_36
+    - stage_20_job_37
+    - stage_20_job_38
+    - stage_20_job_39
+    - stage_20_job_40
+    - stage_20_job_41
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-tf2-ros-py ros-jazzy-ros-gz-bridge ros-jazzy-rqt-gui-py
+        ros-jazzy-ros-gz-sim ros-jazzy-joy
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-tf2-ros-py ros-jazzy-ros-gz-bridge ros-jazzy-rqt-gui-py
+          ros-jazzy-ros-gz-sim ros-jazzy-joy
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_21_job_44:
+    name: turtlesim topic-monitor quality-of-service-demo-cpp examples-rclcpp-minimal-subscriber
+      examples-rclcpp-minimal-composition
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_20_job_35
+    - stage_20_job_36
+    - stage_20_job_37
+    - stage_20_job_38
+    - stage_20_job_39
+    - stage_20_job_40
+    - stage_20_job_41
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-turtlesim ros-jazzy-topic-monitor ros-jazzy-quality-of-service-demo-cpp
+        ros-jazzy-examples-rclcpp-minimal-subscriber ros-jazzy-examples-rclcpp-minimal-composition
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-turtlesim ros-jazzy-topic-monitor ros-jazzy-quality-of-service-demo-cpp
+          ros-jazzy-examples-rclcpp-minimal-subscriber ros-jazzy-examples-rclcpp-minimal-composition
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_21_job_45:
+    name: examples-rclcpp-minimal-action-server examples-rclcpp-minimal-action-client
+      depthimage-to-laserscan action-tutorials-cpp
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_20_job_35
+    - stage_20_job_36
+    - stage_20_job_37
+    - stage_20_job_38
+    - stage_20_job_39
+    - stage_20_job_40
+    - stage_20_job_41
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-examples-rclcpp-minimal-action-server ros-jazzy-examples-rclcpp-minimal-action-client
+        ros-jazzy-depthimage-to-laserscan ros-jazzy-action-tutorials-cpp
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-examples-rclcpp-minimal-action-server ros-jazzy-examples-rclcpp-minimal-action-client
+          ros-jazzy-depthimage-to-laserscan ros-jazzy-action-tutorials-cpp
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_22_job_46:
+    name: ros2pkg ros2service ros2node tf2-ros ros2test
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_21_job_42
+    - stage_21_job_43
+    - stage_21_job_44
+    - stage_21_job_45
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-ros2pkg ros-jazzy-ros2service ros-jazzy-ros2node ros-jazzy-tf2-ros
+        ros-jazzy-ros2test
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-ros2pkg ros-jazzy-ros2service ros-jazzy-ros2node
+          ros-jazzy-tf2-ros ros-jazzy-ros2test
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_22_job_47:
+    name: ros2topic ros2interface ros2doctor ros2action rosbag2-storage-sqlite3
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_21_job_42
+    - stage_21_job_43
+    - stage_21_job_44
+    - stage_21_job_45
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-ros2topic ros-jazzy-ros2interface ros-jazzy-ros2doctor
+        ros-jazzy-ros2action ros-jazzy-rosbag2-storage-sqlite3
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-ros2topic ros-jazzy-ros2interface ros-jazzy-ros2doctor
+          ros-jazzy-ros2action ros-jazzy-rosbag2-storage-sqlite3
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_22_job_48:
+    name: rosbag2-storage-mcap point-cloud-transport image-transport rqt-plot pcl-conversions
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_21_job_42
+    - stage_21_job_43
+    - stage_21_job_44
+    - stage_21_job_45
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rosbag2-storage-mcap ros-jazzy-point-cloud-transport ros-jazzy-image-transport
+        ros-jazzy-rqt-plot ros-jazzy-pcl-conversions
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rosbag2-storage-mcap ros-jazzy-point-cloud-transport
+          ros-jazzy-image-transport ros-jazzy-rqt-plot ros-jazzy-pcl-conversions
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_22_job_49:
+    name: rqt-console tf2-tools teleop-twist-joy rqt-shell rqt-service-caller
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_21_job_42
+    - stage_21_job_43
+    - stage_21_job_44
+    - stage_21_job_45
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rqt-console ros-jazzy-tf2-tools ros-jazzy-teleop-twist-joy
+        ros-jazzy-rqt-shell ros-jazzy-rqt-service-caller
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rqt-console ros-jazzy-tf2-tools ros-jazzy-teleop-twist-joy
+          ros-jazzy-rqt-shell ros-jazzy-rqt-service-caller
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_22_job_50:
+    name: rqt-py-console rqt-publisher rqt-graph logging-demo image-tools
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_21_job_42
+    - stage_21_job_43
+    - stage_21_job_44
+    - stage_21_job_45
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rqt-py-console ros-jazzy-rqt-publisher ros-jazzy-rqt-graph
+        ros-jazzy-logging-demo ros-jazzy-image-tools
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rqt-py-console ros-jazzy-rqt-publisher ros-jazzy-rqt-graph
+          ros-jazzy-logging-demo ros-jazzy-image-tools
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_22_job_51:
+    name: demo-nodes-cpp-native demo-nodes-cpp composition
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_21_job_42
+    - stage_21_job_43
+    - stage_21_job_44
+    - stage_21_job_45
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-demo-nodes-cpp-native ros-jazzy-demo-nodes-cpp ros-jazzy-composition
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-demo-nodes-cpp-native ros-jazzy-demo-nodes-cpp
+          ros-jazzy-composition
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_23_job_52:
+    name: ros2run ros2param robot-state-publisher ros-testing ros2lifecycle
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_22_job_46
+    - stage_22_job_47
+    - stage_22_job_48
+    - stage_22_job_49
+    - stage_22_job_50
+    - stage_22_job_51
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-ros2run ros-jazzy-ros2param ros-jazzy-robot-state-publisher
+        ros-jazzy-ros-testing ros-jazzy-ros2lifecycle
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-ros2run ros-jazzy-ros2param ros-jazzy-robot-state-publisher
+          ros-jazzy-ros-testing ros-jazzy-ros2lifecycle
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_23_job_53:
+    name: ros2launch tf2-geometry-msgs rosbag2-storage-default-plugins tf2-kdl tf2-eigen
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_22_job_46
+    - stage_22_job_47
+    - stage_22_job_48
+    - stage_22_job_49
+    - stage_22_job_50
+    - stage_22_job_51
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-ros2launch ros-jazzy-tf2-geometry-msgs ros-jazzy-rosbag2-storage-default-plugins
+        ros-jazzy-tf2-kdl ros-jazzy-tf2-eigen
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-ros2launch ros-jazzy-tf2-geometry-msgs ros-jazzy-rosbag2-storage-default-plugins
+          ros-jazzy-tf2-kdl ros-jazzy-tf2-eigen
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_23_job_54:
+    name: tf2-sensor-msgs rviz-common zstd-image-transport theora-image-transport
+      compressed-image-transport
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_22_job_46
+    - stage_22_job_47
+    - stage_22_job_48
+    - stage_22_job_49
+    - stage_22_job_50
+    - stage_22_job_51
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-tf2-sensor-msgs ros-jazzy-rviz-common ros-jazzy-zstd-image-transport
+        ros-jazzy-theora-image-transport ros-jazzy-compressed-image-transport
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-tf2-sensor-msgs ros-jazzy-rviz-common ros-jazzy-zstd-image-transport
+          ros-jazzy-theora-image-transport ros-jazzy-compressed-image-transport
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_23_job_55:
+    name: compressed-depth-image-transport ros-gz-image rqt-topic rqt-image-view tf2-bullet
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_22_job_46
+    - stage_22_job_47
+    - stage_22_job_48
+    - stage_22_job_49
+    - stage_22_job_50
+    - stage_22_job_51
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-compressed-depth-image-transport ros-jazzy-ros-gz-image
+        ros-jazzy-rqt-topic ros-jazzy-rqt-image-view ros-jazzy-tf2-bullet
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-compressed-depth-image-transport ros-jazzy-ros-gz-image
+          ros-jazzy-rqt-topic ros-jazzy-rqt-image-view ros-jazzy-tf2-bullet
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_23_job_56:
+    name: rqt-msg rqt-reconfigure
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_22_job_46
+    - stage_22_job_47
+    - stage_22_job_48
+    - stage_22_job_49
+    - stage_22_job_50
+    - stage_22_job_51
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rqt-msg ros-jazzy-rqt-reconfigure
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rqt-msg ros-jazzy-rqt-reconfigure
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_24_job_57:
+    name: sros2 ros2component rosbag2-cpp rviz-visual-testing-framework interactive-markers
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_23_job_52
+    - stage_23_job_53
+    - stage_23_job_54
+    - stage_23_job_55
+    - stage_23_job_56
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-sros2 ros-jazzy-ros2component ros-jazzy-rosbag2-cpp ros-jazzy-rviz-visual-testing-framework
+        ros-jazzy-interactive-markers
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-sros2 ros-jazzy-ros2component ros-jazzy-rosbag2-cpp
+          ros-jazzy-rviz-visual-testing-framework ros-jazzy-interactive-markers
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_24_job_58:
+    name: image-transport-plugins geometry2 rqt-srv rqt-action lifecycle
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_23_job_52
+    - stage_23_job_53
+    - stage_23_job_54
+    - stage_23_job_55
+    - stage_23_job_56
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-image-transport-plugins ros-jazzy-geometry2 ros-jazzy-rqt-srv
+        ros-jazzy-rqt-action ros-jazzy-lifecycle
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-image-transport-plugins ros-jazzy-geometry2 ros-jazzy-rqt-srv
+          ros-jazzy-rqt-action ros-jazzy-lifecycle
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_24_job_59:
+    name: dummy-robot-bringup
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_23_job_52
+    - stage_23_job_53
+    - stage_23_job_54
+    - stage_23_job_55
+    - stage_23_job_56
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-dummy-robot-bringup
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-dummy-robot-bringup
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_25_job_60:
+    name: ros2cli-common-extensions rosbag2-compression rviz-default-plugins sros2-cmake
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_24_job_57
+    - stage_24_job_58
+    - stage_24_job_59
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-ros2cli-common-extensions ros-jazzy-rosbag2-compression
+        ros-jazzy-rviz-default-plugins ros-jazzy-sros2-cmake
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-ros2cli-common-extensions ros-jazzy-rosbag2-compression
+          ros-jazzy-rviz-default-plugins ros-jazzy-sros2-cmake
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_26_job_61:
+    name: rosbag2-compression-zstd rviz2 ros-core
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_25_job_60
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rosbag2-compression-zstd ros-jazzy-rviz2 ros-jazzy-ros-core
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rosbag2-compression-zstd ros-jazzy-rviz2 ros-jazzy-ros-core
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_27_job_62:
+    name: rosbag2-transport ros-gz-sim-demos rosbag2-py ros-gz
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_26_job_61
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rosbag2-transport ros-jazzy-ros-gz-sim-demos ros-jazzy-rosbag2-py
+        ros-jazzy-ros-gz
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rosbag2-transport ros-jazzy-ros-gz-sim-demos ros-jazzy-rosbag2-py
+          ros-jazzy-ros-gz
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_28_job_63:
+    name: ros2bag rqt-bag rosbag2-tests rosbag2
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_27_job_62
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-ros2bag ros-jazzy-rqt-bag ros-jazzy-rosbag2-tests ros-jazzy-rosbag2
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-ros2bag ros-jazzy-rqt-bag ros-jazzy-rosbag2-tests
+          ros-jazzy-rosbag2
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+  stage_29_job_64:
+    name: rqt-bag-plugins ros-base rqt-common-plugins desktop
+    runs-on: macos-13
+    strategy:
+      fail-fast: false
+    needs:
+    - stage_28_job_63
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v4
+    - name: Build ros-jazzy-rqt-bag-plugins ros-jazzy-ros-base ros-jazzy-rqt-common-plugins
+        ros-jazzy-desktop
+      env:
+        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
+        CURRENT_RECIPES: ros-jazzy-rqt-bag-plugins ros-jazzy-ros-base ros-jazzy-rqt-common-plugins
+          ros-jazzy-desktop
+      run: |
+        export CI=azure
+        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
+        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
+        .scripts/build_osx.sh
+name: build_osx
+on:
+  push:
+    branches:
+    - buildbranch_osx
diff --git a/activate.bat b/activate.bat
new file mode 100755
index 00000000..48ff1d71
--- /dev/null
+++ b/activate.bat
@@ -0,0 +1,15 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+@if not defined CONDA_PREFIX goto:eof
+
+@REM Don't do anything when we are in conda build.
+@if defined SYS_PREFIX exit /b 0
+
+@set "QT_PLUGIN_PATH=%CONDA_PREFIX%\Library\plugins"
+
+@call "%CONDA_PREFIX%\Library\local_setup.bat"
+@set PYTHONHOME=
+@set "ROS_OS_OVERRIDE=conda:win64"
+@set "ROS_ETC_DIR=%CONDA_PREFIX%\Library\etc\ros"
+@set "AMENT_PREFIX_PATH=%CONDA_PREFIX%\Library"
+@set "AMENT_PYTHON_EXECUTABLE=%CONDA_PREFIX%\python.exe"
diff --git a/activate.ps1 b/activate.ps1
new file mode 100755
index 00000000..137e67ae
--- /dev/null
+++ b/activate.ps1
@@ -0,0 +1,16 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+if ($null -eq ${env:CONDA_PREFIX}) { Exit }
+
+# Don't do anything when we are in conda build.
+if ($null -ne ${env:SYS_PREFIX}) { Exit 0 }
+
+$Env:QT_PLUGIN_PATH="${env:CONDA_PREFIX}\Library\plugins"
+
+& "${env:CONDA_PREFIX}\Library\local_setup.ps1"
+
+$Env:PYTHONHOME=''
+$Env:ROS_OS_OVERRIDE='conda:win64'
+$Env:ROS_ETC_DIR="${env:CONDA_PREFIX}\Library\etc\ros"
+$Env:AMENT_PREFIX_PATH="${env:CONDA_PREFIX}\Library"
+$Env:AMENT_PYTHON_EXECUTABLE="${env:CONDA_PREFIX}\python.exe"
diff --git a/activate.sh b/activate.sh
new file mode 100755
index 00000000..aece9708
--- /dev/null
+++ b/activate.sh
@@ -0,0 +1,26 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+# if [ -z "${CONDA_PREFIX}" ]; then
+#     exit 0;
+# fi
+
+# Not sure if this is necessary on UNIX?
+# export QT_PLUGIN_PATH=$CONDA_PREFIX\plugins
+
+if [ "$CONDA_BUILD" = "1" -a "$target_platform" != "$build_platform" ]; then
+    # ignore sourcing
+    echo "Not activating ROS when cross-compiling";
+else
+    source $CONDA_PREFIX/setup.sh
+fi
+
+case "$OSTYPE" in
+  darwin*)  export ROS_OS_OVERRIDE="conda:osx"; export RMW_IMPLEMENTATION="rmw_cyclonedds_cpp";;
+  linux*)   export ROS_OS_OVERRIDE="conda:linux";;
+esac
+
+export ROS_ETC_DIR=$CONDA_PREFIX/etc/ros
+export AMENT_PREFIX_PATH=$CONDA_PREFIX
+
+# Looks unnecessary for UNIX
+# unset PYTHONHOME=
diff --git a/bld_ament_cmake.bat b/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/bld_ament_python.bat b/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/bld_catkin.bat b/bld_catkin.bat
new file mode 100755
index 00000000..854efe1b
--- /dev/null
+++ b/bld_catkin.bat
@@ -0,0 +1,81 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+:: ROS_BUILD_SHARED_LIBS is always defined in CMake by catkin
+:: if ROS (1) is build as shared library . However, some packages are not
+:: passing compilation flags from CMake to other build systems (such as qmake),
+:: so we enable it explicitly via the CL environment variable, see
+:: https://learn.microsoft.com/en-us/cpp/build/reference/cl-environment-variables?view=msvc-170
+set CL=/DROS_BUILD_SHARED_LIBS=1 /DNOGDI=1
+
+set "CATKIN_BUILD_BINARY_PACKAGE_ARGS=-DCATKIN_BUILD_BINARY_PACKAGE=1"
+if "%PKG_NAME%" == "ros-jazzy-catkin" (
+    :: create catkin cookie to make it is a catkin workspace
+    type NUL > %LIBRARY_PREFIX%\.catkin
+    :: keep the workspace activation scripts (e.g., local_setup.bat)
+    set CATKIN_BUILD_BINARY_PACKAGE_ARGS=
+)
+
+rd /s /q build
+mkdir build
+pushd build
+
+set SKIP_TESTING=ON
+
+cmake ^
+    -G "Ninja" ^
+    --compile-no-warning-as-error ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=ON ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBoost_USE_STATIC_LIBS=OFF ^
+    %CATKIN_BUILD_BINARY_PACKAGE_ARGS% ^
+    -DCATKIN_SKIP_TESTING=%SKIP_TESTING% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+if "%PKG_NAME%" == "ros-jazzy-eigenpy" (
+    cmake --build . --config Release --target all --parallel 1
+    if errorlevel 1 exit 1
+) else (
+    cmake --build . --config Release --target all
+    if errorlevel 1 exit 1
+)
+
+if "%SKIP_TESTING%" == "OFF" (
+    cmake --build . --config Release --target run_tests
+    if errorlevel 1 exit 1
+)
+
+cmake --build . --config Release --target install
+if errorlevel 1 exit 1
+
+if "%PKG_NAME%" == "ros-jazzy-catkin" (
+    :: Copy the [de]activate scripts to %PREFIX%\etc\conda\[de]activate.d.
+    :: This will allow them to be run on environment activation.
+    for %%F in (activate deactivate) DO (
+        if not exist %PREFIX%\etc\conda\%%F.d mkdir %PREFIX%\etc\conda\%%F.d
+        copy %RECIPE_DIR%\%%F.bat %PREFIX%\etc\conda\%%F.d\%PKG_NAME%_%%F.bat
+    )
+)
+
+if "%PKG_NAME%" == "ros-jazzy-ros-workspace" (
+    :: Copy the [de]activate scripts to %PREFIX%\etc\conda\[de]activate.d.
+    :: This will allow them to be run on environment activation.
+    for %%F in (activate deactivate) DO (
+        if not exist %PREFIX%\etc\conda\%%F.d mkdir %PREFIX%\etc\conda\%%F.d
+        copy %RECIPE_DIR%\%%F.bat %PREFIX%\etc\conda\%%F.d\%PKG_NAME%_%%F.bat
+        copy %RECIPE_DIR%\%%F.ps1 %PREFIX%\etc\conda\%%F.d\%PKG_NAME%_%%F.ps1
+    )
+)
diff --git a/bld_catkin_merge.bat b/bld_catkin_merge.bat
new file mode 100755
index 00000000..0c8cef7c
--- /dev/null
+++ b/bld_catkin_merge.bat
@@ -0,0 +1,34 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+:: ROS_BUILD_SHARED_LIBS is always defined in CMake by catkin
+:: if ROS (1) is build as shared library . However, some packages are not
+:: passing compilation flags from CMake to other build systems (such as qmake),
+:: so we enable it explicitly via the CL environment variable, see
+:: https://learn.microsoft.com/en-us/cpp/build/reference/cl-environment-variables?view=msvc-170
+set CL=/DROS_BUILD_SHARED_LIBS=1 /DNOGDI=1
+
+set CATKIN_MAKE_ISOLATED=src\ros-jazzy-catkin\bin\catkin_make_isolated
+set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH:\=/%
+
+%PYTHON% %CATKIN_MAKE_ISOLATED% ^
+    --install-space %LIBRARY_PREFIX% ^
+    --use-ninja ^
+    --install ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DCATKIN_SKIP_TESTING=ON
+if errorlevel 1 exit 1
+
+:: Copy the [de]activate scripts to %PREFIX%\etc\conda\[de]activate.d.
+:: This will allow them to be run on environment activation.
+for %%F in (activate deactivate) DO (
+    if not exist %PREFIX%\etc\conda\%%F.d mkdir %PREFIX%\etc\conda\%%F.d
+    copy %RECIPE_DIR%\%%F.bat %PREFIX%\etc\conda\%%F.d\%PKG_NAME%_%%F.bat
+)
diff --git a/bld_colcon_merge.bat b/bld_colcon_merge.bat
new file mode 100755
index 00000000..b795d97d
--- /dev/null
+++ b/bld_colcon_merge.bat
@@ -0,0 +1,38 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+colcon build ^
+    --event-handlers console_cohesion+ ^
+    --merge-install ^
+    --install-base %LIBRARY_PREFIX% ^
+    --cmake-args ^
+    --compile-no-warning-as-error ^
+     -G Ninja ^
+     -DCMAKE_BUILD_TYPE=Release ^
+     -DBUILD_TESTING=OFF ^
+     -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+     -DPYTHON_EXECUTABLE=%PYTHON%
+if errorlevel 1 exit 1
+
+:: Copy the [de]activate scripts to %PREFIX%\etc\conda\[de]activate.d.
+:: This will allow them to be run on environment activation.
+for %%F in (activate deactivate) DO (
+    if not exist %PREFIX%\etc\conda\%%F.d mkdir %PREFIX%\etc\conda\%%F.d
+    copy %RECIPE_DIR%\%%F.bat %PREFIX%\etc\conda\%%F.d\%PKG_NAME%_%%F.bat
+)
diff --git a/build_ament_cmake.sh b/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/build_ament_python.sh b/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/build_catkin.sh b/build_catkin.sh
new file mode 100755
index 00000000..2992e047
--- /dev/null
+++ b/build_catkin.sh
@@ -0,0 +1,131 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+CATKIN_BUILD_BINARY_PACKAGE="ON"
+
+if [ "${PKG_NAME}" == "ros-jazzy-catkin" ]; then
+    # create catkin cookie to make it is a catkin workspace
+    touch $PREFIX/.catkin
+    # keep the workspace activation scripts (e.g., local_setup.bat)
+    CATKIN_BUILD_BINARY_PACKAGE="OFF"
+fi
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python $ROS_PYTHON_VERSION"
+# Fix up SP_DIR which for some reason might contain a path to a wrong Python version
+FIXED_SP_DIR=$(echo $SP_DIR | sed -E "s/python[0-9]+\.[0-9]+/python$ROS_PYTHON_VERSION/")
+echo "Using site-package dir ${FIXED_SP_DIR}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python$ROS_PYTHON_VERSION/site-packages~$BUILD_PREFIX/lib/python$ROS_PYTHON_VERSION/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python$ROS_PYTHON_VERSION/site-packages~$BUILD_PREFIX/lib/python$ROS_PYTHON_VERSION/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python$ROS_PYTHON_VERSION/site-packages~$BUILD_PREFIX/lib/python$ROS_PYTHON_VERSION/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+  # way around bad CPU type issues
+  # rm $PREFIX/bin/doxygen || echo "doxygen not found"
+  # rm $PREFIX/bin/dia || echo "dia not found"
+  # rm $PREFIX/bin/dot || echo "dot not found"
+fi
+
+# NOTE: there might be undefined references occurring
+# in the Boost.system library, depending on the C++ versions
+# used to compile Boost. We can avoid them by forcing the use of
+# the header-only version of the library.
+export CXXFLAGS="$CXXFLAGS -DBOOST_ERROR_CODE_HEADER_ONLY"
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="$CFLAGS -D__STDC_FORMAT_MACROS=1";
+    export CXXFLAGS="$CXXFLAGS -D__STDC_FORMAT_MACROS=1";
+    # I am too scared to turn this on for now ...
+    # export LDFLAGS="$LDFLAGS -lrt";
+    # Some qt stuff uses g++ directly - fix these use cases
+    ln -s $GXX $BUILD_PREFIX/bin/g++
+fi
+
+export SKIP_TESTING=ON
+
+cmake ${CMAKE_ARGS} --compile-no-warning-as-error \
+         -DCMAKE_INSTALL_PREFIX=$PREFIX \
+         -DCMAKE_PREFIX_PATH=$PREFIX \
+         -DCMAKE_BUILD_TYPE=Release \
+         -DCMAKE_INSTALL_LIBDIR=lib \
+         -DCMAKE_NO_SYSTEM_FROM_IMPORTED=ON \
+         -DCMAKE_FIND_FRAMEWORK=LAST \
+         -DBUILD_SHARED_LIBS=ON \
+         -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+         -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+         -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+         -DPython3_FIND_STRATEGY=LOCATION \
+         -DPYTHON_INSTALL_DIR=$FIXED_SP_DIR \
+         -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+         -DSETUPTOOLS_DEB_LAYOUT=OFF \
+         -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+         -DCATKIN_BUILD_BINARY_PACKAGE=$CATKIN_BUILD_BINARY_PACKAGE \
+         -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+         -G "Ninja" \
+         $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target all
+
+if [[ "$SKIP_TESTING" == "OFF" ]]; then
+    cmake --build . --config Release --target run_tests
+fi
+
+cmake --build . --config Release --target install
+
+if [ "${PKG_NAME}" == "ros-jazzy-catkin" ]; then
+    # Copy the [de]activate scripts to $PREFIX/etc/conda/[de]activate.d.
+    # This will allow them to be run on environment activation.
+    for CHANGE in "activate" "deactivate"
+    do
+        mkdir -p "${PREFIX}/etc/conda/${CHANGE}.d"
+        cp "${RECIPE_DIR}/${CHANGE}.sh" "${PREFIX}/etc/conda/${CHANGE}.d/${PKG_NAME}_${CHANGE}.sh"
+    done
+fi
+
+if [ "${PKG_NAME}" == "ros-jazzy-environment" ]; then
+   for SCRIPT in "1.ros_distro.sh" "1.ros_etc_dir.sh" "1.ros_package_path.sh" "1.ros_python_version.sh" "1.ros_version.sh"
+   do
+       mkdir -p "${PREFIX}/etc/conda/activate.d"
+       cp "${PREFIX}/etc/catkin/profile.d/${SCRIPT}" "${PREFIX}/etc/conda/activate.d/${SCRIPT}"
+   done
+fi
+
+if [ "${PKG_NAME}" == "ros-jazzy-ros-workspace" ]; then
+    # Copy the [de]activate scripts to $PREFIX/etc/conda/[de]activate.d.
+    # This will allow them to be run on environment activation.
+    for CHANGE in "activate" "deactivate"
+    do
+        mkdir -p "${PREFIX}/etc/conda/${CHANGE}.d"
+        cp "${RECIPE_DIR}/${CHANGE}.sh" "${PREFIX}/etc/conda/${CHANGE}.d/${PKG_NAME}_${CHANGE}.sh"
+    done
+fi
diff --git a/buildorder.txt b/buildorder.txt
new file mode 100644
index 00000000..6d572816
--- /dev/null
+++ b/buildorder.txt
@@ -0,0 +1,268 @@
+ros2-distro-mutex
+ros-jazzy-urdfdom-headers
+ros-jazzy-urdfdom
+ros-jazzy-urdfdom-py
+ros-jazzy-ament-lint-common
+ros-jazzy-foonathan-memory-vendor
+ros-jazzy-gz-cmake-vendor
+ros-jazzy-rviz-ogre-vendor
+ros-jazzy-rviz-assimp-vendor
+ros-jazzy-python-cmake-module
+ros-jazzy-rosidl-adapter
+ros-jazzy-performance-test-fixture
+ros-jazzy-mimick-vendor
+ros-jazzy-ament-cmake-ros
+ros-jazzy-rosidl-typesupport-interface
+ros-jazzy-fastrtps-cmake-module
+ros-jazzy-fastrtps
+ros-jazzy-rti-connext-dds-cmake-module
+ros-jazzy-rmw-implementation-cmake
+ros-jazzy-ament-index-cpp
+ros-jazzy-spdlog-vendor
+ros-jazzy-gz-utils-vendor
+ros-jazzy-gz-tools-vendor
+ros-jazzy-orocos-kdl-vendor
+ros-jazzy-python-qt-binding
+ros-jazzy-tango-icons-vendor
+ros-jazzy-keyboard-handler
+ros-jazzy-launch-testing-ament-cmake
+ros-jazzy-rosidl-parser
+ros-jazzy-tracetools
+ros-jazzy-libyaml-vendor
+ros-jazzy-console-bridge-vendor
+ros-jazzy-urdf-parser-plugin
+ros-jazzy-gz-math-vendor
+ros-jazzy-resource-retriever
+ros-jazzy-gz-plugin-vendor
+ros-jazzy-qt-gui
+ros-jazzy-qt-gui-py-common
+ros-jazzy-qt-dotgraph
+ros-jazzy-rcutils
+ros-jazzy-rosidl-pycommon
+ros-jazzy-rosidl-generator-type-description
+ros-jazzy-sdformat-vendor
+ros-jazzy-rviz-rendering
+ros-jazzy-gz-msgs-vendor
+ros-jazzy-gz-common-vendor
+ros-jazzy-rosidl-runtime-c
+ros-jazzy-rosidl-cmake
+ros-jazzy-rcpputils
+ros-jazzy-rviz-rendering-tests
+ros-jazzy-gz-transport-vendor
+ros-jazzy-gz-rendering-vendor
+ros-jazzy-gz-physics-vendor
+ros-jazzy-gz-fuel-tools-vendor
+ros-jazzy-rosidl-runtime-cpp
+ros-jazzy-rosidl-generator-c
+ros-jazzy-rosidl-dynamic-typesupport
+ros-jazzy-rcl-logging-interface
+ros-jazzy-class-loader
+ros-jazzy-gz-sensors-vendor
+ros-jazzy-gz-gui-vendor
+ros-jazzy-rosidl-generator-cpp
+ros-jazzy-rmw
+ros-jazzy-rosidl-typesupport-introspection-c
+ros-jazzy-rosidl-dynamic-typesupport-fastrtps
+ros-jazzy-rcl-logging-spdlog
+ros-jazzy-pluginlib
+ros-jazzy-gz-sim-vendor
+ros-jazzy-rosidl-typesupport-fastrtps-cpp
+ros-jazzy-rosidl-typesupport-introspection-cpp
+ros-jazzy-rcl-yaml-param-parser
+ros-jazzy-urdf
+ros-jazzy-qt-gui-cpp
+ros-jazzy-rosidl-typesupport-fastrtps-c
+ros-jazzy-sdformat-urdf
+ros-jazzy-kdl-parser
+ros-jazzy-rosidl-typesupport-c
+ros-jazzy-rosidl-typesupport-cpp
+ros-jazzy-rosidl-generator-py
+ros-jazzy-rosidl-core-runtime
+ros-jazzy-rosidl-core-generators
+ros-jazzy-builtin-interfaces
+ros-jazzy-unique-identifier-msgs
+ros-jazzy-service-msgs
+ros-jazzy-action-msgs
+ros-jazzy-type-description-interfaces
+ros-jazzy-rosidl-default-runtime
+ros-jazzy-rosidl-default-generators
+ros-jazzy-rmw-dds-common
+ros-jazzy-test-msgs
+ros-jazzy-rcl-interfaces
+ros-jazzy-std-msgs
+ros-jazzy-statistics-msgs
+ros-jazzy-rosgraph-msgs
+ros-jazzy-lifecycle-msgs
+ros-jazzy-std-srvs
+ros-jazzy-example-interfaces
+ros-jazzy-ros2cli-test-interfaces
+ros-jazzy-rosbag2-test-msgdefs
+ros-jazzy-rosbag2-interfaces
+ros-jazzy-action-tutorials-interfaces
+ros-jazzy-pendulum-msgs
+ros-jazzy-rmw-fastrtps-shared-cpp
+ros-jazzy-rmw-connextdds-common
+ros-jazzy-rmw-cyclonedds-cpp
+ros-jazzy-composition-interfaces
+ros-jazzy-geometry-msgs
+ros-jazzy-rosidl-runtime-py
+ros-jazzy-actionlib-msgs
+ros-jazzy-gps-msgs
+ros-jazzy-actuator-msgs
+ros-jazzy-rmw-fastrtps-dynamic-cpp
+ros-jazzy-rmw-fastrtps-cpp
+ros-jazzy-rmw-connextdds
+ros-jazzy-sensor-msgs
+ros-jazzy-trajectory-msgs
+ros-jazzy-tf2-msgs
+ros-jazzy-tf2
+ros-jazzy-diagnostic-msgs
+ros-jazzy-shape-msgs
+ros-jazzy-nav-msgs
+ros-jazzy-vision-msgs
+ros-jazzy-ros-gz-interfaces
+ros-jazzy-rmw-implementation
+ros-jazzy-visualization-msgs
+ros-jazzy-stereo-msgs
+ros-jazzy-sensor-msgs-py
+ros-jazzy-map-msgs
+ros-jazzy-tf2-eigen-kdl
+ros-jazzy-image-geometry
+ros-jazzy-pcl-msgs
+ros-jazzy-rcl
+ros-jazzy-common-interfaces
+ros-jazzy-libstatistics-collector
+ros-jazzy-rcl-lifecycle
+ros-jazzy-rcl-action
+ros-jazzy-rclcpp
+ros-jazzy-rclpy
+ros-jazzy-rclcpp-lifecycle
+ros-jazzy-rclcpp-action
+ros-jazzy-launch-ros
+ros-jazzy-ros2cli
+ros-jazzy-rclcpp-components
+ros-jazzy-rosbag2-test-common
+ros-jazzy-tf2-py
+ros-jazzy-cv-bridge
+ros-jazzy-laser-geometry
+ros-jazzy-rqt-gui
+ros-jazzy-rqt-py-common
+ros-jazzy-rqt-gui-cpp
+ros-jazzy-teleop-twist-keyboard
+ros-jazzy-dummy-sensors
+ros-jazzy-dummy-map-server
+ros-jazzy-demo-nodes-py
+ros-jazzy-quality-of-service-demo-py
+ros-jazzy-intra-process-demo
+ros-jazzy-examples-rclpy-minimal-subscriber
+ros-jazzy-examples-rclpy-minimal-service
+ros-jazzy-examples-rclpy-minimal-publisher
+ros-jazzy-examples-rclpy-minimal-client
+ros-jazzy-examples-rclpy-minimal-action-server
+ros-jazzy-examples-rclpy-minimal-action-client
+ros-jazzy-examples-rclpy-executors
+ros-jazzy-examples-rclcpp-multithreaded-executor
+ros-jazzy-examples-rclcpp-minimal-timer
+ros-jazzy-examples-rclcpp-minimal-service
+ros-jazzy-examples-rclcpp-minimal-publisher
+ros-jazzy-examples-rclcpp-minimal-client
+ros-jazzy-action-tutorials-py
+ros-jazzy-launch-testing-ros
+ros-jazzy-message-filters
+ros-jazzy-ros2lifecycle-test-fixtures
+ros-jazzy-rosbag2-storage
+ros-jazzy-ros2multicast
+ros-jazzy-tf2-ros-py
+ros-jazzy-ros-gz-bridge
+ros-jazzy-rqt-gui-py
+ros-jazzy-ros-gz-sim
+ros-jazzy-joy
+ros-jazzy-turtlesim
+ros-jazzy-topic-monitor
+ros-jazzy-quality-of-service-demo-cpp
+ros-jazzy-examples-rclcpp-minimal-subscriber
+ros-jazzy-examples-rclcpp-minimal-composition
+ros-jazzy-examples-rclcpp-minimal-action-server
+ros-jazzy-examples-rclcpp-minimal-action-client
+ros-jazzy-depthimage-to-laserscan
+ros-jazzy-action-tutorials-cpp
+ros-jazzy-ros2pkg
+ros-jazzy-ros2service
+ros-jazzy-ros2node
+ros-jazzy-tf2-ros
+ros-jazzy-ros2test
+ros-jazzy-ros2topic
+ros-jazzy-ros2interface
+ros-jazzy-ros2doctor
+ros-jazzy-ros2action
+ros-jazzy-rosbag2-storage-sqlite3
+ros-jazzy-rosbag2-storage-mcap
+ros-jazzy-point-cloud-transport
+ros-jazzy-image-transport
+ros-jazzy-rqt-plot
+ros-jazzy-pcl-conversions
+ros-jazzy-rqt-console
+ros-jazzy-tf2-tools
+ros-jazzy-teleop-twist-joy
+ros-jazzy-rqt-shell
+ros-jazzy-rqt-service-caller
+ros-jazzy-rqt-py-console
+ros-jazzy-rqt-publisher
+ros-jazzy-rqt-graph
+ros-jazzy-logging-demo
+ros-jazzy-image-tools
+ros-jazzy-demo-nodes-cpp-native
+ros-jazzy-demo-nodes-cpp
+ros-jazzy-composition
+ros-jazzy-ros2run
+ros-jazzy-ros2param
+ros-jazzy-robot-state-publisher
+ros-jazzy-ros-testing
+ros-jazzy-ros2lifecycle
+ros-jazzy-ros2launch
+ros-jazzy-tf2-geometry-msgs
+ros-jazzy-rosbag2-storage-default-plugins
+ros-jazzy-tf2-kdl
+ros-jazzy-tf2-eigen
+ros-jazzy-tf2-sensor-msgs
+ros-jazzy-rviz-common
+ros-jazzy-zstd-image-transport
+ros-jazzy-theora-image-transport
+ros-jazzy-compressed-image-transport
+ros-jazzy-compressed-depth-image-transport
+ros-jazzy-ros-gz-image
+ros-jazzy-rqt-topic
+ros-jazzy-rqt-image-view
+ros-jazzy-tf2-bullet
+ros-jazzy-rqt-msg
+ros-jazzy-rqt-reconfigure
+ros-jazzy-sros2
+ros-jazzy-ros2component
+ros-jazzy-rosbag2-cpp
+ros-jazzy-rviz-visual-testing-framework
+ros-jazzy-interactive-markers
+ros-jazzy-image-transport-plugins
+ros-jazzy-geometry2
+ros-jazzy-rqt-srv
+ros-jazzy-rqt-action
+ros-jazzy-lifecycle
+ros-jazzy-dummy-robot-bringup
+ros-jazzy-ros2cli-common-extensions
+ros-jazzy-rosbag2-compression
+ros-jazzy-rviz-default-plugins
+ros-jazzy-sros2-cmake
+ros-jazzy-rosbag2-compression-zstd
+ros-jazzy-rviz2
+ros-jazzy-ros-core
+ros-jazzy-rosbag2-transport
+ros-jazzy-ros-gz-sim-demos
+ros-jazzy-rosbag2-py
+ros-jazzy-ros-gz
+ros-jazzy-ros2bag
+ros-jazzy-rqt-bag
+ros-jazzy-rosbag2-tests
+ros-jazzy-rosbag2
+ros-jazzy-rqt-bag-plugins
+ros-jazzy-ros-base
+ros-jazzy-rqt-common-plugins
+ros-jazzy-desktop
\ No newline at end of file
diff --git a/deactivate.bat b/deactivate.bat
new file mode 100755
index 00000000..6de79cca
--- /dev/null
+++ b/deactivate.bat
@@ -0,0 +1,18 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+@if not defined CONDA_PREFIX goto:eof
+
+@set ROS_OS_OVERRIDE=
+@set ROS_DISTRO=
+@set ROS_ETC_DIR=
+@set ROS_PACKAGE_PATH=
+@set ROS_PYTHON_VERSION=
+@set ROS_VERSION=
+@set PYTHONHOME=
+@set PYTHONPATH=
+@set CMAKE_PREFIX_PATH=
+@set AMENT_PREFIX_PATH=
+@set COLCON_PREFIX_PATH=
+@set QT_PLUGIN_PATH=
+@set ROS_LOCALHOST_ONLY=
+@set ament_python_executable=
diff --git a/deactivate.ps1 b/deactivate.ps1
new file mode 100755
index 00000000..9db51e1c
--- /dev/null
+++ b/deactivate.ps1
@@ -0,0 +1,18 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+if ($null -eq ${env:CONDA_PREFIX}) { Exit }
+
+$Env:ROS_OS_OVERRIDE=''
+$Env:ROS_DISTRO=''
+$Env:ROS_ETC_DIR=''
+$Env:ROS_PACKAGE_PATH=''
+$Env:ROS_PYTHON_VERSION=''
+$Env:ROS_VERSION=''
+$Env:PYTHONHOME=''
+$Env:PYTHONPATH=''
+$Env:CMAKE_PREFIX_PATH=''
+$Env:AMENT_PREFIX_PATH=''
+$Env:COLCON_PREFIX_PATH=''
+$Env:QT_PLUGIN_PATH=''
+$Env:ROS_LOCALHOST_ONLY=''
+$Env:ament_python_executable=''
diff --git a/deactivate.sh b/deactivate.sh
new file mode 100755
index 00000000..87d4d835
--- /dev/null
+++ b/deactivate.sh
@@ -0,0 +1,21 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+if [ -z "${CONDA_PREFIX}" ]; then
+	exit 0
+fi
+
+unset ROS_DISTRO
+unset ROS_ETC_DIR
+unset ROS_PACKAGE_PATH
+unset ROS_PYTHON_VERSION
+unset CMAKE_PREFIX_PATH
+unset AMENT_PREFIX_PATH
+unset COLCON_PREFIX_PATH
+unset ROS_VERSION
+unset ROS_OS_OVERRIDE
+# unset PYTHONPATH
+# unset PYTHONHOME
+# unset QT_PLUGIN_PATH
+unset ROS_LOCALHOST_ONLY
+unset ament_python_executable
+unset RMW_IMPLEMENTATION
diff --git a/recipes/ros-jazzy-action-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-action-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-action-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-action-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-action-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-action-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-action-msgs/recipe.yaml b/recipes/ros-jazzy-action-msgs/recipe.yaml
new file mode 100644
index 00000000..f276843f
--- /dev/null
+++ b/recipes/ros-jazzy-action-msgs/recipe.yaml
@@ -0,0 +1,94 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-action-msgs
+  version: 2.0.2
+source:
+  git: https://github.com/ros2-gbp/rcl_interfaces-release.git
+  tag: release/jazzy/action_msgs/2.0.2-2
+  target_directory: ros-jazzy-action-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-core-generators
+    - ros-jazzy-service-msgs
+    - ros-jazzy-unique-identifier-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-core-runtime
+    - ros-jazzy-service-msgs
+    - ros-jazzy-unique-identifier-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-action-tutorials-cpp/bld_ament_cmake.bat b/recipes/ros-jazzy-action-tutorials-cpp/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-action-tutorials-cpp/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-action-tutorials-cpp/build_ament_cmake.sh b/recipes/ros-jazzy-action-tutorials-cpp/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-action-tutorials-cpp/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-action-tutorials-cpp/recipe.yaml b/recipes/ros-jazzy-action-tutorials-cpp/recipe.yaml
new file mode 100644
index 00000000..7397a334
--- /dev/null
+++ b/recipes/ros-jazzy-action-tutorials-cpp/recipe.yaml
@@ -0,0 +1,94 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-action-tutorials-cpp
+  version: 0.33.5
+source:
+  git: https://github.com/ros2-gbp/demos-release.git
+  tag: release/jazzy/action_tutorials_cpp/0.33.5-1
+  target_directory: ros-jazzy-action-tutorials-cpp/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-action-tutorials-interfaces
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-action
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-action-tutorials-interfaces
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-action
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-action-tutorials-interfaces/bld_ament_cmake.bat b/recipes/ros-jazzy-action-tutorials-interfaces/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-action-tutorials-interfaces/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-action-tutorials-interfaces/build_ament_cmake.sh b/recipes/ros-jazzy-action-tutorials-interfaces/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-action-tutorials-interfaces/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-action-tutorials-interfaces/recipe.yaml b/recipes/ros-jazzy-action-tutorials-interfaces/recipe.yaml
new file mode 100644
index 00000000..b369f3d4
--- /dev/null
+++ b/recipes/ros-jazzy-action-tutorials-interfaces/recipe.yaml
@@ -0,0 +1,88 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-action-tutorials-interfaces
+  version: 0.33.5
+source:
+  git: https://github.com/ros2-gbp/demos-release.git
+  tag: release/jazzy/action_tutorials_interfaces/0.33.5-1
+  target_directory: ros-jazzy-action-tutorials-interfaces/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-action-tutorials-py/bld_ament_python.bat b/recipes/ros-jazzy-action-tutorials-py/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-action-tutorials-py/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-action-tutorials-py/build_ament_python.sh b/recipes/ros-jazzy-action-tutorials-py/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-action-tutorials-py/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-action-tutorials-py/recipe.yaml b/recipes/ros-jazzy-action-tutorials-py/recipe.yaml
new file mode 100644
index 00000000..491876f7
--- /dev/null
+++ b/recipes/ros-jazzy-action-tutorials-py/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-action-tutorials-py
+  version: 0.33.5
+source:
+  git: https://github.com/ros2-gbp/demos-release.git
+  tag: release/jazzy/action_tutorials_py/0.33.5-1
+  target_directory: ros-jazzy-action-tutorials-py/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-action-tutorials-interfaces
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-action-tutorials-interfaces
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-actionlib-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-actionlib-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-actionlib-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-actionlib-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-actionlib-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-actionlib-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-actionlib-msgs/recipe.yaml b/recipes/ros-jazzy-actionlib-msgs/recipe.yaml
new file mode 100644
index 00000000..7d1aa3bf
--- /dev/null
+++ b/recipes/ros-jazzy-actionlib-msgs/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-actionlib-msgs
+  version: 5.3.5
+source:
+  git: https://github.com/ros2-gbp/common_interfaces-release.git
+  tag: release/jazzy/actionlib_msgs/5.3.5-1
+  target_directory: ros-jazzy-actionlib-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-actuator-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-actuator-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-actuator-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-actuator-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-actuator-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-actuator-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-actuator-msgs/recipe.yaml b/recipes/ros-jazzy-actuator-msgs/recipe.yaml
new file mode 100644
index 00000000..4b9f40c7
--- /dev/null
+++ b/recipes/ros-jazzy-actuator-msgs/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-actuator-msgs
+  version: 0.0.1
+source:
+  git: https://github.com/ros2-gbp/actuator_msgs-release.git
+  tag: release/jazzy/actuator_msgs/0.0.1-4
+  target_directory: ros-jazzy-actuator-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ament-cmake-ros/bld_ament_cmake.bat b/recipes/ros-jazzy-ament-cmake-ros/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-ament-cmake-ros/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ament-cmake-ros/build_ament_cmake.sh b/recipes/ros-jazzy-ament-cmake-ros/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-ament-cmake-ros/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-ament-cmake-ros/recipe.yaml b/recipes/ros-jazzy-ament-cmake-ros/recipe.yaml
new file mode 100644
index 00000000..42246313
--- /dev/null
+++ b/recipes/ros-jazzy-ament-cmake-ros/recipe.yaml
@@ -0,0 +1,95 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ament-cmake-ros
+  version: 0.12.0
+source:
+  git: https://github.com/ros2-gbp/ament_cmake_ros-release.git
+  tag: release/jazzy/ament_cmake_ros/0.12.0-3
+  target_directory: ros-jazzy-ament-cmake-ros/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-domain-coordinator
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-domain-coordinator
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ament-index-cpp/bld_ament_cmake.bat b/recipes/ros-jazzy-ament-index-cpp/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-ament-index-cpp/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ament-index-cpp/build_ament_cmake.sh b/recipes/ros-jazzy-ament-index-cpp/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-ament-index-cpp/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-ament-index-cpp/recipe.yaml b/recipes/ros-jazzy-ament-index-cpp/recipe.yaml
new file mode 100644
index 00000000..095aaa7c
--- /dev/null
+++ b/recipes/ros-jazzy-ament-index-cpp/recipe.yaml
@@ -0,0 +1,87 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ament-index-cpp
+  version: 1.8.1
+source:
+  git: https://github.com/ros2-gbp/ament_index-release.git
+  tag: release/jazzy/ament_index_cpp/1.8.1-1
+  target_directory: ros-jazzy-ament-index-cpp/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ament-lint-common/bld_ament_cmake.bat b/recipes/ros-jazzy-ament-lint-common/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-ament-lint-common/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ament-lint-common/build_ament_cmake.sh b/recipes/ros-jazzy-ament-lint-common/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-ament-lint-common/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-ament-lint-common/recipe.yaml b/recipes/ros-jazzy-ament-lint-common/recipe.yaml
new file mode 100644
index 00000000..76795fef
--- /dev/null
+++ b/recipes/ros-jazzy-ament-lint-common/recipe.yaml
@@ -0,0 +1,94 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ament-lint-common
+  version: 0.17.1
+source:
+  git: https://github.com/ros2-gbp/ament_lint-release.git
+  tag: release/jazzy/ament_lint_common/0.17.1-1
+  target_directory: ros-jazzy-ament-lint-common/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-export-dependencies
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake-copyright
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-cppcheck
+    - ros-jazzy-ament-cmake-cpplint
+    - ros-jazzy-ament-cmake-flake8
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-pep257
+    - ros-jazzy-ament-cmake-uncrustify
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-builtin-interfaces/bld_ament_cmake.bat b/recipes/ros-jazzy-builtin-interfaces/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-builtin-interfaces/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-builtin-interfaces/build_ament_cmake.sh b/recipes/ros-jazzy-builtin-interfaces/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-builtin-interfaces/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-builtin-interfaces/recipe.yaml b/recipes/ros-jazzy-builtin-interfaces/recipe.yaml
new file mode 100644
index 00000000..f4861d9b
--- /dev/null
+++ b/recipes/ros-jazzy-builtin-interfaces/recipe.yaml
@@ -0,0 +1,87 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-builtin-interfaces
+  version: 2.0.2
+source:
+  git: https://github.com/ros2-gbp/rcl_interfaces-release.git
+  tag: release/jazzy/builtin_interfaces/2.0.2-2
+  target_directory: ros-jazzy-builtin-interfaces/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-core-generators
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-core-runtime
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-class-loader/bld_ament_cmake.bat b/recipes/ros-jazzy-class-loader/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-class-loader/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-class-loader/build_ament_cmake.sh b/recipes/ros-jazzy-class-loader/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-class-loader/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-class-loader/recipe.yaml b/recipes/ros-jazzy-class-loader/recipe.yaml
new file mode 100644
index 00000000..423798a9
--- /dev/null
+++ b/recipes/ros-jazzy-class-loader/recipe.yaml
@@ -0,0 +1,94 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-class-loader
+  version: 2.7.0
+source:
+  git: https://github.com/ros2-gbp/class_loader-release.git
+  tag: release/jazzy/class_loader/2.7.0-3
+  target_directory: ros-jazzy-class-loader/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - console_bridge
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-console-bridge-vendor
+    - ros-jazzy-rcpputils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - console_bridge
+    - python
+    - ros-jazzy-console-bridge-vendor
+    - ros-jazzy-rcpputils
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-common-interfaces/bld_ament_cmake.bat b/recipes/ros-jazzy-common-interfaces/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-common-interfaces/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-common-interfaces/build_ament_cmake.sh b/recipes/ros-jazzy-common-interfaces/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-common-interfaces/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-common-interfaces/recipe.yaml b/recipes/ros-jazzy-common-interfaces/recipe.yaml
new file mode 100644
index 00000000..88abda2d
--- /dev/null
+++ b/recipes/ros-jazzy-common-interfaces/recipe.yaml
@@ -0,0 +1,98 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-common-interfaces
+  version: 5.3.5
+source:
+  git: https://github.com/ros2-gbp/common_interfaces-release.git
+  tag: release/jazzy/common_interfaces/5.3.5-1
+  target_directory: ros-jazzy-common-interfaces/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-actionlib-msgs
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-diagnostic-msgs
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-nav-msgs
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-shape-msgs
+    - ros-jazzy-std-msgs
+    - ros-jazzy-std-srvs
+    - ros-jazzy-stereo-msgs
+    - ros-jazzy-trajectory-msgs
+    - ros-jazzy-visualization-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-composition-interfaces/bld_ament_cmake.bat b/recipes/ros-jazzy-composition-interfaces/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-composition-interfaces/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-composition-interfaces/build_ament_cmake.sh b/recipes/ros-jazzy-composition-interfaces/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-composition-interfaces/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-composition-interfaces/recipe.yaml b/recipes/ros-jazzy-composition-interfaces/recipe.yaml
new file mode 100644
index 00000000..abfad0ef
--- /dev/null
+++ b/recipes/ros-jazzy-composition-interfaces/recipe.yaml
@@ -0,0 +1,89 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-composition-interfaces
+  version: 2.0.2
+source:
+  git: https://github.com/ros2-gbp/rcl_interfaces-release.git
+  tag: release/jazzy/composition_interfaces/2.0.2-2
+  target_directory: ros-jazzy-composition-interfaces/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-composition/bld_ament_cmake.bat b/recipes/ros-jazzy-composition/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-composition/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-composition/build_ament_cmake.sh b/recipes/ros-jazzy-composition/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-composition/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-composition/recipe.yaml b/recipes/ros-jazzy-composition/recipe.yaml
new file mode 100644
index 00000000..a3acf211
--- /dev/null
+++ b/recipes/ros-jazzy-composition/recipe.yaml
@@ -0,0 +1,103 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-composition
+  version: 0.33.5
+source:
+  git: https://github.com/ros2-gbp/demos-release.git
+  tag: release/jazzy/composition/0.33.5-1
+  target_directory: ros-jazzy-composition/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-example-interfaces
+    - ros-jazzy-launch
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ament-cmake
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw-implementation-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-example-interfaces
+    - ros-jazzy-launch-ros
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-compressed-depth-image-transport/bld_ament_cmake.bat b/recipes/ros-jazzy-compressed-depth-image-transport/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-compressed-depth-image-transport/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-compressed-depth-image-transport/build_ament_cmake.sh b/recipes/ros-jazzy-compressed-depth-image-transport/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-compressed-depth-image-transport/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-compressed-depth-image-transport/recipe.yaml b/recipes/ros-jazzy-compressed-depth-image-transport/recipe.yaml
new file mode 100644
index 00000000..626c4dc5
--- /dev/null
+++ b/recipes/ros-jazzy-compressed-depth-image-transport/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-compressed-depth-image-transport
+  version: 4.0.3
+source:
+  git: https://github.com/ros2-gbp/image_transport_plugins-release.git
+  tag: release/jazzy/compressed_depth_image_transport/4.0.3-1
+  target_directory: ros-jazzy-compressed-depth-image-transport/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-cv-bridge
+    - ros-jazzy-image-transport
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-cv-bridge
+    - ros-jazzy-image-transport
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-compressed-image-transport/bld_ament_cmake.bat b/recipes/ros-jazzy-compressed-image-transport/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-compressed-image-transport/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-compressed-image-transport/build_ament_cmake.sh b/recipes/ros-jazzy-compressed-image-transport/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-compressed-image-transport/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-compressed-image-transport/recipe.yaml b/recipes/ros-jazzy-compressed-image-transport/recipe.yaml
new file mode 100644
index 00000000..bf2b282e
--- /dev/null
+++ b/recipes/ros-jazzy-compressed-image-transport/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-compressed-image-transport
+  version: 4.0.3
+source:
+  git: https://github.com/ros2-gbp/image_transport_plugins-release.git
+  tag: release/jazzy/compressed_image_transport/4.0.3-1
+  target_directory: ros-jazzy-compressed-image-transport/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-cv-bridge
+    - ros-jazzy-image-transport
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-cv-bridge
+    - ros-jazzy-image-transport
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-console-bridge-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-console-bridge-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-console-bridge-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-console-bridge-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-console-bridge-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-console-bridge-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-console-bridge-vendor/recipe.yaml b/recipes/ros-jazzy-console-bridge-vendor/recipe.yaml
new file mode 100644
index 00000000..b311f074
--- /dev/null
+++ b/recipes/ros-jazzy-console-bridge-vendor/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-console-bridge-vendor
+  version: 1.7.1
+source:
+  git: https://github.com/ros2-gbp/console_bridge_vendor-release.git
+  tag: release/jazzy/console_bridge_vendor/1.7.1-3
+  target_directory: ros-jazzy-console-bridge-vendor/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - console_bridge
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-performance-test-fixture
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - console_bridge
+    - python
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-cv-bridge/bld_ament_cmake.bat b/recipes/ros-jazzy-cv-bridge/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-cv-bridge/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-cv-bridge/build_ament_cmake.sh b/recipes/ros-jazzy-cv-bridge/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-cv-bridge/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-cv-bridge/recipe.yaml b/recipes/ros-jazzy-cv-bridge/recipe.yaml
new file mode 100644
index 00000000..d14e8ee3
--- /dev/null
+++ b/recipes/ros-jazzy-cv-bridge/recipe.yaml
@@ -0,0 +1,115 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-cv-bridge
+  version: 4.1.0
+source:
+  git: https://github.com/ros2-gbp/vision_opencv-release.git
+  tag: release/jazzy/cv_bridge/4.1.0-1
+  target_directory: ros-jazzy-cv-bridge/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - libboost-devel
+    - libboost-python-devel
+    - libopencv
+    - numpy
+    - pip
+    - py-opencv
+    - python
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-python-cmake-module
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcpputils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - libboost-python
+    - libopencv
+    - numpy
+    - py-opencv
+    - python
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcpputils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-demo-nodes-cpp-native/bld_ament_cmake.bat b/recipes/ros-jazzy-demo-nodes-cpp-native/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-demo-nodes-cpp-native/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-demo-nodes-cpp-native/build_ament_cmake.sh b/recipes/ros-jazzy-demo-nodes-cpp-native/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-demo-nodes-cpp-native/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-demo-nodes-cpp-native/recipe.yaml b/recipes/ros-jazzy-demo-nodes-cpp-native/recipe.yaml
new file mode 100644
index 00000000..93d9596d
--- /dev/null
+++ b/recipes/ros-jazzy-demo-nodes-cpp-native/recipe.yaml
@@ -0,0 +1,99 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-demo-nodes-cpp-native
+  version: 0.33.5
+source:
+  git: https://github.com/ros2-gbp/demos-release.git
+  tag: release/jazzy/demo_nodes_cpp_native/0.33.5-1
+  target_directory: ros-jazzy-demo-nodes-cpp-native/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-launch
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ament-cmake
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-rmw-fastrtps-cpp
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-rmw-fastrtps-cpp
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-demo-nodes-cpp/bld_ament_cmake.bat b/recipes/ros-jazzy-demo-nodes-cpp/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-demo-nodes-cpp/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-demo-nodes-cpp/build_ament_cmake.sh b/recipes/ros-jazzy-demo-nodes-cpp/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-demo-nodes-cpp/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-demo-nodes-cpp/recipe.yaml b/recipes/ros-jazzy-demo-nodes-cpp/recipe.yaml
new file mode 100644
index 00000000..83507ce4
--- /dev/null
+++ b/recipes/ros-jazzy-demo-nodes-cpp/recipe.yaml
@@ -0,0 +1,111 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-demo-nodes-cpp
+  version: 0.33.5
+source:
+  git: https://github.com/ros2-gbp/demos-release.git
+  tag: release/jazzy/demo_nodes_cpp/0.33.5-1
+  target_directory: ros-jazzy-demo-nodes-cpp/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-example-interfaces
+    - ros-jazzy-launch
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ament-cmake
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-rcl
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-example-interfaces
+    - ros-jazzy-launch-ros
+    - ros-jazzy-launch-xml
+    - ros-jazzy-rcl
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-demo-nodes-py/bld_ament_python.bat b/recipes/ros-jazzy-demo-nodes-py/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-demo-nodes-py/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-demo-nodes-py/build_ament_python.sh b/recipes/ros-jazzy-demo-nodes-py/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-demo-nodes-py/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-demo-nodes-py/recipe.yaml b/recipes/ros-jazzy-demo-nodes-py/recipe.yaml
new file mode 100644
index 00000000..5e7f91c1
--- /dev/null
+++ b/recipes/ros-jazzy-demo-nodes-py/recipe.yaml
@@ -0,0 +1,93 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-demo-nodes-py
+  version: 0.33.5
+source:
+  git: https://github.com/ros2-gbp/demos-release.git
+  tag: release/jazzy/demo_nodes_py/0.33.5-1
+  target_directory: ros-jazzy-demo-nodes-py/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-example-interfaces
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-depthimage-to-laserscan/bld_ament_cmake.bat b/recipes/ros-jazzy-depthimage-to-laserscan/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-depthimage-to-laserscan/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-depthimage-to-laserscan/build_ament_cmake.sh b/recipes/ros-jazzy-depthimage-to-laserscan/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-depthimage-to-laserscan/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-depthimage-to-laserscan/recipe.yaml b/recipes/ros-jazzy-depthimage-to-laserscan/recipe.yaml
new file mode 100644
index 00000000..51b0c435
--- /dev/null
+++ b/recipes/ros-jazzy-depthimage-to-laserscan/recipe.yaml
@@ -0,0 +1,110 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-depthimage-to-laserscan
+  version: 2.5.1
+source:
+  git: https://github.com/ros2-gbp/depthimage_to_laserscan-release.git
+  tag: release/jazzy/depthimage_to_laserscan/2.5.1-3
+  target_directory: ros-jazzy-depthimage-to-laserscan/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - libopencv
+    - numpy
+    - pip
+    - py-opencv
+    - python
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-image-geometry
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - libopencv
+    - py-opencv
+    - python
+    - ros-jazzy-image-geometry
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-desktop/bld_ament_cmake.bat b/recipes/ros-jazzy-desktop/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-desktop/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-desktop/build_ament_cmake.sh b/recipes/ros-jazzy-desktop/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-desktop/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-desktop/recipe.yaml b/recipes/ros-jazzy-desktop/recipe.yaml
new file mode 100644
index 00000000..a1228844
--- /dev/null
+++ b/recipes/ros-jazzy-desktop/recipe.yaml
@@ -0,0 +1,129 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-desktop
+  version: 0.11.0
+source:
+  git: https://github.com/ros2-gbp/variants-release.git
+  tag: release/jazzy/desktop/0.11.0-1
+  target_directory: ros-jazzy-desktop/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-action-tutorials-cpp
+    - ros-jazzy-action-tutorials-interfaces
+    - ros-jazzy-action-tutorials-py
+    - ros-jazzy-angles
+    - ros-jazzy-composition
+    - ros-jazzy-demo-nodes-cpp
+    - ros-jazzy-demo-nodes-cpp-native
+    - ros-jazzy-demo-nodes-py
+    - ros-jazzy-depthimage-to-laserscan
+    - ros-jazzy-dummy-map-server
+    - ros-jazzy-dummy-robot-bringup
+    - ros-jazzy-dummy-sensors
+    - ros-jazzy-examples-rclcpp-minimal-action-client
+    - ros-jazzy-examples-rclcpp-minimal-action-server
+    - ros-jazzy-examples-rclcpp-minimal-client
+    - ros-jazzy-examples-rclcpp-minimal-composition
+    - ros-jazzy-examples-rclcpp-minimal-publisher
+    - ros-jazzy-examples-rclcpp-minimal-service
+    - ros-jazzy-examples-rclcpp-minimal-subscriber
+    - ros-jazzy-examples-rclcpp-minimal-timer
+    - ros-jazzy-examples-rclcpp-multithreaded-executor
+    - ros-jazzy-examples-rclpy-executors
+    - ros-jazzy-examples-rclpy-minimal-action-client
+    - ros-jazzy-examples-rclpy-minimal-action-server
+    - ros-jazzy-examples-rclpy-minimal-client
+    - ros-jazzy-examples-rclpy-minimal-publisher
+    - ros-jazzy-examples-rclpy-minimal-service
+    - ros-jazzy-examples-rclpy-minimal-subscriber
+    - ros-jazzy-image-tools
+    - ros-jazzy-intra-process-demo
+    - ros-jazzy-joy
+    - ros-jazzy-lifecycle
+    - ros-jazzy-logging-demo
+    - ros-jazzy-pcl-conversions
+    - ros-jazzy-pendulum-msgs
+    - ros-jazzy-quality-of-service-demo-cpp
+    - ros-jazzy-quality-of-service-demo-py
+    - ros-jazzy-ros-base
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rqt-common-plugins
+    - ros-jazzy-rviz-default-plugins
+    - ros-jazzy-rviz2
+    - ros-jazzy-teleop-twist-joy
+    - ros-jazzy-teleop-twist-keyboard
+    - ros-jazzy-topic-monitor
+    - ros-jazzy-turtlesim
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-diagnostic-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-diagnostic-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-diagnostic-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-diagnostic-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-diagnostic-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-diagnostic-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-diagnostic-msgs/recipe.yaml b/recipes/ros-jazzy-diagnostic-msgs/recipe.yaml
new file mode 100644
index 00000000..2b2d6084
--- /dev/null
+++ b/recipes/ros-jazzy-diagnostic-msgs/recipe.yaml
@@ -0,0 +1,93 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-diagnostic-msgs
+  version: 5.3.5
+source:
+  git: https://github.com/ros2-gbp/common_interfaces-release.git
+  tag: release/jazzy/diagnostic_msgs/5.3.5-1
+  target_directory: ros-jazzy-diagnostic-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-dummy-map-server/bld_ament_cmake.bat b/recipes/ros-jazzy-dummy-map-server/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-dummy-map-server/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-dummy-map-server/build_ament_cmake.sh b/recipes/ros-jazzy-dummy-map-server/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-dummy-map-server/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-dummy-map-server/recipe.yaml b/recipes/ros-jazzy-dummy-map-server/recipe.yaml
new file mode 100644
index 00000000..c034d2ce
--- /dev/null
+++ b/recipes/ros-jazzy-dummy-map-server/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-dummy-map-server
+  version: 0.33.5
+source:
+  git: https://github.com/ros2-gbp/demos-release.git
+  tag: release/jazzy/dummy_map_server/0.33.5-1
+  target_directory: ros-jazzy-dummy-map-server/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-nav-msgs
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-nav-msgs
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-dummy-robot-bringup/bld_ament_cmake.bat b/recipes/ros-jazzy-dummy-robot-bringup/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-dummy-robot-bringup/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-dummy-robot-bringup/build_ament_cmake.sh b/recipes/ros-jazzy-dummy-robot-bringup/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-dummy-robot-bringup/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-dummy-robot-bringup/recipe.yaml b/recipes/ros-jazzy-dummy-robot-bringup/recipe.yaml
new file mode 100644
index 00000000..7f6669a8
--- /dev/null
+++ b/recipes/ros-jazzy-dummy-robot-bringup/recipe.yaml
@@ -0,0 +1,93 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-dummy-robot-bringup
+  version: 0.33.5
+source:
+  git: https://github.com/ros2-gbp/demos-release.git
+  tag: release/jazzy/dummy_robot_bringup/0.33.5-1
+  target_directory: ros-jazzy-dummy-robot-bringup/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-dummy-map-server
+    - ros-jazzy-dummy-sensors
+    - ros-jazzy-launch
+    - ros-jazzy-launch-ros
+    - ros-jazzy-robot-state-publisher
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-dummy-sensors/bld_ament_cmake.bat b/recipes/ros-jazzy-dummy-sensors/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-dummy-sensors/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-dummy-sensors/build_ament_cmake.sh b/recipes/ros-jazzy-dummy-sensors/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-dummy-sensors/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-dummy-sensors/recipe.yaml b/recipes/ros-jazzy-dummy-sensors/recipe.yaml
new file mode 100644
index 00000000..d649866e
--- /dev/null
+++ b/recipes/ros-jazzy-dummy-sensors/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-dummy-sensors
+  version: 0.33.5
+source:
+  git: https://github.com/ros2-gbp/demos-release.git
+  tag: release/jazzy/dummy_sensors/0.33.5-1
+  target_directory: ros-jazzy-dummy-sensors/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-example-interfaces/bld_ament_cmake.bat b/recipes/ros-jazzy-example-interfaces/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-example-interfaces/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-example-interfaces/build_ament_cmake.sh b/recipes/ros-jazzy-example-interfaces/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-example-interfaces/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-example-interfaces/recipe.yaml b/recipes/ros-jazzy-example-interfaces/recipe.yaml
new file mode 100644
index 00000000..427eda8f
--- /dev/null
+++ b/recipes/ros-jazzy-example-interfaces/recipe.yaml
@@ -0,0 +1,86 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-example-interfaces
+  version: 0.12.0
+source:
+  git: https://github.com/ros2-gbp/example_interfaces-release.git
+  tag: release/jazzy/example_interfaces/0.12.0-3
+  target_directory: ros-jazzy-example-interfaces/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-action-client/bld_ament_cmake.bat b/recipes/ros-jazzy-examples-rclcpp-minimal-action-client/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-action-client/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-action-client/build_ament_cmake.sh b/recipes/ros-jazzy-examples-rclcpp-minimal-action-client/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-action-client/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-action-client/recipe.yaml b/recipes/ros-jazzy-examples-rclcpp-minimal-action-client/recipe.yaml
new file mode 100644
index 00000000..ff32ce1a
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-action-client/recipe.yaml
@@ -0,0 +1,92 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-examples-rclcpp-minimal-action-client
+  version: 0.19.4
+source:
+  git: https://github.com/ros2-gbp/examples-release.git
+  tag: release/jazzy/examples_rclcpp_minimal_action_client/0.19.4-1
+  target_directory: ros-jazzy-examples-rclcpp-minimal-action-client/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-example-interfaces
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-action
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-example-interfaces
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-action
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-action-server/bld_ament_cmake.bat b/recipes/ros-jazzy-examples-rclcpp-minimal-action-server/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-action-server/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-action-server/build_ament_cmake.sh b/recipes/ros-jazzy-examples-rclcpp-minimal-action-server/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-action-server/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-action-server/recipe.yaml b/recipes/ros-jazzy-examples-rclcpp-minimal-action-server/recipe.yaml
new file mode 100644
index 00000000..4d2b6d8f
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-action-server/recipe.yaml
@@ -0,0 +1,92 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-examples-rclcpp-minimal-action-server
+  version: 0.19.4
+source:
+  git: https://github.com/ros2-gbp/examples-release.git
+  tag: release/jazzy/examples_rclcpp_minimal_action_server/0.19.4-1
+  target_directory: ros-jazzy-examples-rclcpp-minimal-action-server/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-example-interfaces
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-action
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-example-interfaces
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-action
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-client/bld_ament_cmake.bat b/recipes/ros-jazzy-examples-rclcpp-minimal-client/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-client/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-client/build_ament_cmake.sh b/recipes/ros-jazzy-examples-rclcpp-minimal-client/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-client/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-client/recipe.yaml b/recipes/ros-jazzy-examples-rclcpp-minimal-client/recipe.yaml
new file mode 100644
index 00000000..db18b4e0
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-client/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-examples-rclcpp-minimal-client
+  version: 0.19.4
+source:
+  git: https://github.com/ros2-gbp/examples-release.git
+  tag: release/jazzy/examples_rclcpp_minimal_client/0.19.4-1
+  target_directory: ros-jazzy-examples-rclcpp-minimal-client/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-example-interfaces
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-example-interfaces
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-composition/bld_ament_cmake.bat b/recipes/ros-jazzy-examples-rclcpp-minimal-composition/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-composition/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-composition/build_ament_cmake.sh b/recipes/ros-jazzy-examples-rclcpp-minimal-composition/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-composition/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-composition/recipe.yaml b/recipes/ros-jazzy-examples-rclcpp-minimal-composition/recipe.yaml
new file mode 100644
index 00000000..c97b7c4d
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-composition/recipe.yaml
@@ -0,0 +1,92 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-examples-rclcpp-minimal-composition
+  version: 0.19.4
+source:
+  git: https://github.com/ros2-gbp/examples-release.git
+  tag: release/jazzy/examples_rclcpp_minimal_composition/0.19.4-1
+  target_directory: ros-jazzy-examples-rclcpp-minimal-composition/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-publisher/bld_ament_cmake.bat b/recipes/ros-jazzy-examples-rclcpp-minimal-publisher/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-publisher/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-publisher/build_ament_cmake.sh b/recipes/ros-jazzy-examples-rclcpp-minimal-publisher/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-publisher/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-publisher/recipe.yaml b/recipes/ros-jazzy-examples-rclcpp-minimal-publisher/recipe.yaml
new file mode 100644
index 00000000..6f7f1ca6
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-publisher/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-examples-rclcpp-minimal-publisher
+  version: 0.19.4
+source:
+  git: https://github.com/ros2-gbp/examples-release.git
+  tag: release/jazzy/examples_rclcpp_minimal_publisher/0.19.4-1
+  target_directory: ros-jazzy-examples-rclcpp-minimal-publisher/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-service/bld_ament_cmake.bat b/recipes/ros-jazzy-examples-rclcpp-minimal-service/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-service/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-service/build_ament_cmake.sh b/recipes/ros-jazzy-examples-rclcpp-minimal-service/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-service/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-service/recipe.yaml b/recipes/ros-jazzy-examples-rclcpp-minimal-service/recipe.yaml
new file mode 100644
index 00000000..200d8e7e
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-service/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-examples-rclcpp-minimal-service
+  version: 0.19.4
+source:
+  git: https://github.com/ros2-gbp/examples-release.git
+  tag: release/jazzy/examples_rclcpp_minimal_service/0.19.4-1
+  target_directory: ros-jazzy-examples-rclcpp-minimal-service/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-example-interfaces
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-example-interfaces
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-subscriber/bld_ament_cmake.bat b/recipes/ros-jazzy-examples-rclcpp-minimal-subscriber/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-subscriber/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-subscriber/build_ament_cmake.sh b/recipes/ros-jazzy-examples-rclcpp-minimal-subscriber/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-subscriber/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-subscriber/recipe.yaml b/recipes/ros-jazzy-examples-rclcpp-minimal-subscriber/recipe.yaml
new file mode 100644
index 00000000..d5c062b3
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-subscriber/recipe.yaml
@@ -0,0 +1,92 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-examples-rclcpp-minimal-subscriber
+  version: 0.19.4
+source:
+  git: https://github.com/ros2-gbp/examples-release.git
+  tag: release/jazzy/examples_rclcpp_minimal_subscriber/0.19.4-1
+  target_directory: ros-jazzy-examples-rclcpp-minimal-subscriber/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-timer/bld_ament_cmake.bat b/recipes/ros-jazzy-examples-rclcpp-minimal-timer/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-timer/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-timer/build_ament_cmake.sh b/recipes/ros-jazzy-examples-rclcpp-minimal-timer/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-timer/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-examples-rclcpp-minimal-timer/recipe.yaml b/recipes/ros-jazzy-examples-rclcpp-minimal-timer/recipe.yaml
new file mode 100644
index 00000000..c0440a3a
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-minimal-timer/recipe.yaml
@@ -0,0 +1,88 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-examples-rclcpp-minimal-timer
+  version: 0.19.4
+source:
+  git: https://github.com/ros2-gbp/examples-release.git
+  tag: release/jazzy/examples_rclcpp_minimal_timer/0.19.4-1
+  target_directory: ros-jazzy-examples-rclcpp-minimal-timer/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-examples-rclcpp-multithreaded-executor/bld_ament_cmake.bat b/recipes/ros-jazzy-examples-rclcpp-multithreaded-executor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-multithreaded-executor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-examples-rclcpp-multithreaded-executor/build_ament_cmake.sh b/recipes/ros-jazzy-examples-rclcpp-multithreaded-executor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-multithreaded-executor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-examples-rclcpp-multithreaded-executor/recipe.yaml b/recipes/ros-jazzy-examples-rclcpp-multithreaded-executor/recipe.yaml
new file mode 100644
index 00000000..55c401c0
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclcpp-multithreaded-executor/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-examples-rclcpp-multithreaded-executor
+  version: 0.19.4
+source:
+  git: https://github.com/ros2-gbp/examples-release.git
+  tag: release/jazzy/examples_rclcpp_multithreaded_executor/0.19.4-1
+  target_directory: ros-jazzy-examples-rclcpp-multithreaded-executor/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-examples-rclpy-executors/bld_ament_python.bat b/recipes/ros-jazzy-examples-rclpy-executors/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-executors/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-examples-rclpy-executors/build_ament_python.sh b/recipes/ros-jazzy-examples-rclpy-executors/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-executors/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-examples-rclpy-executors/recipe.yaml b/recipes/ros-jazzy-examples-rclpy-executors/recipe.yaml
new file mode 100644
index 00000000..cc563a68
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-executors/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-examples-rclpy-executors
+  version: 0.19.4
+source:
+  git: https://github.com/ros2-gbp/examples-release.git
+  tag: release/jazzy/examples_rclpy_executors/0.19.4-1
+  target_directory: ros-jazzy-examples-rclpy-executors/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-examples-rclpy-minimal-action-client/bld_ament_python.bat b/recipes/ros-jazzy-examples-rclpy-minimal-action-client/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-minimal-action-client/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-examples-rclpy-minimal-action-client/build_ament_python.sh b/recipes/ros-jazzy-examples-rclpy-minimal-action-client/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-minimal-action-client/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-examples-rclpy-minimal-action-client/recipe.yaml b/recipes/ros-jazzy-examples-rclpy-minimal-action-client/recipe.yaml
new file mode 100644
index 00000000..0e9dd898
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-minimal-action-client/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-examples-rclpy-minimal-action-client
+  version: 0.19.4
+source:
+  git: https://github.com/ros2-gbp/examples-release.git
+  tag: release/jazzy/examples_rclpy_minimal_action_client/0.19.4-1
+  target_directory: ros-jazzy-examples-rclpy-minimal-action-client/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-action-msgs
+    - ros-jazzy-example-interfaces
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-examples-rclpy-minimal-action-server/bld_ament_python.bat b/recipes/ros-jazzy-examples-rclpy-minimal-action-server/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-minimal-action-server/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-examples-rclpy-minimal-action-server/build_ament_python.sh b/recipes/ros-jazzy-examples-rclpy-minimal-action-server/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-minimal-action-server/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-examples-rclpy-minimal-action-server/recipe.yaml b/recipes/ros-jazzy-examples-rclpy-minimal-action-server/recipe.yaml
new file mode 100644
index 00000000..e2bb1c3e
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-minimal-action-server/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-examples-rclpy-minimal-action-server
+  version: 0.19.4
+source:
+  git: https://github.com/ros2-gbp/examples-release.git
+  tag: release/jazzy/examples_rclpy_minimal_action_server/0.19.4-1
+  target_directory: ros-jazzy-examples-rclpy-minimal-action-server/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-example-interfaces
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-examples-rclpy-minimal-client/bld_ament_python.bat b/recipes/ros-jazzy-examples-rclpy-minimal-client/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-minimal-client/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-examples-rclpy-minimal-client/build_ament_python.sh b/recipes/ros-jazzy-examples-rclpy-minimal-client/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-minimal-client/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-examples-rclpy-minimal-client/recipe.yaml b/recipes/ros-jazzy-examples-rclpy-minimal-client/recipe.yaml
new file mode 100644
index 00000000..b8db2edc
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-minimal-client/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-examples-rclpy-minimal-client
+  version: 0.19.4
+source:
+  git: https://github.com/ros2-gbp/examples-release.git
+  tag: release/jazzy/examples_rclpy_minimal_client/0.19.4-1
+  target_directory: ros-jazzy-examples-rclpy-minimal-client/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-example-interfaces
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-examples-rclpy-minimal-publisher/bld_ament_python.bat b/recipes/ros-jazzy-examples-rclpy-minimal-publisher/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-minimal-publisher/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-examples-rclpy-minimal-publisher/build_ament_python.sh b/recipes/ros-jazzy-examples-rclpy-minimal-publisher/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-minimal-publisher/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-examples-rclpy-minimal-publisher/recipe.yaml b/recipes/ros-jazzy-examples-rclpy-minimal-publisher/recipe.yaml
new file mode 100644
index 00000000..51a28197
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-minimal-publisher/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-examples-rclpy-minimal-publisher
+  version: 0.19.4
+source:
+  git: https://github.com/ros2-gbp/examples-release.git
+  tag: release/jazzy/examples_rclpy_minimal_publisher/0.19.4-1
+  target_directory: ros-jazzy-examples-rclpy-minimal-publisher/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-examples-rclpy-minimal-service/bld_ament_python.bat b/recipes/ros-jazzy-examples-rclpy-minimal-service/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-minimal-service/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-examples-rclpy-minimal-service/build_ament_python.sh b/recipes/ros-jazzy-examples-rclpy-minimal-service/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-minimal-service/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-examples-rclpy-minimal-service/recipe.yaml b/recipes/ros-jazzy-examples-rclpy-minimal-service/recipe.yaml
new file mode 100644
index 00000000..60eb3475
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-minimal-service/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-examples-rclpy-minimal-service
+  version: 0.19.4
+source:
+  git: https://github.com/ros2-gbp/examples-release.git
+  tag: release/jazzy/examples_rclpy_minimal_service/0.19.4-1
+  target_directory: ros-jazzy-examples-rclpy-minimal-service/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-example-interfaces
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-examples-rclpy-minimal-subscriber/bld_ament_python.bat b/recipes/ros-jazzy-examples-rclpy-minimal-subscriber/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-minimal-subscriber/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-examples-rclpy-minimal-subscriber/build_ament_python.sh b/recipes/ros-jazzy-examples-rclpy-minimal-subscriber/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-minimal-subscriber/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-examples-rclpy-minimal-subscriber/recipe.yaml b/recipes/ros-jazzy-examples-rclpy-minimal-subscriber/recipe.yaml
new file mode 100644
index 00000000..1f844cc1
--- /dev/null
+++ b/recipes/ros-jazzy-examples-rclpy-minimal-subscriber/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-examples-rclpy-minimal-subscriber
+  version: 0.19.4
+source:
+  git: https://github.com/ros2-gbp/examples-release.git
+  tag: release/jazzy/examples_rclpy_minimal_subscriber/0.19.4-1
+  target_directory: ros-jazzy-examples-rclpy-minimal-subscriber/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-fastrtps-cmake-module/bld_ament_cmake.bat b/recipes/ros-jazzy-fastrtps-cmake-module/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-fastrtps-cmake-module/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-fastrtps-cmake-module/build_ament_cmake.sh b/recipes/ros-jazzy-fastrtps-cmake-module/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-fastrtps-cmake-module/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-fastrtps-cmake-module/recipe.yaml b/recipes/ros-jazzy-fastrtps-cmake-module/recipe.yaml
new file mode 100644
index 00000000..70c5625c
--- /dev/null
+++ b/recipes/ros-jazzy-fastrtps-cmake-module/recipe.yaml
@@ -0,0 +1,86 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-fastrtps-cmake-module
+  version: 3.6.1
+source:
+  git: https://github.com/ros2-gbp/rosidl_typesupport_fastrtps-release.git
+  tag: release/jazzy/fastrtps_cmake_module/3.6.1-1
+  target_directory: ros-jazzy-fastrtps-cmake-module/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-fastrtps/bld_catkin.bat b/recipes/ros-jazzy-fastrtps/bld_catkin.bat
new file mode 100755
index 00000000..854efe1b
--- /dev/null
+++ b/recipes/ros-jazzy-fastrtps/bld_catkin.bat
@@ -0,0 +1,81 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+:: ROS_BUILD_SHARED_LIBS is always defined in CMake by catkin
+:: if ROS (1) is build as shared library . However, some packages are not
+:: passing compilation flags from CMake to other build systems (such as qmake),
+:: so we enable it explicitly via the CL environment variable, see
+:: https://learn.microsoft.com/en-us/cpp/build/reference/cl-environment-variables?view=msvc-170
+set CL=/DROS_BUILD_SHARED_LIBS=1 /DNOGDI=1
+
+set "CATKIN_BUILD_BINARY_PACKAGE_ARGS=-DCATKIN_BUILD_BINARY_PACKAGE=1"
+if "%PKG_NAME%" == "ros-jazzy-catkin" (
+    :: create catkin cookie to make it is a catkin workspace
+    type NUL > %LIBRARY_PREFIX%\.catkin
+    :: keep the workspace activation scripts (e.g., local_setup.bat)
+    set CATKIN_BUILD_BINARY_PACKAGE_ARGS=
+)
+
+rd /s /q build
+mkdir build
+pushd build
+
+set SKIP_TESTING=ON
+
+cmake ^
+    -G "Ninja" ^
+    --compile-no-warning-as-error ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=ON ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBoost_USE_STATIC_LIBS=OFF ^
+    %CATKIN_BUILD_BINARY_PACKAGE_ARGS% ^
+    -DCATKIN_SKIP_TESTING=%SKIP_TESTING% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+if "%PKG_NAME%" == "ros-jazzy-eigenpy" (
+    cmake --build . --config Release --target all --parallel 1
+    if errorlevel 1 exit 1
+) else (
+    cmake --build . --config Release --target all
+    if errorlevel 1 exit 1
+)
+
+if "%SKIP_TESTING%" == "OFF" (
+    cmake --build . --config Release --target run_tests
+    if errorlevel 1 exit 1
+)
+
+cmake --build . --config Release --target install
+if errorlevel 1 exit 1
+
+if "%PKG_NAME%" == "ros-jazzy-catkin" (
+    :: Copy the [de]activate scripts to %PREFIX%\etc\conda\[de]activate.d.
+    :: This will allow them to be run on environment activation.
+    for %%F in (activate deactivate) DO (
+        if not exist %PREFIX%\etc\conda\%%F.d mkdir %PREFIX%\etc\conda\%%F.d
+        copy %RECIPE_DIR%\%%F.bat %PREFIX%\etc\conda\%%F.d\%PKG_NAME%_%%F.bat
+    )
+)
+
+if "%PKG_NAME%" == "ros-jazzy-ros-workspace" (
+    :: Copy the [de]activate scripts to %PREFIX%\etc\conda\[de]activate.d.
+    :: This will allow them to be run on environment activation.
+    for %%F in (activate deactivate) DO (
+        if not exist %PREFIX%\etc\conda\%%F.d mkdir %PREFIX%\etc\conda\%%F.d
+        copy %RECIPE_DIR%\%%F.bat %PREFIX%\etc\conda\%%F.d\%PKG_NAME%_%%F.bat
+        copy %RECIPE_DIR%\%%F.ps1 %PREFIX%\etc\conda\%%F.d\%PKG_NAME%_%%F.ps1
+    )
+)
diff --git a/recipes/ros-jazzy-fastrtps/build_catkin.sh b/recipes/ros-jazzy-fastrtps/build_catkin.sh
new file mode 100755
index 00000000..2992e047
--- /dev/null
+++ b/recipes/ros-jazzy-fastrtps/build_catkin.sh
@@ -0,0 +1,131 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+CATKIN_BUILD_BINARY_PACKAGE="ON"
+
+if [ "${PKG_NAME}" == "ros-jazzy-catkin" ]; then
+    # create catkin cookie to make it is a catkin workspace
+    touch $PREFIX/.catkin
+    # keep the workspace activation scripts (e.g., local_setup.bat)
+    CATKIN_BUILD_BINARY_PACKAGE="OFF"
+fi
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python $ROS_PYTHON_VERSION"
+# Fix up SP_DIR which for some reason might contain a path to a wrong Python version
+FIXED_SP_DIR=$(echo $SP_DIR | sed -E "s/python[0-9]+\.[0-9]+/python$ROS_PYTHON_VERSION/")
+echo "Using site-package dir ${FIXED_SP_DIR}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python$ROS_PYTHON_VERSION/site-packages~$BUILD_PREFIX/lib/python$ROS_PYTHON_VERSION/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python$ROS_PYTHON_VERSION/site-packages~$BUILD_PREFIX/lib/python$ROS_PYTHON_VERSION/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python$ROS_PYTHON_VERSION/site-packages~$BUILD_PREFIX/lib/python$ROS_PYTHON_VERSION/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+  # way around bad CPU type issues
+  # rm $PREFIX/bin/doxygen || echo "doxygen not found"
+  # rm $PREFIX/bin/dia || echo "dia not found"
+  # rm $PREFIX/bin/dot || echo "dot not found"
+fi
+
+# NOTE: there might be undefined references occurring
+# in the Boost.system library, depending on the C++ versions
+# used to compile Boost. We can avoid them by forcing the use of
+# the header-only version of the library.
+export CXXFLAGS="$CXXFLAGS -DBOOST_ERROR_CODE_HEADER_ONLY"
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="$CFLAGS -D__STDC_FORMAT_MACROS=1";
+    export CXXFLAGS="$CXXFLAGS -D__STDC_FORMAT_MACROS=1";
+    # I am too scared to turn this on for now ...
+    # export LDFLAGS="$LDFLAGS -lrt";
+    # Some qt stuff uses g++ directly - fix these use cases
+    ln -s $GXX $BUILD_PREFIX/bin/g++
+fi
+
+export SKIP_TESTING=ON
+
+cmake ${CMAKE_ARGS} --compile-no-warning-as-error \
+         -DCMAKE_INSTALL_PREFIX=$PREFIX \
+         -DCMAKE_PREFIX_PATH=$PREFIX \
+         -DCMAKE_BUILD_TYPE=Release \
+         -DCMAKE_INSTALL_LIBDIR=lib \
+         -DCMAKE_NO_SYSTEM_FROM_IMPORTED=ON \
+         -DCMAKE_FIND_FRAMEWORK=LAST \
+         -DBUILD_SHARED_LIBS=ON \
+         -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+         -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+         -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+         -DPython3_FIND_STRATEGY=LOCATION \
+         -DPYTHON_INSTALL_DIR=$FIXED_SP_DIR \
+         -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+         -DSETUPTOOLS_DEB_LAYOUT=OFF \
+         -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+         -DCATKIN_BUILD_BINARY_PACKAGE=$CATKIN_BUILD_BINARY_PACKAGE \
+         -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+         -G "Ninja" \
+         $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target all
+
+if [[ "$SKIP_TESTING" == "OFF" ]]; then
+    cmake --build . --config Release --target run_tests
+fi
+
+cmake --build . --config Release --target install
+
+if [ "${PKG_NAME}" == "ros-jazzy-catkin" ]; then
+    # Copy the [de]activate scripts to $PREFIX/etc/conda/[de]activate.d.
+    # This will allow them to be run on environment activation.
+    for CHANGE in "activate" "deactivate"
+    do
+        mkdir -p "${PREFIX}/etc/conda/${CHANGE}.d"
+        cp "${RECIPE_DIR}/${CHANGE}.sh" "${PREFIX}/etc/conda/${CHANGE}.d/${PKG_NAME}_${CHANGE}.sh"
+    done
+fi
+
+if [ "${PKG_NAME}" == "ros-jazzy-environment" ]; then
+   for SCRIPT in "1.ros_distro.sh" "1.ros_etc_dir.sh" "1.ros_package_path.sh" "1.ros_python_version.sh" "1.ros_version.sh"
+   do
+       mkdir -p "${PREFIX}/etc/conda/activate.d"
+       cp "${PREFIX}/etc/catkin/profile.d/${SCRIPT}" "${PREFIX}/etc/conda/activate.d/${SCRIPT}"
+   done
+fi
+
+if [ "${PKG_NAME}" == "ros-jazzy-ros-workspace" ]; then
+    # Copy the [de]activate scripts to $PREFIX/etc/conda/[de]activate.d.
+    # This will allow them to be run on environment activation.
+    for CHANGE in "activate" "deactivate"
+    do
+        mkdir -p "${PREFIX}/etc/conda/${CHANGE}.d"
+        cp "${RECIPE_DIR}/${CHANGE}.sh" "${PREFIX}/etc/conda/${CHANGE}.d/${PKG_NAME}_${CHANGE}.sh"
+    done
+fi
diff --git a/recipes/ros-jazzy-fastrtps/patch/ros-jazzy-fastrtps.patch b/recipes/ros-jazzy-fastrtps/patch/ros-jazzy-fastrtps.patch
new file mode 100644
index 00000000..329888be
--- /dev/null
+++ b/recipes/ros-jazzy-fastrtps/patch/ros-jazzy-fastrtps.patch
@@ -0,0 +1,30 @@
+From 72ccfb186d93c3f7ba59c30fa2b05bddd31a3432 Mon Sep 17 00:00:00 2001
+From: Wade Hunkapiller <wade.hunk@gmail.com>
+Date: Fri, 15 Mar 2024 11:11:09 -0500
+Subject: [PATCH] Add gettid() macro to address GLIBC version comptability
+ (#4225)
+
+Signed-off-by: Wade Hunkapiller <wade.hunk@gmail.com>
+---
+ src/cpp/utils/threading/threading_pthread.ipp | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/src/cpp/utils/threading/threading_pthread.ipp b/src/cpp/utils/threading/threading_pthread.ipp
+index 75ad33f2d64..252f60c775a 100644
+--- a/src/cpp/utils/threading/threading_pthread.ipp
++++ b/src/cpp/utils/threading/threading_pthread.ipp
+@@ -25,6 +25,14 @@
+ #include <fastdds/dds/log/Log.hpp>
+ #include <fastdds/rtps/attributes/ThreadSettings.hpp>
+ 
++#if defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ <= 30)))
++    #include <sys/syscall.h>
++    #ifndef SYS_gettid
++        #error "SYS_gettid unavailable on this system"
++    #endif
++    #define gettid() ((pid_t)syscall(SYS_gettid))
++#endif
++
+ namespace eprosima {
+ 
+ template<typename... Args>
\ No newline at end of file
diff --git a/recipes/ros-jazzy-fastrtps/recipe.yaml b/recipes/ros-jazzy-fastrtps/recipe.yaml
new file mode 100644
index 00000000..aaee1e86
--- /dev/null
+++ b/recipes/ros-jazzy-fastrtps/recipe.yaml
@@ -0,0 +1,94 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-fastrtps
+  version: 2.14.4
+source:
+  git: https://github.com/ros2-gbp/fastrtps-release.git
+  tag: release/jazzy/fastrtps/2.14.4-1
+  target_directory: ros-jazzy-fastrtps/src/work
+  patches:
+    - patch/ros-jazzy-fastrtps.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_catkin.sh' if unix else '%RECIPE_DIR%\\bld_catkin.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - asio
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - openssl
+    - pip
+    - python
+    - ros-jazzy-fastcdr
+    - ros-jazzy-foonathan-memory-vendor
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - tinyxml2
+  run:
+    - openssl
+    - python
+    - ros-jazzy-fastcdr
+    - ros-jazzy-foonathan-memory-vendor
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - tinyxml2
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-foonathan-memory-vendor/bld_catkin.bat b/recipes/ros-jazzy-foonathan-memory-vendor/bld_catkin.bat
new file mode 100755
index 00000000..854efe1b
--- /dev/null
+++ b/recipes/ros-jazzy-foonathan-memory-vendor/bld_catkin.bat
@@ -0,0 +1,81 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+:: ROS_BUILD_SHARED_LIBS is always defined in CMake by catkin
+:: if ROS (1) is build as shared library . However, some packages are not
+:: passing compilation flags from CMake to other build systems (such as qmake),
+:: so we enable it explicitly via the CL environment variable, see
+:: https://learn.microsoft.com/en-us/cpp/build/reference/cl-environment-variables?view=msvc-170
+set CL=/DROS_BUILD_SHARED_LIBS=1 /DNOGDI=1
+
+set "CATKIN_BUILD_BINARY_PACKAGE_ARGS=-DCATKIN_BUILD_BINARY_PACKAGE=1"
+if "%PKG_NAME%" == "ros-jazzy-catkin" (
+    :: create catkin cookie to make it is a catkin workspace
+    type NUL > %LIBRARY_PREFIX%\.catkin
+    :: keep the workspace activation scripts (e.g., local_setup.bat)
+    set CATKIN_BUILD_BINARY_PACKAGE_ARGS=
+)
+
+rd /s /q build
+mkdir build
+pushd build
+
+set SKIP_TESTING=ON
+
+cmake ^
+    -G "Ninja" ^
+    --compile-no-warning-as-error ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=ON ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBoost_USE_STATIC_LIBS=OFF ^
+    %CATKIN_BUILD_BINARY_PACKAGE_ARGS% ^
+    -DCATKIN_SKIP_TESTING=%SKIP_TESTING% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+if "%PKG_NAME%" == "ros-jazzy-eigenpy" (
+    cmake --build . --config Release --target all --parallel 1
+    if errorlevel 1 exit 1
+) else (
+    cmake --build . --config Release --target all
+    if errorlevel 1 exit 1
+)
+
+if "%SKIP_TESTING%" == "OFF" (
+    cmake --build . --config Release --target run_tests
+    if errorlevel 1 exit 1
+)
+
+cmake --build . --config Release --target install
+if errorlevel 1 exit 1
+
+if "%PKG_NAME%" == "ros-jazzy-catkin" (
+    :: Copy the [de]activate scripts to %PREFIX%\etc\conda\[de]activate.d.
+    :: This will allow them to be run on environment activation.
+    for %%F in (activate deactivate) DO (
+        if not exist %PREFIX%\etc\conda\%%F.d mkdir %PREFIX%\etc\conda\%%F.d
+        copy %RECIPE_DIR%\%%F.bat %PREFIX%\etc\conda\%%F.d\%PKG_NAME%_%%F.bat
+    )
+)
+
+if "%PKG_NAME%" == "ros-jazzy-ros-workspace" (
+    :: Copy the [de]activate scripts to %PREFIX%\etc\conda\[de]activate.d.
+    :: This will allow them to be run on environment activation.
+    for %%F in (activate deactivate) DO (
+        if not exist %PREFIX%\etc\conda\%%F.d mkdir %PREFIX%\etc\conda\%%F.d
+        copy %RECIPE_DIR%\%%F.bat %PREFIX%\etc\conda\%%F.d\%PKG_NAME%_%%F.bat
+        copy %RECIPE_DIR%\%%F.ps1 %PREFIX%\etc\conda\%%F.d\%PKG_NAME%_%%F.ps1
+    )
+)
diff --git a/recipes/ros-jazzy-foonathan-memory-vendor/build_catkin.sh b/recipes/ros-jazzy-foonathan-memory-vendor/build_catkin.sh
new file mode 100755
index 00000000..2992e047
--- /dev/null
+++ b/recipes/ros-jazzy-foonathan-memory-vendor/build_catkin.sh
@@ -0,0 +1,131 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+CATKIN_BUILD_BINARY_PACKAGE="ON"
+
+if [ "${PKG_NAME}" == "ros-jazzy-catkin" ]; then
+    # create catkin cookie to make it is a catkin workspace
+    touch $PREFIX/.catkin
+    # keep the workspace activation scripts (e.g., local_setup.bat)
+    CATKIN_BUILD_BINARY_PACKAGE="OFF"
+fi
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python $ROS_PYTHON_VERSION"
+# Fix up SP_DIR which for some reason might contain a path to a wrong Python version
+FIXED_SP_DIR=$(echo $SP_DIR | sed -E "s/python[0-9]+\.[0-9]+/python$ROS_PYTHON_VERSION/")
+echo "Using site-package dir ${FIXED_SP_DIR}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python$ROS_PYTHON_VERSION/site-packages~$BUILD_PREFIX/lib/python$ROS_PYTHON_VERSION/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python$ROS_PYTHON_VERSION/site-packages~$BUILD_PREFIX/lib/python$ROS_PYTHON_VERSION/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python$ROS_PYTHON_VERSION/site-packages~$BUILD_PREFIX/lib/python$ROS_PYTHON_VERSION/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+  # way around bad CPU type issues
+  # rm $PREFIX/bin/doxygen || echo "doxygen not found"
+  # rm $PREFIX/bin/dia || echo "dia not found"
+  # rm $PREFIX/bin/dot || echo "dot not found"
+fi
+
+# NOTE: there might be undefined references occurring
+# in the Boost.system library, depending on the C++ versions
+# used to compile Boost. We can avoid them by forcing the use of
+# the header-only version of the library.
+export CXXFLAGS="$CXXFLAGS -DBOOST_ERROR_CODE_HEADER_ONLY"
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="$CFLAGS -D__STDC_FORMAT_MACROS=1";
+    export CXXFLAGS="$CXXFLAGS -D__STDC_FORMAT_MACROS=1";
+    # I am too scared to turn this on for now ...
+    # export LDFLAGS="$LDFLAGS -lrt";
+    # Some qt stuff uses g++ directly - fix these use cases
+    ln -s $GXX $BUILD_PREFIX/bin/g++
+fi
+
+export SKIP_TESTING=ON
+
+cmake ${CMAKE_ARGS} --compile-no-warning-as-error \
+         -DCMAKE_INSTALL_PREFIX=$PREFIX \
+         -DCMAKE_PREFIX_PATH=$PREFIX \
+         -DCMAKE_BUILD_TYPE=Release \
+         -DCMAKE_INSTALL_LIBDIR=lib \
+         -DCMAKE_NO_SYSTEM_FROM_IMPORTED=ON \
+         -DCMAKE_FIND_FRAMEWORK=LAST \
+         -DBUILD_SHARED_LIBS=ON \
+         -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+         -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+         -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+         -DPython3_FIND_STRATEGY=LOCATION \
+         -DPYTHON_INSTALL_DIR=$FIXED_SP_DIR \
+         -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+         -DSETUPTOOLS_DEB_LAYOUT=OFF \
+         -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+         -DCATKIN_BUILD_BINARY_PACKAGE=$CATKIN_BUILD_BINARY_PACKAGE \
+         -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+         -G "Ninja" \
+         $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target all
+
+if [[ "$SKIP_TESTING" == "OFF" ]]; then
+    cmake --build . --config Release --target run_tests
+fi
+
+cmake --build . --config Release --target install
+
+if [ "${PKG_NAME}" == "ros-jazzy-catkin" ]; then
+    # Copy the [de]activate scripts to $PREFIX/etc/conda/[de]activate.d.
+    # This will allow them to be run on environment activation.
+    for CHANGE in "activate" "deactivate"
+    do
+        mkdir -p "${PREFIX}/etc/conda/${CHANGE}.d"
+        cp "${RECIPE_DIR}/${CHANGE}.sh" "${PREFIX}/etc/conda/${CHANGE}.d/${PKG_NAME}_${CHANGE}.sh"
+    done
+fi
+
+if [ "${PKG_NAME}" == "ros-jazzy-environment" ]; then
+   for SCRIPT in "1.ros_distro.sh" "1.ros_etc_dir.sh" "1.ros_package_path.sh" "1.ros_python_version.sh" "1.ros_version.sh"
+   do
+       mkdir -p "${PREFIX}/etc/conda/activate.d"
+       cp "${PREFIX}/etc/catkin/profile.d/${SCRIPT}" "${PREFIX}/etc/conda/activate.d/${SCRIPT}"
+   done
+fi
+
+if [ "${PKG_NAME}" == "ros-jazzy-ros-workspace" ]; then
+    # Copy the [de]activate scripts to $PREFIX/etc/conda/[de]activate.d.
+    # This will allow them to be run on environment activation.
+    for CHANGE in "activate" "deactivate"
+    do
+        mkdir -p "${PREFIX}/etc/conda/${CHANGE}.d"
+        cp "${RECIPE_DIR}/${CHANGE}.sh" "${PREFIX}/etc/conda/${CHANGE}.d/${PKG_NAME}_${CHANGE}.sh"
+    done
+fi
diff --git a/recipes/ros-jazzy-foonathan-memory-vendor/recipe.yaml b/recipes/ros-jazzy-foonathan-memory-vendor/recipe.yaml
new file mode 100644
index 00000000..08a7637d
--- /dev/null
+++ b/recipes/ros-jazzy-foonathan-memory-vendor/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-foonathan-memory-vendor
+  version: 1.3.1
+source:
+  git: https://github.com/ros2-gbp/foonathan_memory_vendor-release.git
+  tag: release/jazzy/foonathan_memory_vendor/1.3.1-3
+  target_directory: ros-jazzy-foonathan-memory-vendor/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_catkin.sh' if unix else '%RECIPE_DIR%\\bld_catkin.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - foonathan-memory
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-copyright
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-test
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - cmake
+    - foonathan-memory
+    - python
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-geometry-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-geometry-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-geometry-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-geometry-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-geometry-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-geometry-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-geometry-msgs/recipe.yaml b/recipes/ros-jazzy-geometry-msgs/recipe.yaml
new file mode 100644
index 00000000..1027f489
--- /dev/null
+++ b/recipes/ros-jazzy-geometry-msgs/recipe.yaml
@@ -0,0 +1,89 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-geometry-msgs
+  version: 5.3.5
+source:
+  git: https://github.com/ros2-gbp/common_interfaces-release.git
+  tag: release/jazzy/geometry_msgs/5.3.5-1
+  target_directory: ros-jazzy-geometry-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-geometry2/bld_ament_cmake.bat b/recipes/ros-jazzy-geometry2/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-geometry2/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-geometry2/build_ament_cmake.sh b/recipes/ros-jazzy-geometry2/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-geometry2/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-geometry2/recipe.yaml b/recipes/ros-jazzy-geometry2/recipe.yaml
new file mode 100644
index 00000000..438ddef1
--- /dev/null
+++ b/recipes/ros-jazzy-geometry2/recipe.yaml
@@ -0,0 +1,95 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-geometry2
+  version: 0.36.7
+source:
+  git: https://github.com/ros2-gbp/geometry2-release.git
+  tag: release/jazzy/geometry2/0.36.7-1
+  target_directory: ros-jazzy-geometry2/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-bullet
+    - ros-jazzy-tf2-eigen
+    - ros-jazzy-tf2-eigen-kdl
+    - ros-jazzy-tf2-geometry-msgs
+    - ros-jazzy-tf2-kdl
+    - ros-jazzy-tf2-msgs
+    - ros-jazzy-tf2-py
+    - ros-jazzy-tf2-ros
+    - ros-jazzy-tf2-sensor-msgs
+    - ros-jazzy-tf2-tools
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-gps-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-gps-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-gps-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-gps-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-gps-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-gps-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-gps-msgs/recipe.yaml b/recipes/ros-jazzy-gps-msgs/recipe.yaml
new file mode 100644
index 00000000..9eed7c1b
--- /dev/null
+++ b/recipes/ros-jazzy-gps-msgs/recipe.yaml
@@ -0,0 +1,88 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-gps-msgs
+  version: 2.0.4
+source:
+  git: https://github.com/ros2-gbp/gps_umd-release.git
+  tag: release/jazzy/gps_msgs/2.0.4-1
+  target_directory: ros-jazzy-gps-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-gz-cmake-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-gz-cmake-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-gz-cmake-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-gz-cmake-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-gz-cmake-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-gz-cmake-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-gz-cmake-vendor/patch/ros-jazzy-gz-cmake-vendor.patch b/recipes/ros-jazzy-gz-cmake-vendor/patch/ros-jazzy-gz-cmake-vendor.patch
new file mode 100644
index 00000000..30b3d86b
--- /dev/null
+++ b/recipes/ros-jazzy-gz-cmake-vendor/patch/ros-jazzy-gz-cmake-vendor.patch
@@ -0,0 +1,8 @@
+diff --git a/gz_cmake_vendor-extras.cmake.in b/gz_cmake_vendor-extras.cmake.in
+index d490202..7dc00ea 100644
+--- a/gz_cmake_vendor-extras.cmake.in
++++ b/gz_cmake_vendor-extras.cmake.in
+@@ -1 +1,3 @@
++set(ENV{GZ_RELAX_VERSION_MATCH} "True")
++set(AMENT_VENDOR_NEVER_VENDOR ON)
+ list(PREPEND CMAKE_PREFIX_PATH "@CMAKE_INSTALL_PREFIX@/opt/@PROJECT_NAME@/extra_cmake")
diff --git a/recipes/ros-jazzy-gz-cmake-vendor/recipe.yaml b/recipes/ros-jazzy-gz-cmake-vendor/recipe.yaml
new file mode 100644
index 00000000..04aef09c
--- /dev/null
+++ b/recipes/ros-jazzy-gz-cmake-vendor/recipe.yaml
@@ -0,0 +1,94 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-gz-cmake-vendor
+  version: 0.0.8
+source:
+  git: https://github.com/ros2-gbp/gz_cmake_vendor-release.git
+  tag: release/jazzy/gz_cmake_vendor/0.0.8-1
+  target_directory: ros-jazzy-gz-cmake-vendor/src/work
+  patches:
+    - patch/ros-jazzy-gz-cmake-vendor.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - cmake
+    - gz-cmake3
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-copyright
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-test
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - gz-cmake3
+    - python
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-gz-common-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-gz-common-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-gz-common-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-gz-common-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-gz-common-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-gz-common-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-gz-common-vendor/patch/ros-jazzy-gz-common-vendor.patch b/recipes/ros-jazzy-gz-common-vendor/patch/ros-jazzy-gz-common-vendor.patch
new file mode 100644
index 00000000..27ebba91
--- /dev/null
+++ b/recipes/ros-jazzy-gz-common-vendor/patch/ros-jazzy-gz-common-vendor.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 34a9d3c..b9af25c 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -37,7 +37,7 @@ if(NOT $ENV{GZ_RELAX_VERSION_MATCH} STREQUAL "")
+   set(VERSION_MATCH "")
+ endif()
+ 
+-find_package(${LIB_NAME_FULL} ${VERSION_MATCH} ${LIB_VER} COMPONENTS all QUIET)
++find_package(${LIB_NAME_FULL} COMPONENTS all QUIET)
+ 
+ ament_vendor(${LIB_NAME_UNDERSCORE}_vendor
+   SATISFIED ${${LIB_NAME_FULL}_FOUND}
diff --git a/recipes/ros-jazzy-gz-common-vendor/recipe.yaml b/recipes/ros-jazzy-gz-common-vendor/recipe.yaml
new file mode 100644
index 00000000..f895b859
--- /dev/null
+++ b/recipes/ros-jazzy-gz-common-vendor/recipe.yaml
@@ -0,0 +1,112 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-gz-common-vendor
+  version: 0.0.7
+source:
+  git: https://github.com/ros2-gbp/gz_common_vendor-release.git
+  tag: release/jazzy/gz_common_vendor/0.0.7-1
+  target_directory: ros-jazzy-gz-common-vendor/src/work
+  patches:
+    - patch/ros-jazzy-gz-common-vendor.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - assimp
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - ffmpeg
+    - freeimage
+    - gts
+    - gz-common5
+    - libgdal
+    - numpy
+    - pip
+    - pkg-config
+    - python
+    - ros-jazzy-ament-cmake-copyright
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-test
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-utils-vendor
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - tinyxml2
+  run:
+    - assimp
+    - ffmpeg
+    - freeimage
+    - gts
+    - gz-common5
+    - libgdal
+    - python
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-utils-vendor
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - tinyxml2
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-gz-fuel-tools-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-gz-fuel-tools-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-gz-fuel-tools-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-gz-fuel-tools-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-gz-fuel-tools-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-gz-fuel-tools-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-gz-fuel-tools-vendor/patch/ros-jazzy-gz-fuel-tools-vendor.patch b/recipes/ros-jazzy-gz-fuel-tools-vendor/patch/ros-jazzy-gz-fuel-tools-vendor.patch
new file mode 100644
index 00000000..ed6266f1
--- /dev/null
+++ b/recipes/ros-jazzy-gz-fuel-tools-vendor/patch/ros-jazzy-gz-fuel-tools-vendor.patch
@@ -0,0 +1,15 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index b084b2c..b2fc80d 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -4,8 +4,8 @@ project(gz_fuel_tools_vendor)
+ 
+ # Project-specific settings
+ set(LIB_VER_MAJOR 9)
+-set(LIB_VER_MINOR 1)
+-set(LIB_VER_PATCH 0)
++set(LIB_VER_MINOR 0)
++set(LIB_VER_PATCH 3)
+ 
+ # Derived variables
+ set(LIB_NAME gz-fuel_tools)
diff --git a/recipes/ros-jazzy-gz-fuel-tools-vendor/recipe.yaml b/recipes/ros-jazzy-gz-fuel-tools-vendor/recipe.yaml
new file mode 100644
index 00000000..ff71498c
--- /dev/null
+++ b/recipes/ros-jazzy-gz-fuel-tools-vendor/recipe.yaml
@@ -0,0 +1,117 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-gz-fuel-tools-vendor
+  version: 0.0.5
+source:
+  git: https://github.com/ros2-gbp/gz_fuel_tools_vendor-release.git
+  tag: release/jazzy/gz_fuel_tools_vendor/0.0.5-1
+  target_directory: ros-jazzy-gz-fuel-tools-vendor/src/work
+  patches:
+    - patch/ros-jazzy-gz-fuel-tools-vendor.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - gflags
+    - gz-fuel-tools9
+    - jsoncpp
+    - libcurl
+    - libzip
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-copyright
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-test
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-common-vendor
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-msgs-vendor
+    - ros-jazzy-gz-tools-vendor
+    - ros-jazzy-gz-utils-vendor
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - tinyxml2
+    - yaml
+  run:
+    - gflags
+    - gz-fuel-tools9
+    - jsoncpp
+    - libcurl
+    - libzip
+    - python
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-common-vendor
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-msgs-vendor
+    - ros-jazzy-gz-tools-vendor
+    - ros-jazzy-gz-utils-vendor
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - tinyxml2
+    - yaml
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-gz-gui-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-gz-gui-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-gz-gui-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-gz-gui-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-gz-gui-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-gz-gui-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-gz-gui-vendor/patch/ros-jazzy-gz-gui-vendor.patch b/recipes/ros-jazzy-gz-gui-vendor/patch/ros-jazzy-gz-gui-vendor.patch
new file mode 100644
index 00000000..d9ebdd68
--- /dev/null
+++ b/recipes/ros-jazzy-gz-gui-vendor/patch/ros-jazzy-gz-gui-vendor.patch
@@ -0,0 +1,15 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index a58d9a4..e6ea27e 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -4,8 +4,8 @@ project(gz_gui_vendor)
+ 
+ # Project-specific settings
+ set(LIB_VER_MAJOR 8)
+-set(LIB_VER_MINOR 3)
+-set(LIB_VER_PATCH 0)
++set(LIB_VER_MINOR 1)
++set(LIB_VER_PATCH 1)
+ 
+ # Derived variables
+ set(LIB_NAME gz-gui)
diff --git a/recipes/ros-jazzy-gz-gui-vendor/recipe.yaml b/recipes/ros-jazzy-gz-gui-vendor/recipe.yaml
new file mode 100644
index 00000000..e03542c8
--- /dev/null
+++ b/recipes/ros-jazzy-gz-gui-vendor/recipe.yaml
@@ -0,0 +1,130 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-gz-gui-vendor
+  version: 0.0.4
+source:
+  git: https://github.com/ros2-gbp/gz_gui_vendor-release.git
+  tag: release/jazzy/gz_gui_vendor/0.0.4-1
+  target_directory: ros-jazzy-gz-gui-vendor/src/work
+  patches:
+    - patch/ros-jazzy-gz-gui-vendor.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - gz-gui8
+    - libprotobuf
+    - numpy
+    - pip
+    - protobuf
+    - python
+    - qt-main
+    - ros-jazzy-ament-cmake-copyright
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-test
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-common-vendor
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-msgs-vendor
+    - ros-jazzy-gz-plugin-vendor
+    - ros-jazzy-gz-rendering-vendor
+    - ros-jazzy-gz-tools-vendor
+    - ros-jazzy-gz-transport-vendor
+    - ros-jazzy-gz-utils-vendor
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - tinyxml2
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - gz-gui8
+    - libprotobuf
+    - protobuf
+    - python
+    - qt-main
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-common-vendor
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-msgs-vendor
+    - ros-jazzy-gz-plugin-vendor
+    - ros-jazzy-gz-rendering-vendor
+    - ros-jazzy-gz-tools-vendor
+    - ros-jazzy-gz-transport-vendor
+    - ros-jazzy-gz-utils-vendor
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - tinyxml2
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-gz-math-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-gz-math-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-gz-math-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-gz-math-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-gz-math-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-gz-math-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-gz-math-vendor/patch/ros-jazzy-gz-math-vendor.patch b/recipes/ros-jazzy-gz-math-vendor/patch/ros-jazzy-gz-math-vendor.patch
new file mode 100644
index 00000000..e5a1c5d6
--- /dev/null
+++ b/recipes/ros-jazzy-gz-math-vendor/patch/ros-jazzy-gz-math-vendor.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index bacf717..69ead8b 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -36,7 +36,7 @@ if(NOT $ENV{GZ_RELAX_VERSION_MATCH} STREQUAL "")
+   set(VERSION_MATCH "")
+ endif()
+ 
+-find_package(${LIB_NAME_FULL} ${VERSION_MATCH} ${LIB_VER} COMPONENTS all QUIET)
++find_package(${LIB_NAME_FULL} COMPONENTS all QUIET)
+ 
+ ament_vendor(${LIB_NAME_UNDERSCORE}_vendor
+   SATISFIED ${${LIB_NAME_FULL}_FOUND}
diff --git a/recipes/ros-jazzy-gz-math-vendor/recipe.yaml b/recipes/ros-jazzy-gz-math-vendor/recipe.yaml
new file mode 100644
index 00000000..a7255612
--- /dev/null
+++ b/recipes/ros-jazzy-gz-math-vendor/recipe.yaml
@@ -0,0 +1,104 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-gz-math-vendor
+  version: 0.0.7
+source:
+  git: https://github.com/ros2-gbp/gz_math_vendor-release.git
+  tag: release/jazzy/gz_math_vendor/0.0.7-1
+  target_directory: ros-jazzy-gz-math-vendor/src/work
+  patches:
+    - patch/ros-jazzy-gz-math-vendor.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+    - if: build_platform != target_platform
+      then:
+        - pybind11
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - eigen
+    - gz-math7
+    - numpy
+    - pip
+    - pybind11
+    - pytest
+    - python
+    - ros-jazzy-ament-cmake-copyright
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-test
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-utils-vendor
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - eigen
+    - gz-math7
+    - python
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-utils-vendor
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-gz-msgs-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-gz-msgs-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-gz-msgs-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-gz-msgs-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-gz-msgs-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-gz-msgs-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-gz-msgs-vendor/patch/ros-jazzy-gz-msgs-vendor.patch b/recipes/ros-jazzy-gz-msgs-vendor/patch/ros-jazzy-gz-msgs-vendor.patch
new file mode 100644
index 00000000..7b6340ff
--- /dev/null
+++ b/recipes/ros-jazzy-gz-msgs-vendor/patch/ros-jazzy-gz-msgs-vendor.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index a234d6c..1bc36ea 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -37,7 +37,7 @@ if(NOT $ENV{GZ_RELAX_VERSION_MATCH} STREQUAL "")
+   set(VERSION_MATCH "")
+ endif()
+ 
+-find_package(${LIB_NAME_FULL} ${VERSION_MATCH} ${LIB_VER} COMPONENTS all QUIET)
++find_package(${LIB_NAME_FULL} COMPONENTS all QUIET)
+ 
+ ament_vendor(${LIB_NAME_UNDERSCORE}_vendor
+   SATISFIED ${${LIB_NAME_FULL}_FOUND}
diff --git a/recipes/ros-jazzy-gz-msgs-vendor/recipe.yaml b/recipes/ros-jazzy-gz-msgs-vendor/recipe.yaml
new file mode 100644
index 00000000..133a317b
--- /dev/null
+++ b/recipes/ros-jazzy-gz-msgs-vendor/recipe.yaml
@@ -0,0 +1,106 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-gz-msgs-vendor
+  version: 0.0.5
+source:
+  git: https://github.com/ros2-gbp/gz_msgs_vendor-release.git
+  tag: release/jazzy/gz_msgs_vendor/0.0.5-1
+  target_directory: ros-jazzy-gz-msgs-vendor/src/work
+  patches:
+    - patch/ros-jazzy-gz-msgs-vendor.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - gz-msgs10
+    - libprotobuf
+    - numpy
+    - pip
+    - protobuf
+    - pytest
+    - python
+    - ros-jazzy-ament-cmake-copyright
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-test
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-tools-vendor
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - tinyxml2
+  run:
+    - gz-msgs10
+    - libprotobuf
+    - protobuf
+    - python
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-tools-vendor
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - tinyxml2
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-gz-physics-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-gz-physics-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-gz-physics-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-gz-physics-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-gz-physics-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-gz-physics-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-gz-physics-vendor/patch/ros-jazzy-gz-physics-vendor.patch b/recipes/ros-jazzy-gz-physics-vendor/patch/ros-jazzy-gz-physics-vendor.patch
new file mode 100644
index 00000000..d6352aa3
--- /dev/null
+++ b/recipes/ros-jazzy-gz-physics-vendor/patch/ros-jazzy-gz-physics-vendor.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 3b0b5e4..fa007d8 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -41,7 +41,7 @@ if(NOT $ENV{GZ_RELAX_VERSION_MATCH} STREQUAL "")
+   set(VERSION_MATCH "")
+ endif()
+ 
+-find_package(${LIB_NAME_FULL} ${VERSION_MATCH} ${LIB_VER} COMPONENTS all QUIET)
++find_package(${LIB_NAME_FULL} COMPONENTS all QUIET)
+ 
+ ament_vendor(${LIB_NAME_UNDERSCORE}_vendor
+   SATISFIED ${${LIB_NAME_FULL}_FOUND}
diff --git a/recipes/ros-jazzy-gz-physics-vendor/recipe.yaml b/recipes/ros-jazzy-gz-physics-vendor/recipe.yaml
new file mode 100644
index 00000000..cdc1039b
--- /dev/null
+++ b/recipes/ros-jazzy-gz-physics-vendor/recipe.yaml
@@ -0,0 +1,113 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-gz-physics-vendor
+  version: 0.0.5
+source:
+  git: https://github.com/ros2-gbp/gz_physics_vendor-release.git
+  tag: release/jazzy/gz_physics_vendor/0.0.5-1
+  target_directory: ros-jazzy-gz-physics-vendor/src/work
+  patches:
+    - patch/ros-jazzy-gz-physics-vendor.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - benchmark
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - bullet
+    - eigen
+    - gz-physics7
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-copyright
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-test
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-common-vendor
+    - ros-jazzy-gz-dartsim-vendor
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-plugin-vendor
+    - ros-jazzy-gz-utils-vendor
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sdformat-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - benchmark
+    - bullet
+    - eigen
+    - gz-physics7
+    - python
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-common-vendor
+    - ros-jazzy-gz-dartsim-vendor
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-plugin-vendor
+    - ros-jazzy-gz-utils-vendor
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sdformat-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-gz-plugin-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-gz-plugin-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-gz-plugin-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-gz-plugin-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-gz-plugin-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-gz-plugin-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-gz-plugin-vendor/patch/ros-jazzy-gz-plugin-vendor.patch b/recipes/ros-jazzy-gz-plugin-vendor/patch/ros-jazzy-gz-plugin-vendor.patch
new file mode 100644
index 00000000..bd4b6df7
--- /dev/null
+++ b/recipes/ros-jazzy-gz-plugin-vendor/patch/ros-jazzy-gz-plugin-vendor.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index ed2578e..cb5c72a 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -36,7 +36,7 @@ if(NOT $ENV{GZ_RELAX_VERSION_MATCH} STREQUAL "")
+   set(VERSION_MATCH "")
+ endif()
+ 
+-find_package(${LIB_NAME_FULL} ${VERSION_MATCH} ${LIB_VER} COMPONENTS all QUIET)
++find_package(${LIB_NAME_FULL} COMPONENTS all QUIET)
+ 
+ ament_vendor(${LIB_NAME_UNDERSCORE}_vendor
+   SATISFIED ${${LIB_NAME_FULL}_FOUND}
diff --git a/recipes/ros-jazzy-gz-plugin-vendor/recipe.yaml b/recipes/ros-jazzy-gz-plugin-vendor/recipe.yaml
new file mode 100644
index 00000000..36d321d4
--- /dev/null
+++ b/recipes/ros-jazzy-gz-plugin-vendor/recipe.yaml
@@ -0,0 +1,99 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-gz-plugin-vendor
+  version: 0.0.4
+source:
+  git: https://github.com/ros2-gbp/gz_plugin_vendor-release.git
+  tag: release/jazzy/gz_plugin_vendor/0.0.4-1
+  target_directory: ros-jazzy-gz-plugin-vendor/src/work
+  patches:
+    - patch/ros-jazzy-gz-plugin-vendor.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - gz-plugin2
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-copyright
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-test
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-tools-vendor
+    - ros-jazzy-gz-utils-vendor
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - gz-plugin2
+    - python
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-tools-vendor
+    - ros-jazzy-gz-utils-vendor
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-gz-rendering-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-gz-rendering-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-gz-rendering-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-gz-rendering-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-gz-rendering-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-gz-rendering-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-gz-rendering-vendor/patch/ros-jazzy-gz-rendering-vendor.patch b/recipes/ros-jazzy-gz-rendering-vendor/patch/ros-jazzy-gz-rendering-vendor.patch
new file mode 100644
index 00000000..881281a2
--- /dev/null
+++ b/recipes/ros-jazzy-gz-rendering-vendor/patch/ros-jazzy-gz-rendering-vendor.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index f7decac..c7c068e 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -40,7 +40,7 @@ if(NOT $ENV{GZ_RELAX_VERSION_MATCH} STREQUAL "")
+   set(VERSION_MATCH "")
+ endif()
+ 
+-find_package(${LIB_NAME_FULL} ${VERSION_MATCH} ${LIB_VER} COMPONENTS all QUIET)
++find_package(${LIB_NAME_FULL} COMPONENTS all QUIET)
+ 
+ ament_vendor(${LIB_NAME_UNDERSCORE}_vendor
+   SATISFIED ${${LIB_NAME_FULL}_FOUND}
diff --git a/recipes/ros-jazzy-gz-rendering-vendor/recipe.yaml b/recipes/ros-jazzy-gz-rendering-vendor/recipe.yaml
new file mode 100644
index 00000000..c57a8fc1
--- /dev/null
+++ b/recipes/ros-jazzy-gz-rendering-vendor/recipe.yaml
@@ -0,0 +1,117 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-gz-rendering-vendor
+  version: 0.0.5
+source:
+  git: https://github.com/ros2-gbp/gz_rendering_vendor-release.git
+  tag: release/jazzy/gz_rendering_vendor/0.0.5-1
+  target_directory: ros-jazzy-gz-rendering-vendor/src/work
+  patches:
+    - patch/ros-jazzy-gz-rendering-vendor.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - freeimage
+    - glew
+    - gz-rendering8
+    - numpy
+    - ogre
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-copyright
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-test
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-common-vendor
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-ogre-next-vendor
+    - ros-jazzy-gz-plugin-vendor
+    - ros-jazzy-gz-utils-vendor
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - swig
+    - xorg-libxi
+    - xorg-libxmu
+  run:
+    - freeimage
+    - glew
+    - gz-rendering8
+    - ogre
+    - python
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-common-vendor
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-ogre-next-vendor
+    - ros-jazzy-gz-plugin-vendor
+    - ros-jazzy-gz-utils-vendor
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - swig
+    - xorg-libxi
+    - xorg-libxmu
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-gz-sensors-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-gz-sensors-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-gz-sensors-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-gz-sensors-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-gz-sensors-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-gz-sensors-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-gz-sensors-vendor/patch/ros-jazzy-gz-sensors-vendor.patch b/recipes/ros-jazzy-gz-sensors-vendor/patch/ros-jazzy-gz-sensors-vendor.patch
new file mode 100644
index 00000000..9aa287b6
--- /dev/null
+++ b/recipes/ros-jazzy-gz-sensors-vendor/patch/ros-jazzy-gz-sensors-vendor.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 1fba7c8..c82aaa5 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -42,7 +42,7 @@ if(NOT $ENV{GZ_RELAX_VERSION_MATCH} STREQUAL "")
+   set(VERSION_MATCH "")
+ endif()
+ 
+-find_package(${LIB_NAME_FULL} ${VERSION_MATCH} ${LIB_VER} COMPONENTS all QUIET)
++find_package(${LIB_NAME_FULL} COMPONENTS all QUIET)
+ 
+ ament_vendor(${LIB_NAME_UNDERSCORE}_vendor
+   SATISFIED ${${LIB_NAME_FULL}_FOUND}
diff --git a/recipes/ros-jazzy-gz-sensors-vendor/recipe.yaml b/recipes/ros-jazzy-gz-sensors-vendor/recipe.yaml
new file mode 100644
index 00000000..a5c7e3e6
--- /dev/null
+++ b/recipes/ros-jazzy-gz-sensors-vendor/recipe.yaml
@@ -0,0 +1,109 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-gz-sensors-vendor
+  version: 0.0.5
+source:
+  git: https://github.com/ros2-gbp/gz_sensors_vendor-release.git
+  tag: release/jazzy/gz_sensors_vendor/0.0.5-1
+  target_directory: ros-jazzy-gz-sensors-vendor/src/work
+  patches:
+    - patch/ros-jazzy-gz-sensors-vendor.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - gz-sensors8
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-copyright
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-test
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-common-vendor
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-msgs-vendor
+    - ros-jazzy-gz-rendering-vendor
+    - ros-jazzy-gz-tools-vendor
+    - ros-jazzy-gz-transport-vendor
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sdformat-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - gz-sensors8
+    - python
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-common-vendor
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-msgs-vendor
+    - ros-jazzy-gz-rendering-vendor
+    - ros-jazzy-gz-tools-vendor
+    - ros-jazzy-gz-transport-vendor
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sdformat-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-gz-sim-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-gz-sim-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-gz-sim-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-gz-sim-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-gz-sim-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-gz-sim-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-gz-sim-vendor/patch/ros-jazzy-gz-sim-vendor.patch b/recipes/ros-jazzy-gz-sim-vendor/patch/ros-jazzy-gz-sim-vendor.patch
new file mode 100644
index 00000000..482109fd
--- /dev/null
+++ b/recipes/ros-jazzy-gz-sim-vendor/patch/ros-jazzy-gz-sim-vendor.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index db289b6..e1f3327 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -48,7 +48,7 @@ if(NOT $ENV{GZ_RELAX_VERSION_MATCH} STREQUAL "")
+   set(VERSION_MATCH "")
+ endif()
+ 
+-find_package(${LIB_NAME_FULL} ${VERSION_MATCH} ${LIB_VER} COMPONENTS all QUIET)
++find_package(${LIB_NAME_FULL} COMPONENTS all QUIET)
+ 
+ ament_vendor(${LIB_NAME_UNDERSCORE}_vendor
+   SATISFIED ${${LIB_NAME_FULL}_FOUND}
diff --git a/recipes/ros-jazzy-gz-sim-vendor/recipe.yaml b/recipes/ros-jazzy-gz-sim-vendor/recipe.yaml
new file mode 100644
index 00000000..4f31f0a7
--- /dev/null
+++ b/recipes/ros-jazzy-gz-sim-vendor/recipe.yaml
@@ -0,0 +1,156 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-gz-sim-vendor
+  version: 0.0.6
+source:
+  git: https://github.com/ros2-gbp/gz_sim_vendor-release.git
+  tag: release/jazzy/gz_sim_vendor/0.0.6-1
+  target_directory: ros-jazzy-gz-sim-vendor/src/work
+  patches:
+    - patch/ros-jazzy-gz-sim-vendor.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+    - if: build_platform != target_platform
+      then:
+        - pybind11
+  host:
+    - benchmark
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - freeimage
+    - glew
+    - gz-sim8
+    - libprotobuf
+    - numpy
+    - pip
+    - protobuf
+    - pybind11
+    - pytest
+    - python
+    - qt-main
+    - ros-jazzy-ament-cmake-copyright
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-test
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-common-vendor
+    - ros-jazzy-gz-fuel-tools-vendor
+    - ros-jazzy-gz-gui-vendor
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-msgs-vendor
+    - ros-jazzy-gz-physics-vendor
+    - ros-jazzy-gz-plugin-vendor
+    - ros-jazzy-gz-rendering-vendor
+    - ros-jazzy-gz-sensors-vendor
+    - ros-jazzy-gz-tools-vendor
+    - ros-jazzy-gz-transport-vendor
+    - ros-jazzy-gz-utils-vendor
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sdformat-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - tinyxml2
+    - xorg-libxi
+    - xorg-libxmu
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - benchmark
+    - freeimage
+    - glew
+    - gz-sim8
+    - libprotobuf
+    - protobuf
+    - pybind11
+    - python
+    - qt-main
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-common-vendor
+    - ros-jazzy-gz-fuel-tools-vendor
+    - ros-jazzy-gz-gui-vendor
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-msgs-vendor
+    - ros-jazzy-gz-physics-vendor
+    - ros-jazzy-gz-plugin-vendor
+    - ros-jazzy-gz-rendering-vendor
+    - ros-jazzy-gz-sensors-vendor
+    - ros-jazzy-gz-tools-vendor
+    - ros-jazzy-gz-transport-vendor
+    - ros-jazzy-gz-utils-vendor
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sdformat-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - tinyxml2
+    - xorg-libxi
+    - xorg-libxmu
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-gz-tools-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-gz-tools-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-gz-tools-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-gz-tools-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-gz-tools-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-gz-tools-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-gz-tools-vendor/recipe.yaml b/recipes/ros-jazzy-gz-tools-vendor/recipe.yaml
new file mode 100644
index 00000000..74dd17c1
--- /dev/null
+++ b/recipes/ros-jazzy-gz-tools-vendor/recipe.yaml
@@ -0,0 +1,94 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-gz-tools-vendor
+  version: 0.0.5
+source:
+  git: https://github.com/ros2-gbp/gz_tools_vendor-release.git
+  tag: release/jazzy/gz_tools_vendor/0.0.5-1
+  target_directory: ros-jazzy-gz-tools-vendor/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - gz-tools2
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-copyright
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-test
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - gz-tools2
+    - python
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - ruby
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-gz-transport-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-gz-transport-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-gz-transport-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-gz-transport-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-gz-transport-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-gz-transport-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-gz-transport-vendor/patch/ros-jazzy-gz-transport-vendor.patch b/recipes/ros-jazzy-gz-transport-vendor/patch/ros-jazzy-gz-transport-vendor.patch
new file mode 100644
index 00000000..01ccc875
--- /dev/null
+++ b/recipes/ros-jazzy-gz-transport-vendor/patch/ros-jazzy-gz-transport-vendor.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index d0d7a23..77f334f 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -38,7 +38,7 @@ if(NOT $ENV{GZ_RELAX_VERSION_MATCH} STREQUAL "")
+   set(VERSION_MATCH "")
+ endif()
+ 
+-find_package(${LIB_NAME_FULL} ${VERSION_MATCH} ${LIB_VER} COMPONENTS all QUIET)
++find_package(${LIB_NAME_FULL} COMPONENTS all QUIET)
+ 
+ ament_vendor(${LIB_NAME_UNDERSCORE}_vendor
+   SATISFIED ${${LIB_NAME_FULL}_FOUND}
diff --git a/recipes/ros-jazzy-gz-transport-vendor/recipe.yaml b/recipes/ros-jazzy-gz-transport-vendor/recipe.yaml
new file mode 100644
index 00000000..6eca53e6
--- /dev/null
+++ b/recipes/ros-jazzy-gz-transport-vendor/recipe.yaml
@@ -0,0 +1,124 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-gz-transport-vendor
+  version: 0.0.5
+source:
+  git: https://github.com/ros2-gbp/gz_transport_vendor-release.git
+  tag: release/jazzy/gz_transport_vendor/0.0.5-1
+  target_directory: ros-jazzy-gz-transport-vendor/src/work
+  patches:
+    - patch/ros-jazzy-gz-transport-vendor.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+    - if: build_platform != target_platform
+      then:
+        - pybind11
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - cppzmq
+    - gz-transport13
+    - libprotobuf
+    - numpy
+    - pip
+    - pkg-config
+    - protobuf
+    - psutil
+    - pybind11
+    - pytest
+    - python
+    - ros-jazzy-ament-cmake-copyright
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-test
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-msgs-vendor
+    - ros-jazzy-gz-tools-vendor
+    - ros-jazzy-gz-utils-vendor
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - sqlite 3.*
+    - zeromq
+  run:
+    - cppzmq
+    - gz-transport13
+    - libprotobuf
+    - pkg-config
+    - protobuf
+    - psutil
+    - pybind11
+    - pytest
+    - python
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-msgs-vendor
+    - ros-jazzy-gz-tools-vendor
+    - ros-jazzy-gz-utils-vendor
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - sqlite
+    - zeromq
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-gz-utils-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-gz-utils-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-gz-utils-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-gz-utils-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-gz-utils-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-gz-utils-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-gz-utils-vendor/patch/ros-jazzy-gz-utils-vendor.patch b/recipes/ros-jazzy-gz-utils-vendor/patch/ros-jazzy-gz-utils-vendor.patch
new file mode 100644
index 00000000..fdaa4012
--- /dev/null
+++ b/recipes/ros-jazzy-gz-utils-vendor/patch/ros-jazzy-gz-utils-vendor.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 264ab97..acc88cd 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -34,7 +34,7 @@ if(NOT $ENV{GZ_RELAX_VERSION_MATCH} STREQUAL "")
+   set(VERSION_MATCH "")
+ endif()
+ 
+-find_package(${LIB_NAME_FULL} ${VERSION_MATCH} ${LIB_VER} COMPONENTS all QUIET)
++find_package(${LIB_NAME_FULL} COMPONENTS all QUIET)
+ 
+ ament_vendor(${LIB_NAME_UNDERSCORE}_vendor
+   SATISFIED ${${LIB_NAME_FULL}_FOUND}
diff --git a/recipes/ros-jazzy-gz-utils-vendor/recipe.yaml b/recipes/ros-jazzy-gz-utils-vendor/recipe.yaml
new file mode 100644
index 00000000..36a0fdfe
--- /dev/null
+++ b/recipes/ros-jazzy-gz-utils-vendor/recipe.yaml
@@ -0,0 +1,95 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-gz-utils-vendor
+  version: 0.0.4
+source:
+  git: https://github.com/ros2-gbp/gz_utils_vendor-release.git
+  tag: release/jazzy/gz_utils_vendor/0.0.4-1
+  target_directory: ros-jazzy-gz-utils-vendor/src/work
+  patches:
+    - patch/ros-jazzy-gz-utils-vendor.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - gz-utils2
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-copyright
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-test
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - gz-utils2
+    - python
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-image-geometry/bld_ament_cmake.bat b/recipes/ros-jazzy-image-geometry/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-image-geometry/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-image-geometry/build_ament_cmake.sh b/recipes/ros-jazzy-image-geometry/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-image-geometry/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-image-geometry/recipe.yaml b/recipes/ros-jazzy-image-geometry/recipe.yaml
new file mode 100644
index 00000000..b25c3ceb
--- /dev/null
+++ b/recipes/ros-jazzy-image-geometry/recipe.yaml
@@ -0,0 +1,106 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-image-geometry
+  version: 4.1.0
+source:
+  git: https://github.com/ros2-gbp/vision_opencv-release.git
+  tag: release/jazzy/image_geometry/4.1.0-1
+  target_directory: ros-jazzy-image-geometry/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - deprecated
+    - libopencv
+    - numpy
+    - pip
+    - py-opencv
+    - python
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-cmake-python
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - deprecated
+    - libopencv
+    - py-opencv
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-image-tools/bld_ament_cmake.bat b/recipes/ros-jazzy-image-tools/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-image-tools/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-image-tools/build_ament_cmake.sh b/recipes/ros-jazzy-image-tools/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-image-tools/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-image-tools/recipe.yaml b/recipes/ros-jazzy-image-tools/recipe.yaml
new file mode 100644
index 00000000..94af2eaf
--- /dev/null
+++ b/recipes/ros-jazzy-image-tools/recipe.yaml
@@ -0,0 +1,116 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-image-tools
+  version: 0.33.5
+source:
+  git: https://github.com/ros2-gbp/demos-release.git
+  tag: release/jazzy/image_tools/0.33.5-1
+  target_directory: ros-jazzy-image-tools/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - libopencv
+    - numpy
+    - pip
+    - py-opencv
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-launch
+    - ros-jazzy-launch-ros
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ament-cmake
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-rmw-implementation-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - libopencv
+    - py-opencv
+    - python
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-image-transport-plugins/bld_ament_cmake.bat b/recipes/ros-jazzy-image-transport-plugins/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-image-transport-plugins/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-image-transport-plugins/build_ament_cmake.sh b/recipes/ros-jazzy-image-transport-plugins/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-image-transport-plugins/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-image-transport-plugins/recipe.yaml b/recipes/ros-jazzy-image-transport-plugins/recipe.yaml
new file mode 100644
index 00000000..ba0f1eb9
--- /dev/null
+++ b/recipes/ros-jazzy-image-transport-plugins/recipe.yaml
@@ -0,0 +1,88 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-image-transport-plugins
+  version: 4.0.3
+source:
+  git: https://github.com/ros2-gbp/image_transport_plugins-release.git
+  tag: release/jazzy/image_transport_plugins/4.0.3-1
+  target_directory: ros-jazzy-image-transport-plugins/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-compressed-depth-image-transport
+    - ros-jazzy-compressed-image-transport
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-theora-image-transport
+    - ros-jazzy-zstd-image-transport
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-image-transport/bld_ament_cmake.bat b/recipes/ros-jazzy-image-transport/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-image-transport/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-image-transport/build_ament_cmake.sh b/recipes/ros-jazzy-image-transport/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-image-transport/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-image-transport/recipe.yaml b/recipes/ros-jazzy-image-transport/recipe.yaml
new file mode 100644
index 00000000..c2ce461f
--- /dev/null
+++ b/recipes/ros-jazzy-image-transport/recipe.yaml
@@ -0,0 +1,97 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-image-transport
+  version: 5.1.5
+source:
+  git: https://github.com/ros2-gbp/image_common-release.git
+  tag: release/jazzy/image_transport/5.1.5-1
+  target_directory: ros-jazzy-image-transport/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-message-filters
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-message-filters
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-interactive-markers/bld_ament_cmake.bat b/recipes/ros-jazzy-interactive-markers/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-interactive-markers/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-interactive-markers/build_ament_cmake.sh b/recipes/ros-jazzy-interactive-markers/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-interactive-markers/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-interactive-markers/recipe.yaml b/recipes/ros-jazzy-interactive-markers/recipe.yaml
new file mode 100644
index 00000000..07253da0
--- /dev/null
+++ b/recipes/ros-jazzy-interactive-markers/recipe.yaml
@@ -0,0 +1,107 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-interactive-markers
+  version: 2.5.4
+source:
+  git: https://github.com/ros2-gbp/interactive_markers-release.git
+  tag: release/jazzy/interactive_markers/2.5.4-2
+  target_directory: ros-jazzy-interactive-markers/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-python
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-geometry-msgs
+    - ros-jazzy-visualization-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclpy
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-geometry-msgs
+    - ros-jazzy-visualization-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-intra-process-demo/bld_ament_cmake.bat b/recipes/ros-jazzy-intra-process-demo/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-intra-process-demo/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-intra-process-demo/build_ament_cmake.sh b/recipes/ros-jazzy-intra-process-demo/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-intra-process-demo/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-intra-process-demo/recipe.yaml b/recipes/ros-jazzy-intra-process-demo/recipe.yaml
new file mode 100644
index 00000000..439967d1
--- /dev/null
+++ b/recipes/ros-jazzy-intra-process-demo/recipe.yaml
@@ -0,0 +1,111 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-intra-process-demo
+  version: 0.33.5
+source:
+  git: https://github.com/ros2-gbp/demos-release.git
+  tag: release/jazzy/intra_process_demo/0.33.5-1
+  target_directory: ros-jazzy-intra-process-demo/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - libopencv
+    - numpy
+    - pip
+    - py-opencv
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-launch
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ament-cmake
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rmw-implementation-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - libopencv
+    - py-opencv
+    - python
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-joy/bld_ament_cmake.bat b/recipes/ros-jazzy-joy/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-joy/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-joy/build_ament_cmake.sh b/recipes/ros-jazzy-joy/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-joy/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-joy/recipe.yaml b/recipes/ros-jazzy-joy/recipe.yaml
new file mode 100644
index 00000000..226f94f4
--- /dev/null
+++ b/recipes/ros-jazzy-joy/recipe.yaml
@@ -0,0 +1,94 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-joy
+  version: 3.3.0
+source:
+  git: https://github.com/ros2-gbp/joystick_drivers-release.git
+  tag: release/jazzy/joy/3.3.0-3
+  target_directory: ros-jazzy-joy/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sdl2-vendor
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sdl2-vendor
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-kdl-parser/bld_ament_cmake.bat b/recipes/ros-jazzy-kdl-parser/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-kdl-parser/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-kdl-parser/build_ament_cmake.sh b/recipes/ros-jazzy-kdl-parser/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-kdl-parser/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-kdl-parser/recipe.yaml b/recipes/ros-jazzy-kdl-parser/recipe.yaml
new file mode 100644
index 00000000..6d1a8010
--- /dev/null
+++ b/recipes/ros-jazzy-kdl-parser/recipe.yaml
@@ -0,0 +1,95 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-kdl-parser
+  version: 2.11.0
+source:
+  git: https://github.com/ros2-gbp/kdl_parser-release.git
+  tag: release/jazzy/kdl_parser/2.11.0-3
+  target_directory: ros-jazzy-kdl-parser/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-orocos-kdl-vendor
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-urdf
+    - ros-jazzy-urdfdom-headers
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-orocos-kdl-vendor
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-urdf
+    - ros-jazzy-urdfdom-headers
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-keyboard-handler/bld_ament_cmake.bat b/recipes/ros-jazzy-keyboard-handler/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-keyboard-handler/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-keyboard-handler/build_ament_cmake.sh b/recipes/ros-jazzy-keyboard-handler/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-keyboard-handler/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-keyboard-handler/recipe.yaml b/recipes/ros-jazzy-keyboard-handler/recipe.yaml
new file mode 100644
index 00000000..492f62ae
--- /dev/null
+++ b/recipes/ros-jazzy-keyboard-handler/recipe.yaml
@@ -0,0 +1,87 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-keyboard-handler
+  version: 0.3.1
+source:
+  git: https://github.com/ros2-gbp/keyboard_handler-release.git
+  tag: release/jazzy/keyboard_handler/0.3.1-2
+  target_directory: ros-jazzy-keyboard-handler/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-laser-geometry/bld_ament_cmake.bat b/recipes/ros-jazzy-laser-geometry/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-laser-geometry/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-laser-geometry/build_ament_cmake.sh b/recipes/ros-jazzy-laser-geometry/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-laser-geometry/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-laser-geometry/recipe.yaml b/recipes/ros-jazzy-laser-geometry/recipe.yaml
new file mode 100644
index 00000000..eea24fe9
--- /dev/null
+++ b/recipes/ros-jazzy-laser-geometry/recipe.yaml
@@ -0,0 +1,104 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-laser-geometry
+  version: 2.7.0
+source:
+  git: https://github.com/ros2-gbp/laser_geometry-release.git
+  tag: release/jazzy/laser_geometry/2.7.0-3
+  target_directory: ros-jazzy-laser-geometry/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - eigen
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-cppcheck
+    - ros-jazzy-ament-cmake-cpplint
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-cmake-uncrustify
+    - ros-jazzy-eigen3-cmake-module
+    - ros-jazzy-python-cmake-module
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-tf2
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - eigen
+    - numpy
+    - python
+    - ros-jazzy-eigen3-cmake-module
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-sensor-msgs-py
+    - ros-jazzy-tf2
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-launch-ros/bld_ament_python.bat b/recipes/ros-jazzy-launch-ros/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-launch-ros/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-launch-ros/build_ament_python.sh b/recipes/ros-jazzy-launch-ros/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-launch-ros/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-launch-ros/recipe.yaml b/recipes/ros-jazzy-launch-ros/recipe.yaml
new file mode 100644
index 00000000..292dd194
--- /dev/null
+++ b/recipes/ros-jazzy-launch-ros/recipe.yaml
@@ -0,0 +1,104 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-launch-ros
+  version: 0.26.6
+source:
+  git: https://github.com/ros2-gbp/launch_ros-release.git
+  tag: release/jazzy/launch_ros/0.26.6-1
+  target_directory: ros-jazzy-launch-ros/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - importlib-metadata
+    - numpy
+    - pip
+    - pytest
+    - python
+    - pyyaml
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-composition-interfaces
+    - ros-jazzy-launch
+    - ros-jazzy-lifecycle-msgs
+    - ros-jazzy-osrf-pycommon
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - importlib-metadata
+    - python
+    - pyyaml
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-composition-interfaces
+    - ros-jazzy-launch
+    - ros-jazzy-lifecycle-msgs
+    - ros-jazzy-osrf-pycommon
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-launch-testing-ament-cmake/bld_ament_cmake.bat b/recipes/ros-jazzy-launch-testing-ament-cmake/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-launch-testing-ament-cmake/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-launch-testing-ament-cmake/build_ament_cmake.sh b/recipes/ros-jazzy-launch-testing-ament-cmake/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-launch-testing-ament-cmake/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-launch-testing-ament-cmake/recipe.yaml b/recipes/ros-jazzy-launch-testing-ament-cmake/recipe.yaml
new file mode 100644
index 00000000..f7580e34
--- /dev/null
+++ b/recipes/ros-jazzy-launch-testing-ament-cmake/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-launch-testing-ament-cmake
+  version: 3.4.3
+source:
+  git: https://github.com/ros2-gbp/launch-release.git
+  tag: release/jazzy/launch_testing_ament_cmake/3.4.3-1
+  target_directory: ros-jazzy-launch-testing-ament-cmake/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-copyright
+    - ros-jazzy-ament-cmake-test
+    - ros-jazzy-launch-testing
+    - ros-jazzy-python-cmake-module
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake-test
+    - ros-jazzy-launch-testing
+    - ros-jazzy-python-cmake-module
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-launch-testing-ros/bld_ament_python.bat b/recipes/ros-jazzy-launch-testing-ros/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-launch-testing-ros/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-launch-testing-ros/build_ament_python.sh b/recipes/ros-jazzy-launch-testing-ros/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-launch-testing-ros/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-launch-testing-ros/recipe.yaml b/recipes/ros-jazzy-launch-testing-ros/recipe.yaml
new file mode 100644
index 00000000..4cfd4565
--- /dev/null
+++ b/recipes/ros-jazzy-launch-testing-ros/recipe.yaml
@@ -0,0 +1,93 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-launch-testing-ros
+  version: 0.26.6
+source:
+  git: https://github.com/ros2-gbp/launch_ros-release.git
+  tag: release/jazzy/launch_testing_ros/0.26.6-1
+  target_directory: ros-jazzy-launch-testing-ros/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-launch-ros
+    - ros-jazzy-launch-testing
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-libstatistics-collector/bld_ament_cmake.bat b/recipes/ros-jazzy-libstatistics-collector/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-libstatistics-collector/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-libstatistics-collector/build_ament_cmake.sh b/recipes/ros-jazzy-libstatistics-collector/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-libstatistics-collector/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-libstatistics-collector/recipe.yaml b/recipes/ros-jazzy-libstatistics-collector/recipe.yaml
new file mode 100644
index 00000000..2e56f3d8
--- /dev/null
+++ b/recipes/ros-jazzy-libstatistics-collector/recipe.yaml
@@ -0,0 +1,102 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-libstatistics-collector
+  version: 1.7.4
+source:
+  git: https://github.com/ros2-gbp/libstatistics_collector-release.git
+  tag: release/jazzy/libstatistics_collector/1.7.4-1
+  target_directory: ros-jazzy-libstatistics-collector/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-performance-test-fixture
+    - ros-jazzy-rcl
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-rosidl-default-runtime
+    - ros-jazzy-statistics-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-rcl
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-statistics-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-libyaml-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-libyaml-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-libyaml-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-libyaml-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-libyaml-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-libyaml-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-libyaml-vendor/recipe.yaml b/recipes/ros-jazzy-libyaml-vendor/recipe.yaml
new file mode 100644
index 00000000..35ccd290
--- /dev/null
+++ b/recipes/ros-jazzy-libyaml-vendor/recipe.yaml
@@ -0,0 +1,95 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-libyaml-vendor
+  version: 1.6.3
+source:
+  git: https://github.com/ros2-gbp/libyaml_vendor-release.git
+  tag: release/jazzy/libyaml_vendor/1.6.3-2
+  target_directory: ros-jazzy-libyaml-vendor/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pkg-config
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-performance-test-fixture
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - yaml
+    - yaml-cpp
+  run:
+    - pkg-config
+    - python
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - yaml
+    - yaml-cpp
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-lifecycle-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-lifecycle-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-lifecycle-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-lifecycle-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-lifecycle-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-lifecycle-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-lifecycle-msgs/recipe.yaml b/recipes/ros-jazzy-lifecycle-msgs/recipe.yaml
new file mode 100644
index 00000000..d9ecd590
--- /dev/null
+++ b/recipes/ros-jazzy-lifecycle-msgs/recipe.yaml
@@ -0,0 +1,88 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-lifecycle-msgs
+  version: 2.0.2
+source:
+  git: https://github.com/ros2-gbp/rcl_interfaces-release.git
+  tag: release/jazzy/lifecycle_msgs/2.0.2-2
+  target_directory: ros-jazzy-lifecycle-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-lifecycle/bld_ament_cmake.bat b/recipes/ros-jazzy-lifecycle/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-lifecycle/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-lifecycle/build_ament_cmake.sh b/recipes/ros-jazzy-lifecycle/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-lifecycle/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-lifecycle/recipe.yaml b/recipes/ros-jazzy-lifecycle/recipe.yaml
new file mode 100644
index 00000000..9827993a
--- /dev/null
+++ b/recipes/ros-jazzy-lifecycle/recipe.yaml
@@ -0,0 +1,95 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-lifecycle
+  version: 0.33.5
+source:
+  git: https://github.com/ros2-gbp/demos-release.git
+  tag: release/jazzy/lifecycle/0.33.5-1
+  target_directory: ros-jazzy-lifecycle/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-lifecycle-msgs
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-lifecycle
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-testing
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-lifecycle-msgs
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-lifecycle
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-logging-demo/bld_ament_cmake.bat b/recipes/ros-jazzy-logging-demo/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-logging-demo/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-logging-demo/build_ament_cmake.sh b/recipes/ros-jazzy-logging-demo/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-logging-demo/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-logging-demo/recipe.yaml b/recipes/ros-jazzy-logging-demo/recipe.yaml
new file mode 100644
index 00000000..3e7a85c2
--- /dev/null
+++ b/recipes/ros-jazzy-logging-demo/recipe.yaml
@@ -0,0 +1,102 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-logging-demo
+  version: 0.33.5
+source:
+  git: https://github.com/ros2-gbp/demos-release.git
+  tag: release/jazzy/logging_demo/0.33.5-1
+  target_directory: ros-jazzy-logging-demo/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-launch
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ament-cmake
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw-implementation-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-map-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-map-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-map-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-map-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-map-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-map-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-map-msgs/recipe.yaml b/recipes/ros-jazzy-map-msgs/recipe.yaml
new file mode 100644
index 00000000..dad18f04
--- /dev/null
+++ b/recipes/ros-jazzy-map-msgs/recipe.yaml
@@ -0,0 +1,93 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-map-msgs
+  version: 2.4.1
+source:
+  git: https://github.com/ros2-gbp/navigation_msgs-release.git
+  tag: release/jazzy/map_msgs/2.4.1-2
+  target_directory: ros-jazzy-map-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-nav-msgs
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-nav-msgs
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-message-filters/bld_ament_cmake.bat b/recipes/ros-jazzy-message-filters/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-message-filters/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-message-filters/build_ament_cmake.sh b/recipes/ros-jazzy-message-filters/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-message-filters/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-message-filters/recipe.yaml b/recipes/ros-jazzy-message-filters/recipe.yaml
new file mode 100644
index 00000000..e9b33ce9
--- /dev/null
+++ b/recipes/ros-jazzy-message-filters/recipe.yaml
@@ -0,0 +1,99 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-message-filters
+  version: 4.11.3
+source:
+  git: https://github.com/ros2-gbp/ros2_message_filters-release.git
+  tag: release/jazzy/message_filters/4.11.3-1
+  target_directory: ros-jazzy-message-filters/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-cmake-python
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-python-cmake-module
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-lifecycle
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclpy
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-mimick-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-mimick-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-mimick-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-mimick-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-mimick-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-mimick-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-mimick-vendor/recipe.yaml b/recipes/ros-jazzy-mimick-vendor/recipe.yaml
new file mode 100644
index 00000000..c2101b67
--- /dev/null
+++ b/recipes/ros-jazzy-mimick-vendor/recipe.yaml
@@ -0,0 +1,88 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-mimick-vendor
+  version: 0.6.2
+source:
+  git: https://github.com/ros2-gbp/mimick_vendor-release.git
+  tag: release/jazzy/mimick_vendor/0.6.2-1
+  target_directory: ros-jazzy-mimick-vendor/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+    - vcstool
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-nav-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-nav-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-nav-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-nav-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-nav-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-nav-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-nav-msgs/recipe.yaml b/recipes/ros-jazzy-nav-msgs/recipe.yaml
new file mode 100644
index 00000000..03f154cf
--- /dev/null
+++ b/recipes/ros-jazzy-nav-msgs/recipe.yaml
@@ -0,0 +1,93 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-nav-msgs
+  version: 5.3.5
+source:
+  git: https://github.com/ros2-gbp/common_interfaces-release.git
+  tag: release/jazzy/nav_msgs/5.3.5-1
+  target_directory: ros-jazzy-nav-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-orocos-kdl-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-orocos-kdl-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-orocos-kdl-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-orocos-kdl-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-orocos-kdl-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-orocos-kdl-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-orocos-kdl-vendor/recipe.yaml b/recipes/ros-jazzy-orocos-kdl-vendor/recipe.yaml
new file mode 100644
index 00000000..1dcefa2d
--- /dev/null
+++ b/recipes/ros-jazzy-orocos-kdl-vendor/recipe.yaml
@@ -0,0 +1,93 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-orocos-kdl-vendor
+  version: 0.5.1
+source:
+  git: https://github.com/ros2-gbp/orocos_kdl_vendor-release.git
+  tag: release/jazzy/orocos_kdl_vendor/0.5.1-2
+  target_directory: ros-jazzy-orocos-kdl-vendor/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - eigen
+    - numpy
+    - orocos-kdl
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-eigen3-cmake-module
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - eigen
+    - orocos-kdl
+    - python
+    - ros-jazzy-eigen3-cmake-module
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-pcl-conversions/bld_ament_cmake.bat b/recipes/ros-jazzy-pcl-conversions/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-pcl-conversions/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-pcl-conversions/build_ament_cmake.sh b/recipes/ros-jazzy-pcl-conversions/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-pcl-conversions/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-pcl-conversions/recipe.yaml b/recipes/ros-jazzy-pcl-conversions/recipe.yaml
new file mode 100644
index 00000000..8d3b3ad7
--- /dev/null
+++ b/recipes/ros-jazzy-pcl-conversions/recipe.yaml
@@ -0,0 +1,114 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-pcl-conversions
+  version: 2.6.2
+source:
+  git: https://github.com/ros2-gbp/perception_pcl-release.git
+  tag: release/jazzy/pcl_conversions/2.6.2-1
+  target_directory: ros-jazzy-pcl-conversions/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - eigen
+    - libboost-devel
+    - numpy
+    - pcl
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-message-filters
+    - ros-jazzy-pcl-msgs
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - vtk-base
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - eigen
+    - libboost-devel
+    - pcl
+    - python
+    - ros-jazzy-message-filters
+    - ros-jazzy-pcl-msgs
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - vtk-base
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-pcl-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-pcl-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-pcl-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-pcl-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-pcl-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-pcl-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-pcl-msgs/recipe.yaml b/recipes/ros-jazzy-pcl-msgs/recipe.yaml
new file mode 100644
index 00000000..34ba4236
--- /dev/null
+++ b/recipes/ros-jazzy-pcl-msgs/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-pcl-msgs
+  version: 1.0.0
+source:
+  git: https://github.com/ros2-gbp/pcl_msgs-release.git
+  tag: release/jazzy/pcl_msgs/1.0.0-9
+  target_directory: ros-jazzy-pcl-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-pendulum-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-pendulum-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-pendulum-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-pendulum-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-pendulum-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-pendulum-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-pendulum-msgs/recipe.yaml b/recipes/ros-jazzy-pendulum-msgs/recipe.yaml
new file mode 100644
index 00000000..21ccf08e
--- /dev/null
+++ b/recipes/ros-jazzy-pendulum-msgs/recipe.yaml
@@ -0,0 +1,88 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-pendulum-msgs
+  version: 0.33.5
+source:
+  git: https://github.com/ros2-gbp/demos-release.git
+  tag: release/jazzy/pendulum_msgs/0.33.5-1
+  target_directory: ros-jazzy-pendulum-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-performance-test-fixture/bld_ament_cmake.bat b/recipes/ros-jazzy-performance-test-fixture/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-performance-test-fixture/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-performance-test-fixture/build_ament_cmake.sh b/recipes/ros-jazzy-performance-test-fixture/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-performance-test-fixture/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-performance-test-fixture/recipe.yaml b/recipes/ros-jazzy-performance-test-fixture/recipe.yaml
new file mode 100644
index 00000000..0ba1a6cf
--- /dev/null
+++ b/recipes/ros-jazzy-performance-test-fixture/recipe.yaml
@@ -0,0 +1,95 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-performance-test-fixture
+  version: 0.2.1
+source:
+  git: https://github.com/ros2-gbp/performance_test_fixture-release.git
+  tag: release/jazzy/performance_test_fixture/0.2.1-2
+  target_directory: ros-jazzy-performance-test-fixture/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-export-dependencies
+    - ros-jazzy-ament-cmake-export-targets
+    - ros-jazzy-ament-cmake-google-benchmark
+    - ros-jazzy-ament-cmake-test
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-google-benchmark-vendor
+    - ros-jazzy-osrf-testing-tools-cpp
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake-google-benchmark
+    - ros-jazzy-google-benchmark-vendor
+    - ros-jazzy-osrf-testing-tools-cpp
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-pluginlib/bld_ament_cmake.bat b/recipes/ros-jazzy-pluginlib/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-pluginlib/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-pluginlib/build_ament_cmake.sh b/recipes/ros-jazzy-pluginlib/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-pluginlib/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-pluginlib/recipe.yaml b/recipes/ros-jazzy-pluginlib/recipe.yaml
new file mode 100644
index 00000000..bed0e572
--- /dev/null
+++ b/recipes/ros-jazzy-pluginlib/recipe.yaml
@@ -0,0 +1,95 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-pluginlib
+  version: 5.4.2
+source:
+  git: https://github.com/ros2-gbp/pluginlib-release.git
+  tag: release/jazzy/pluginlib/5.4.2-2
+  target_directory: ros-jazzy-pluginlib/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-class-loader
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tinyxml2-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-class-loader
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tinyxml2-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-point-cloud-transport/bld_ament_cmake.bat b/recipes/ros-jazzy-point-cloud-transport/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-point-cloud-transport/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-point-cloud-transport/build_ament_cmake.sh b/recipes/ros-jazzy-point-cloud-transport/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-point-cloud-transport/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-point-cloud-transport/recipe.yaml b/recipes/ros-jazzy-point-cloud-transport/recipe.yaml
new file mode 100644
index 00000000..c352d1e5
--- /dev/null
+++ b/recipes/ros-jazzy-point-cloud-transport/recipe.yaml
@@ -0,0 +1,100 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-point-cloud-transport
+  version: 4.0.3
+source:
+  git: https://github.com/ros2-gbp/point_cloud_transport-release.git
+  tag: release/jazzy/point_cloud_transport/4.0.3-1
+  target_directory: ros-jazzy-point-cloud-transport/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-message-filters
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-message-filters
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-python-cmake-module/bld_ament_cmake.bat b/recipes/ros-jazzy-python-cmake-module/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-python-cmake-module/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-python-cmake-module/build_ament_cmake.sh b/recipes/ros-jazzy-python-cmake-module/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-python-cmake-module/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-python-cmake-module/recipe.yaml b/recipes/ros-jazzy-python-cmake-module/recipe.yaml
new file mode 100644
index 00000000..31b343a0
--- /dev/null
+++ b/recipes/ros-jazzy-python-cmake-module/recipe.yaml
@@ -0,0 +1,86 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-python-cmake-module
+  version: 0.11.1
+source:
+  git: https://github.com/ros2-gbp/python_cmake_module-release.git
+  tag: release/jazzy/python_cmake_module/0.11.1-2
+  target_directory: ros-jazzy-python-cmake-module/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-python-qt-binding/bld_ament_cmake.bat b/recipes/ros-jazzy-python-qt-binding/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-python-qt-binding/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-python-qt-binding/build_ament_cmake.sh b/recipes/ros-jazzy-python-qt-binding/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-python-qt-binding/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-python-qt-binding/patch/ros-jazzy-python-qt-binding.patch b/recipes/ros-jazzy-python-qt-binding/patch/ros-jazzy-python-qt-binding.patch
new file mode 100644
index 00000000..d025bbca
--- /dev/null
+++ b/recipes/ros-jazzy-python-qt-binding/patch/ros-jazzy-python-qt-binding.patch
@@ -0,0 +1,254 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 919969e..2bf015a 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -11,6 +11,7 @@ install(FILES
+   cmake/shiboken_helper.cmake
+   cmake/sip_configure.py
+   cmake/sip_helper.cmake
++  cmake/pyproject.toml.in
+   DESTINATION share/${PROJECT_NAME}/cmake)
+ 
+ if(BUILD_TESTING)
+diff --git a/cmake/pyproject.toml.in b/cmake/pyproject.toml.in
+new file mode 100644
+index 0000000..cf4f57f
+--- /dev/null
++++ b/cmake/pyproject.toml.in
+@@ -0,0 +1,31 @@
++[project]
++name = "lib@PROJECT_NAME@"
++
++# Specify sip v5 as the build system for the package.
++[build-system]
++requires = ["PyQt-builder >=1, <2"]
++build-backend = "sipbuild.api"
++
++[tool.sip]
++project-factory = "pyqtbuild:PyQtProject"
++
++[tool.sip.builder]
++qmake = "@QMAKE_EXECUTABLE@"
++qmake-settings = [ "QMAKE_MACOSX_DEPLOYMENT_TARGET=@MACOS_MINIMUM_VERSION@", "CONFIG+=c++17" ]
++
++[tool.sip.project]
++sip-files-dir = "@SIP_FILES_DIR@"
++build-dir = "@SIP_BUILD_DIR@"
++verbose = true
++minimum-macos-version = "@MACOS_MINIMUM_VERSION@"
++# Specify the PEP 566 metadata for the project.
++[tool.sip.metadata]
++name = "lib@PROJECT_NAME@"
++
++[tool.sip.bindings.libqt_gui_cpp_sip]
++sip-file = "@SIP_FILE@"
++include-dirs = [@SIP_INCLUDE_DIRS@]
++libraries = [@SIP_LIBARIES@]
++library-dirs = [@SIP_LIBRARY_DIRS@]
++qmake-QT = ["widgets"]
++exceptions = true
+diff --git a/cmake/sip_configure.py b/cmake/sip_configure.py
+index 5210ee5..7bafe73 100644
+--- a/cmake/sip_configure.py
++++ b/cmake/sip_configure.py
+@@ -215,6 +215,7 @@ if sys.platform == 'win32':
+     # The __cplusplus flag is not properly set on Windows for backwards
+     # compatibilty. This flag sets it correctly
+     makefile.CXXFLAGS.append('/Zc:__cplusplus')
++    makefile.extra_cxxflags.append('/DROS_BUILD_SHARED_LIBS=1')
+ else:
+     makefile.extra_cxxflags.append('-std=c++17')
+ 
+diff --git a/cmake/sip_helper.cmake b/cmake/sip_helper.cmake
+index a5ac3c2..fdc9c18 100644
+--- a/cmake/sip_helper.cmake
++++ b/cmake/sip_helper.cmake
+@@ -31,7 +31,7 @@ execute_process(
+ if(PYTHON_SIP_EXECUTABLE)
+   string(STRIP ${PYTHON_SIP_EXECUTABLE} SIP_EXECUTABLE)
+ else()
+-  find_program(SIP_EXECUTABLE sip)
++  find_program(SIP_EXECUTABLE NAMES sip sip-build)
+ endif()
+ 
+ if(SIP_EXECUTABLE)
+@@ -42,6 +42,15 @@ else()
+   set(sip_helper_NOTFOUND TRUE)
+ endif()
+ 
++if(sip_helper_FOUND)
++  execute_process(
++    COMMAND ${SIP_EXECUTABLE} -V
++    OUTPUT_VARIABLE SIP_VERSION
++    ERROR_QUIET)
++  string(STRIP ${SIP_VERSION} SIP_VERSION)
++  message(STATUS "SIP binding generator version: ${SIP_VERSION}")
++endif()
++
+ #
+ # Run the SIP generator and compile the generated code into a library.
+ #
+@@ -93,34 +102,107 @@ function(build_sip_binding PROJECT_NAME SIP_FILE)
+     set(LIBRARY_DIRS ${${PROJECT_NAME}_LIBRARY_DIRS})
+     set(LDFLAGS_OTHER ${${PROJECT_NAME}_LDFLAGS_OTHER})
+ 
+-    add_custom_command(
+-        OUTPUT ${SIP_BUILD_DIR}/Makefile
+-        COMMAND ${Python3_EXECUTABLE} ${sip_SIP_CONFIGURE} ${SIP_BUILD_DIR} ${SIP_FILE} ${sip_LIBRARY_DIR}
+-          \"${INCLUDE_DIRS}\" \"${LIBRARIES}\" \"${LIBRARY_DIRS}\" \"${LDFLAGS_OTHER}\"
+-        DEPENDS ${sip_SIP_CONFIGURE} ${SIP_FILE} ${sip_DEPENDS}
+-        WORKING_DIRECTORY ${sip_SOURCE_DIR}
+-        COMMENT "Running SIP generator for ${PROJECT_NAME} Python bindings..."
+-    )
++    if(${SIP_VERSION} VERSION_GREATER_EQUAL "5.0.0")
++        # Since v5, SIP implements the backend per PEP 517, PEP 518
++        # Here we synthesize `pyproject.toml` and run `pip install`
+ 
+-    if(NOT EXISTS "${sip_LIBRARY_DIR}")
++        find_program(QMAKE_EXECUTABLE NAMES qmake REQUIRED)
++
++        file(REMOVE_RECURSE ${SIP_BUILD_DIR})
+         file(MAKE_DIRECTORY ${sip_LIBRARY_DIR})
+-    endif()
+ 
+-    if(WIN32)
+-      set(MAKE_EXECUTABLE NMake.exe)
++        set(SIP_FILES_DIR ${sip_SOURCE_DIR})
++
++        set(SIP_INCLUDE_DIRS "")
++        foreach(_x ${INCLUDE_DIRS})
++          set(SIP_INCLUDE_DIRS "${SIP_INCLUDE_DIRS},\"${_x}\"")
++        endforeach()
++        string(REGEX REPLACE "^," "" SIP_INCLUDE_DIRS ${SIP_INCLUDE_DIRS})
++
++        # SIP expects the libraries WITHOUT the file extension.
++        set(SIP_LIBARIES "")
++        set(SIP_LIBRARY_DIRS "")
++
++        if(APPLE)
++          set(LIBRARIES_TO_LOOP ${LIBRARIES})
++        else()
++          set(LIBRARIES_TO_LOOP ${LIBRARIES} ${PYTHON_LIBRARIES})
++        endif()
++
++        foreach(_x ${LIBRARIES_TO_LOOP})
++          get_filename_component(_x_NAME "${_x}" NAME_WLE)
++          get_filename_component(_x_DIR "${_x}" DIRECTORY)
++          get_filename_component(_x "${_x_DIR}/${_x_NAME}" ABSOLUTE)
++          STRING(REGEX REPLACE "^lib" "" _x_NAME_NOPREFIX ${_x_NAME})
++
++          string(FIND "${_x_NAME_NOPREFIX}" "$<TARGET_FILE" out)
++          string(FIND "${_x_NAME_NOPREFIX}" "::" out2)
++          if("${out}" EQUAL 0)
++            STRING(REGEX REPLACE "\\$<TARGET_FILE:" "" _x_NAME_NOPREFIX ${_x_NAME_NOPREFIX})
++            STRING(REGEX REPLACE ">" "" _x_NAME_NOPREFIX ${_x_NAME_NOPREFIX})
++            if(NOT "${out2}" EQUAL -1)
++              message(STATUS "IGNORE: ${_x_NAME_NOPREFIX}")
++            else()
++              set(SIP_LIBARIES "${SIP_LIBARIES},\"${_x_NAME_NOPREFIX}\"")
++            endif()
++          else()
++            set(SIP_LIBARIES "${SIP_LIBARIES},\"${_x_NAME_NOPREFIX}\"")
++            set(SIP_LIBRARY_DIRS "${SIP_LIBRARY_DIRS},\"${_x_DIR}\"")
++          endif()
++        endforeach()
++        string(REGEX REPLACE "^," "" SIP_LIBARIES ${SIP_LIBARIES})
++
++        foreach(_x ${LIBRARY_DIRS})
++          set(SIP_LIBRARY_DIRS "${SIP_LIBRARY_DIRS},\"${_x}\"")
++        endforeach()
++        string(REGEX REPLACE "^," "" SIP_LIBRARY_DIRS ${SIP_LIBRARY_DIRS})
++        message(WARNING "test lib dir: ${SIP_LIBRARY_DIRS}")
++
++        set(MACOS_MINIMUM_VERSION ${CMAKE_OSX_DEPLOYMENT_TARGET})
++
++        # TODO:
++        #   I don't know what to do about LDFLAGS_OTHER
++        #   what's the equivalent construct in sip5?
++
++        configure_file(
++            ${__PYTHON_QT_BINDING_SIP_HELPER_DIR}/pyproject.toml.in
++            ${sip_BINARY_DIR}/sip/pyproject.toml
++        )
++        add_custom_command(
++            OUTPUT ${sip_LIBRARY_DIR}/lib${PROJECT_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}
++            COMMAND ${Python3_EXECUTABLE} -m pip install . --target ${sip_LIBRARY_DIR} --no-deps --verbose --upgrade
++            DEPENDS ${sip_SIP_CONFIGURE} ${SIP_FILE} ${sip_DEPENDS}
++            WORKING_DIRECTORY ${sip_BINARY_DIR}/sip
++            COMMENT "Running SIP-build generator for ${PROJECT_NAME} Python bindings..."
++        )
+     else()
+-      find_program(MAKE_PROGRAM NAMES make)
+-      message(STATUS "Found required make: ${MAKE_PROGRAM}")
+-      set(MAKE_EXECUTABLE ${MAKE_PROGRAM})
+-    endif()
++        add_custom_command(
++            OUTPUT ${SIP_BUILD_DIR}/Makefile
++            COMMAND ${Python3_EXECUTABLE} ${sip_SIP_CONFIGURE} ${SIP_BUILD_DIR} ${SIP_FILE} ${sip_LIBRARY_DIR}
++              \"${INCLUDE_DIRS}\" \"${LIBRARIES}\" \"${LIBRARY_DIRS}\" \"${LDFLAGS_OTHER}\"
++            DEPENDS ${sip_SIP_CONFIGURE} ${SIP_FILE} ${sip_DEPENDS}
++            WORKING_DIRECTORY ${sip_SOURCE_DIR}
++            COMMENT "Running SIP generator for ${PROJECT_NAME} Python bindings..."
++        )
+ 
+-    add_custom_command(
+-        OUTPUT ${sip_LIBRARY_DIR}/lib${PROJECT_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}
+-        COMMAND ${MAKE_EXECUTABLE}
+-        DEPENDS ${SIP_BUILD_DIR}/Makefile
+-        WORKING_DIRECTORY ${SIP_BUILD_DIR}
+-        COMMENT "Compiling generated code for ${PROJECT_NAME} Python bindings..."
+-    )
++        if(NOT EXISTS "${sip_LIBRARY_DIR}")
++            file(MAKE_DIRECTORY ${sip_LIBRARY_DIR})
++        endif()
++
++        if(WIN32)
++            set(MAKE_EXECUTABLE NMake.exe)
++        else()
++            set(MAKE_EXECUTABLE make)
++        endif()
++
++        add_custom_command(
++            OUTPUT ${sip_LIBRARY_DIR}/lib${PROJECT_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}
++            COMMAND ${MAKE_EXECUTABLE}
++            DEPENDS ${SIP_BUILD_DIR}/Makefile
++            WORKING_DIRECTORY ${SIP_BUILD_DIR}
++            COMMENT "Compiling generated code for ${PROJECT_NAME} Python bindings..."
++        )
++    endif()
+ 
+     add_custom_target(lib${PROJECT_NAME} ALL
+         DEPENDS ${sip_LIBRARY_DIR}/lib${PROJECT_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}
+diff --git a/src/python_qt_binding/__init__.py b/src/python_qt_binding/__init__.py
+index 1e209de..6b55f35 100644
+--- a/src/python_qt_binding/__init__.py
++++ b/src/python_qt_binding/__init__.py
+@@ -66,3 +66,11 @@ for module_name, module in QT_BINDING_MODULES.items():
+     del module
+ 
+ del sys
++
++import os
++from PyQt5.QtGui import QIcon
++current_theme_path = QIcon.themeSearchPaths()
++conda_path = os.environ['CONDA_PREFIX']
++QIcon.setThemeSearchPaths(current_theme_path + [os.path.join(conda_path, 'share/icons/')])
++QIcon.setThemeName('Adwaita')
++del os
+diff --git a/src/python_qt_binding/binding_helper.py b/src/python_qt_binding/binding_helper.py
+index 27c3237..781fe62 100644
+--- a/src/python_qt_binding/binding_helper.py
++++ b/src/python_qt_binding/binding_helper.py
+@@ -50,11 +50,7 @@ QT_BINDING_VERSION = None
+ def _select_qt_binding(binding_name=None, binding_order=None):
+     global QT_BINDING, QT_BINDING_VERSION
+ 
+-    # order of default bindings can be changed here
+-    if platform.system() == 'Darwin':
+-        DEFAULT_BINDING_ORDER = ['pyside']
+-    else:
+-        DEFAULT_BINDING_ORDER = ['pyqt', 'pyside']
++    DEFAULT_BINDING_ORDER = ['pyqt', 'pyside']
+ 
+     binding_order = binding_order or DEFAULT_BINDING_ORDER
+ 
diff --git a/recipes/ros-jazzy-python-qt-binding/recipe.yaml b/recipes/ros-jazzy-python-qt-binding/recipe.yaml
new file mode 100644
index 00000000..9f94d83a
--- /dev/null
+++ b/recipes/ros-jazzy-python-qt-binding/recipe.yaml
@@ -0,0 +1,110 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-python-qt-binding
+  version: 2.2.1
+source:
+  git: https://github.com/ros2-gbp/python_qt_binding-release.git
+  tag: release/jazzy/python_qt_binding/2.2.1-1
+  target_directory: ros-jazzy-python-qt-binding/src/work
+  patches:
+    - patch/ros-jazzy-python-qt-binding.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+    - if: build_platform != target_platform
+      then:
+        - pyqt-builder
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pyqt
+    - python
+    - qt-main
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: build_platform == target_platform
+      then:
+        - pyqt-builder
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - pyqt
+    - pyqt-builder
+    - python
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-qt-dotgraph/bld_ament_cmake.bat b/recipes/ros-jazzy-qt-dotgraph/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-qt-dotgraph/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-qt-dotgraph/build_ament_cmake.sh b/recipes/ros-jazzy-qt-dotgraph/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-qt-dotgraph/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-qt-dotgraph/recipe.yaml b/recipes/ros-jazzy-qt-dotgraph/recipe.yaml
new file mode 100644
index 00000000..13d91742
--- /dev/null
+++ b/recipes/ros-jazzy-qt-dotgraph/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-qt-dotgraph
+  version: 2.7.5
+source:
+  git: https://github.com/ros2-gbp/qt_gui_core-release.git
+  tag: release/jazzy/qt_dotgraph/2.7.5-1
+  target_directory: ros-jazzy-qt-dotgraph/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pygraphviz
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - pydot
+    - python
+    - ros-jazzy-python-qt-binding
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-qt-gui-cpp/bld_ament_cmake.bat b/recipes/ros-jazzy-qt-gui-cpp/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-qt-gui-cpp/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-qt-gui-cpp/build_ament_cmake.sh b/recipes/ros-jazzy-qt-gui-cpp/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-qt-gui-cpp/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-qt-gui-cpp/patch/ros-jazzy-qt-gui-cpp.patch b/recipes/ros-jazzy-qt-gui-cpp/patch/ros-jazzy-qt-gui-cpp.patch
new file mode 100644
index 00000000..7b18400e
--- /dev/null
+++ b/recipes/ros-jazzy-qt-gui-cpp/patch/ros-jazzy-qt-gui-cpp.patch
@@ -0,0 +1,61 @@
+diff --git a/src/qt_gui_cpp_sip/CMakeLists.txt b/src/qt_gui_cpp_sip/CMakeLists.txt
+index 47c24958..d5a95d48 100644
+--- a/src/qt_gui_cpp_sip/CMakeLists.txt
++++ b/src/qt_gui_cpp_sip/CMakeLists.txt
+@@ -28,7 +28,7 @@ set(qt_gui_cpp_sip_DEPENDENT_FILES
+ 
+ # maintain context for different named target
+ set(qt_gui_cpp_sip_INCLUDE_DIRS ${qt_gui_cpp_INCLUDE_DIRS} "${CMAKE_CURRENT_SOURCE_DIR}/../../include")
+-set(qt_gui_cpp_sip_LIBRARY_DIRS ${qt_gui_cpp_LIBRARY_DIRS} lib)
++set(qt_gui_cpp_sip_LIBRARY_DIRS ${CMAKE_BINARY_DIR})
+ set(qt_gui_cpp_sip_LDFLAGS_OTHER ${qt_gui_cpp_LDFLAGS_OTHER})
+ 
+ ament_get_recursive_properties(deps_include_dirs deps_libraries ${pluginlib_TARGETS})
+@@ -51,16 +51,22 @@ cmake_minimum_required(VERSION 3.20)
+ cmake_policy(SET CMP0094 NEW)
+ set(Python3_FIND_UNVERSIONED_NAMES FIRST)
+ 
+-find_package(Python3 REQUIRED COMPONENTS Development)
++find_package(Python REQUIRED COMPONENTS Development)
++find_package(OpenGL REQUIRED)
+ 
+ set(_qt_gui_cpp_sip_LIBRARIES
+   ${deps_libraries}
+-  Python3::Python
+   qt_gui_cpp
++  OpenGL::GL
+ )
+ 
++if(NOT APPLE)
++  set(_qt_gui_cpp_sip_LIBRARIES ${_qt_gui_cpp_sip_LIBRARIES} Python::Python)
++endif()
++
+ # sip needs libraries to have resolved paths and cannot link to cmake targets
+-foreach(_lib_name ${_qt_gui_cpp_sip_LIBRARIES})
++foreach(_lib_name_raw ${_qt_gui_cpp_sip_LIBRARIES})
++  string(REGEX REPLACE "\\.so\\.[0-9,\\.]*" ".so" _lib_name ${_lib_name_raw})
+   if(TARGET ${_lib_name})
+     # Use a nifty cmake generator expression to resolve the target location
+     list(APPEND qt_gui_cpp_sip_LIBRARIES $<TARGET_FILE:${_lib_name}>)
+@@ -91,11 +97,19 @@ if(sip_helper_FOUND)
+   )
+ 
+   if(APPLE)
+-    set(LIBQT_GUI_CPP_SIP_SUFFIX .so)
++    if(${SIP_VERSION} VERSION_GREATER_EQUAL "5.0.0")
++      set(LIBQT_GUI_CPP_SIP_SUFFIX ".cpython-${Python_VERSION_MAJOR}${Python_VERSION_MINOR}-darwin.so")
++    else()
++      set(LIBQT_GUI_CPP_SIP_SUFFIX .so)
++    endif()
+   elseif(WIN32)
+     set(LIBQT_GUI_CPP_SIP_SUFFIX .pyd)
+   else()
+-    set(LIBQT_GUI_CPP_SIP_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
++    if(${SIP_VERSION} VERSION_GREATER_EQUAL "5.0.0")
++      set(LIBQT_GUI_CPP_SIP_SUFFIX ".cpython-${Python_VERSION_MAJOR}${Python_VERSION_MINOR}-${CMAKE_HOST_SYSTEM_PROCESSOR}-linux-gnu${CMAKE_SHARED_LIBRARY_SUFFIX}")
++    else()
++      set(LIBQT_GUI_CPP_SIP_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
++    endif()
+   endif()
+ 
+   install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libqt_gui_cpp_sip${LIBQT_GUI_CPP_SIP_SUFFIX}
diff --git a/recipes/ros-jazzy-qt-gui-cpp/recipe.yaml b/recipes/ros-jazzy-qt-gui-cpp/recipe.yaml
new file mode 100644
index 00000000..74f56527
--- /dev/null
+++ b/recipes/ros-jazzy-qt-gui-cpp/recipe.yaml
@@ -0,0 +1,118 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-qt-gui-cpp
+  version: 2.7.5
+source:
+  git: https://github.com/ros2-gbp/qt_gui_core-release.git
+  tag: release/jazzy/qt_gui_cpp/2.7.5-1
+  target_directory: ros-jazzy-qt-gui-cpp/src/work
+  patches:
+    - patch/ros-jazzy-qt-gui-cpp.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+    - ${{ 'pyqt' if (build_platform != target_platform) }}
+    - ${{ 'qt-main' if (build_platform != target_platform) }}
+    - if: build_platform != target_platform
+      then:
+        - pyqt-builder
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pep517
+    - pip
+    - pkg-config
+    - pyside2
+    - python
+    - qt-main
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-pluginlib
+    - ros-jazzy-python-qt-binding
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tinyxml2-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: build_platform == target_platform
+      then:
+        - pyqt-builder
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - pep517
+    - pyqt-builder
+    - python
+    - ros-jazzy-pluginlib
+    - ros-jazzy-qt-gui
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tinyxml2-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-qt-gui-py-common/bld_ament_cmake.bat b/recipes/ros-jazzy-qt-gui-py-common/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-qt-gui-py-common/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-qt-gui-py-common/build_ament_cmake.sh b/recipes/ros-jazzy-qt-gui-py-common/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-qt-gui-py-common/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-qt-gui-py-common/recipe.yaml b/recipes/ros-jazzy-qt-gui-py-common/recipe.yaml
new file mode 100644
index 00000000..5ea3dea6
--- /dev/null
+++ b/recipes/ros-jazzy-qt-gui-py-common/recipe.yaml
@@ -0,0 +1,88 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-qt-gui-py-common
+  version: 2.7.5
+source:
+  git: https://github.com/ros2-gbp/qt_gui_core-release.git
+  tag: release/jazzy/qt_gui_py_common/2.7.5-1
+  target_directory: ros-jazzy-qt-gui-py-common/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-python-qt-binding
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-qt-gui/bld_ament_cmake.bat b/recipes/ros-jazzy-qt-gui/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-qt-gui/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-qt-gui/build_ament_cmake.sh b/recipes/ros-jazzy-qt-gui/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-qt-gui/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-qt-gui/recipe.yaml b/recipes/ros-jazzy-qt-gui/recipe.yaml
new file mode 100644
index 00000000..70d91bae
--- /dev/null
+++ b/recipes/ros-jazzy-qt-gui/recipe.yaml
@@ -0,0 +1,109 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-qt-gui
+  version: 2.7.5
+source:
+  git: https://github.com/ros2-gbp/qt_gui_core-release.git
+  tag: release/jazzy/qt_gui/2.7.5-1
+  target_directory: ros-jazzy-qt-gui/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+    - if: build_platform != target_platform
+      then:
+        - pyqt-builder
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pyqt
+    - python
+    - qt-main
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: build_platform == target_platform
+      then:
+        - pyqt-builder
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - catkin_pkg
+    - python
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-python-qt-binding
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tango-icons-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-quality-of-service-demo-cpp/bld_ament_cmake.bat b/recipes/ros-jazzy-quality-of-service-demo-cpp/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-quality-of-service-demo-cpp/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-quality-of-service-demo-cpp/build_ament_cmake.sh b/recipes/ros-jazzy-quality-of-service-demo-cpp/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-quality-of-service-demo-cpp/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-quality-of-service-demo-cpp/recipe.yaml b/recipes/ros-jazzy-quality-of-service-demo-cpp/recipe.yaml
new file mode 100644
index 00000000..cdc922c9
--- /dev/null
+++ b/recipes/ros-jazzy-quality-of-service-demo-cpp/recipe.yaml
@@ -0,0 +1,104 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-quality-of-service-demo-cpp
+  version: 0.33.5
+source:
+  git: https://github.com/ros2-gbp/demos-release.git
+  tag: release/jazzy/quality_of_service_demo_cpp/0.33.5-1
+  target_directory: ros-jazzy-quality-of-service-demo-cpp/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-example-interfaces
+    - ros-jazzy-launch
+    - ros-jazzy-launch-testing
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-implementation-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-example-interfaces
+    - ros-jazzy-launch-ros
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-quality-of-service-demo-py/bld_ament_python.bat b/recipes/ros-jazzy-quality-of-service-demo-py/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-quality-of-service-demo-py/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-quality-of-service-demo-py/build_ament_python.sh b/recipes/ros-jazzy-quality-of-service-demo-py/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-quality-of-service-demo-py/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-quality-of-service-demo-py/recipe.yaml b/recipes/ros-jazzy-quality-of-service-demo-py/recipe.yaml
new file mode 100644
index 00000000..e520bdce
--- /dev/null
+++ b/recipes/ros-jazzy-quality-of-service-demo-py/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-quality-of-service-demo-py
+  version: 0.33.5
+source:
+  git: https://github.com/ros2-gbp/demos-release.git
+  tag: release/jazzy/quality_of_service_demo_py/0.33.5-1
+  target_directory: ros-jazzy-quality-of-service-demo-py/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rcl-action/bld_ament_cmake.bat b/recipes/ros-jazzy-rcl-action/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rcl-action/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rcl-action/build_ament_cmake.sh b/recipes/ros-jazzy-rcl-action/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rcl-action/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rcl-action/recipe.yaml b/recipes/ros-jazzy-rcl-action/recipe.yaml
new file mode 100644
index 00000000..b337a836
--- /dev/null
+++ b/recipes/ros-jazzy-rcl-action/recipe.yaml
@@ -0,0 +1,101 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rcl-action
+  version: 9.2.4
+source:
+  git: https://github.com/ros2-gbp/rcl-release.git
+  tag: release/jazzy/rcl_action/9.2.4-1
+  target_directory: ros-jazzy-rcl-action/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-action-msgs
+    - ros-jazzy-ament-cmake-gen-version-h
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-osrf-testing-tools-cpp
+    - ros-jazzy-rcl
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-implementation-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-test-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-action-msgs
+    - ros-jazzy-rcl
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-c
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rcl-interfaces/bld_ament_cmake.bat b/recipes/ros-jazzy-rcl-interfaces/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rcl-interfaces/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rcl-interfaces/build_ament_cmake.sh b/recipes/ros-jazzy-rcl-interfaces/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rcl-interfaces/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rcl-interfaces/recipe.yaml b/recipes/ros-jazzy-rcl-interfaces/recipe.yaml
new file mode 100644
index 00000000..96c1490d
--- /dev/null
+++ b/recipes/ros-jazzy-rcl-interfaces/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rcl-interfaces
+  version: 2.0.2
+source:
+  git: https://github.com/ros2-gbp/rcl_interfaces-release.git
+  tag: release/jazzy/rcl_interfaces/2.0.2-2
+  target_directory: ros-jazzy-rcl-interfaces/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rcl-lifecycle/bld_ament_cmake.bat b/recipes/ros-jazzy-rcl-lifecycle/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rcl-lifecycle/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rcl-lifecycle/build_ament_cmake.sh b/recipes/ros-jazzy-rcl-lifecycle/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rcl-lifecycle/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rcl-lifecycle/recipe.yaml b/recipes/ros-jazzy-rcl-lifecycle/recipe.yaml
new file mode 100644
index 00000000..8875271d
--- /dev/null
+++ b/recipes/ros-jazzy-rcl-lifecycle/recipe.yaml
@@ -0,0 +1,101 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rcl-lifecycle
+  version: 9.2.4
+source:
+  git: https://github.com/ros2-gbp/rcl-release.git
+  tag: release/jazzy/rcl_lifecycle/9.2.4-1
+  target_directory: ros-jazzy-rcl-lifecycle/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-gen-version-h
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-lifecycle-msgs
+    - ros-jazzy-osrf-testing-tools-cpp
+    - ros-jazzy-rcl
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-tracetools
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-lifecycle-msgs
+    - ros-jazzy-rcl
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-tracetools
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rcl-logging-interface/bld_ament_cmake.bat b/recipes/ros-jazzy-rcl-logging-interface/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rcl-logging-interface/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rcl-logging-interface/build_ament_cmake.sh b/recipes/ros-jazzy-rcl-logging-interface/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rcl-logging-interface/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rcl-logging-interface/recipe.yaml b/recipes/ros-jazzy-rcl-logging-interface/recipe.yaml
new file mode 100644
index 00000000..fe5e6afa
--- /dev/null
+++ b/recipes/ros-jazzy-rcl-logging-interface/recipe.yaml
@@ -0,0 +1,89 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rcl-logging-interface
+  version: 3.1.1
+source:
+  git: https://github.com/ros2-gbp/rcl_logging-release.git
+  tag: release/jazzy/rcl_logging_interface/3.1.1-1
+  target_directory: ros-jazzy-rcl-logging-interface/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rcl-logging-spdlog/bld_ament_cmake.bat b/recipes/ros-jazzy-rcl-logging-spdlog/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rcl-logging-spdlog/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rcl-logging-spdlog/build_ament_cmake.sh b/recipes/ros-jazzy-rcl-logging-spdlog/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rcl-logging-spdlog/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rcl-logging-spdlog/recipe.yaml b/recipes/ros-jazzy-rcl-logging-spdlog/recipe.yaml
new file mode 100644
index 00000000..2f8551a0
--- /dev/null
+++ b/recipes/ros-jazzy-rcl-logging-spdlog/recipe.yaml
@@ -0,0 +1,97 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rcl-logging-spdlog
+  version: 3.1.1
+source:
+  git: https://github.com/ros2-gbp/rcl_logging-release.git
+  tag: release/jazzy/rcl_logging_spdlog/3.1.1-1
+  target_directory: ros-jazzy-rcl-logging-spdlog/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-performance-test-fixture
+    - ros-jazzy-rcl-logging-interface
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-spdlog-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - spdlog
+  run:
+    - python
+    - ros-jazzy-rcl-logging-interface
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-spdlog-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - spdlog
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rcl-yaml-param-parser/bld_ament_cmake.bat b/recipes/ros-jazzy-rcl-yaml-param-parser/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rcl-yaml-param-parser/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rcl-yaml-param-parser/build_ament_cmake.sh b/recipes/ros-jazzy-rcl-yaml-param-parser/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rcl-yaml-param-parser/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rcl-yaml-param-parser/recipe.yaml b/recipes/ros-jazzy-rcl-yaml-param-parser/recipe.yaml
new file mode 100644
index 00000000..390c11a2
--- /dev/null
+++ b/recipes/ros-jazzy-rcl-yaml-param-parser/recipe.yaml
@@ -0,0 +1,101 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rcl-yaml-param-parser
+  version: 9.2.4
+source:
+  git: https://github.com/ros2-gbp/rcl-release.git
+  tag: release/jazzy/rcl_yaml_param_parser/9.2.4-1
+  target_directory: ros-jazzy-rcl-yaml-param-parser/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-gen-version-h
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-libyaml-vendor
+    - ros-jazzy-mimick-vendor
+    - ros-jazzy-osrf-testing-tools-cpp
+    - ros-jazzy-performance-test-fixture
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - yaml
+    - yaml-cpp
+  run:
+    - python
+    - ros-jazzy-libyaml-vendor
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - yaml
+    - yaml-cpp
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rcl/bld_ament_cmake.bat b/recipes/ros-jazzy-rcl/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rcl/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rcl/build_ament_cmake.sh b/recipes/ros-jazzy-rcl/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rcl/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rcl/recipe.yaml b/recipes/ros-jazzy-rcl/recipe.yaml
new file mode 100644
index 00000000..c9cd2856
--- /dev/null
+++ b/recipes/ros-jazzy-rcl/recipe.yaml
@@ -0,0 +1,124 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rcl
+  version: 9.2.4
+source:
+  git: https://github.com/ros2-gbp/rcl-release.git
+  tag: release/jazzy/rcl/9.2.4-1
+  target_directory: ros-jazzy-rcl/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-gen-version-h
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-launch
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ament-cmake
+    - ros-jazzy-libyaml-vendor
+    - ros-jazzy-mimick-vendor
+    - ros-jazzy-osrf-testing-tools-cpp
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-rcl-logging-interface
+    - ros-jazzy-rcl-logging-spdlog
+    - ros-jazzy-rcl-yaml-param-parser
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-implementation
+    - ros-jazzy-rmw-implementation-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros-jazzy-service-msgs
+    - ros-jazzy-test-msgs
+    - ros-jazzy-tracetools
+    - ros-jazzy-type-description-interfaces
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - yaml
+    - yaml-cpp
+  run:
+    - python
+    - ros-jazzy-libyaml-vendor
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-rcl-logging-interface
+    - ros-jazzy-rcl-logging-spdlog
+    - ros-jazzy-rcl-yaml-param-parser
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-implementation
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-service-msgs
+    - ros-jazzy-tracetools
+    - ros-jazzy-type-description-interfaces
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - yaml
+    - yaml-cpp
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rclcpp-action/bld_ament_cmake.bat b/recipes/ros-jazzy-rclcpp-action/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rclcpp-action/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rclcpp-action/build_ament_cmake.sh b/recipes/ros-jazzy-rclcpp-action/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rclcpp-action/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rclcpp-action/recipe.yaml b/recipes/ros-jazzy-rclcpp-action/recipe.yaml
new file mode 100644
index 00000000..accba985
--- /dev/null
+++ b/recipes/ros-jazzy-rclcpp-action/recipe.yaml
@@ -0,0 +1,104 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rclcpp-action
+  version: 28.1.6
+source:
+  git: https://github.com/ros2-gbp/rclcpp-release.git
+  tag: release/jazzy/rclcpp_action/28.1.6-1
+  target_directory: ros-jazzy-rclcpp-action/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-action-msgs
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-mimick-vendor
+    - ros-jazzy-performance-test-fixture
+    - ros-jazzy-rcl
+    - ros-jazzy-rcl-action
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcpputils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-test-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-action-msgs
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-rcl
+    - ros-jazzy-rcl-action
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcpputils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-c
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rclcpp-components/bld_ament_cmake.bat b/recipes/ros-jazzy-rclcpp-components/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rclcpp-components/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rclcpp-components/build_ament_cmake.sh b/recipes/ros-jazzy-rclcpp-components/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rclcpp-components/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rclcpp-components/recipe.yaml b/recipes/ros-jazzy-rclcpp-components/recipe.yaml
new file mode 100644
index 00000000..b192e1ea
--- /dev/null
+++ b/recipes/ros-jazzy-rclcpp-components/recipe.yaml
@@ -0,0 +1,99 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rclcpp-components
+  version: 28.1.6
+source:
+  git: https://github.com/ros2-gbp/rclcpp-release.git
+  tag: release/jazzy/rclcpp_components/28.1.6-1
+  target_directory: ros-jazzy-rclcpp-components/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-google-benchmark
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-class-loader
+    - ros-jazzy-composition-interfaces
+    - ros-jazzy-launch-testing
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcpputils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-class-loader
+    - ros-jazzy-composition-interfaces
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rclcpp-lifecycle/bld_ament_cmake.bat b/recipes/ros-jazzy-rclcpp-lifecycle/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rclcpp-lifecycle/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rclcpp-lifecycle/build_ament_cmake.sh b/recipes/ros-jazzy-rclcpp-lifecycle/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rclcpp-lifecycle/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rclcpp-lifecycle/recipe.yaml b/recipes/ros-jazzy-rclcpp-lifecycle/recipe.yaml
new file mode 100644
index 00000000..13b7a940
--- /dev/null
+++ b/recipes/ros-jazzy-rclcpp-lifecycle/recipe.yaml
@@ -0,0 +1,107 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rclcpp-lifecycle
+  version: 28.1.6
+source:
+  git: https://github.com/ros2-gbp/rclcpp-release.git
+  tag: release/jazzy/rclcpp_lifecycle/28.1.6-1
+  target_directory: ros-jazzy-rclcpp-lifecycle/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-lifecycle-msgs
+    - ros-jazzy-mimick-vendor
+    - ros-jazzy-performance-test-fixture
+    - ros-jazzy-rcl
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-rcl-lifecycle
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-typesupport-cpp
+    - ros-jazzy-test-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-lifecycle-msgs
+    - ros-jazzy-rcl
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-rcl-lifecycle
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-typesupport-cpp
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rclcpp/bld_ament_cmake.bat b/recipes/ros-jazzy-rclcpp/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rclcpp/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rclcpp/build_ament_cmake.sh b/recipes/ros-jazzy-rclcpp/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rclcpp/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rclcpp/recipe.yaml b/recipes/ros-jazzy-rclcpp/recipe.yaml
new file mode 100644
index 00000000..5451a8b3
--- /dev/null
+++ b/recipes/ros-jazzy-rclcpp/recipe.yaml
@@ -0,0 +1,131 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rclcpp
+  version: 28.1.6
+source:
+  git: https://github.com/ros2-gbp/rclcpp-release.git
+  tag: release/jazzy/rclcpp/28.1.6-1
+  target_directory: ros-jazzy-rclcpp/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-gen-version-h
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-cmake-google-benchmark
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-libstatistics-collector
+    - ros-jazzy-mimick-vendor
+    - ros-jazzy-performance-test-fixture
+    - ros-jazzy-rcl
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-rcl-logging-interface
+    - ros-jazzy-rcl-yaml-param-parser
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-implementation-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosgraph-msgs
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-rosidl-dynamic-typesupport
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros-jazzy-rosidl-typesupport-c
+    - ros-jazzy-rosidl-typesupport-cpp
+    - ros-jazzy-statistics-msgs
+    - ros-jazzy-test-msgs
+    - ros-jazzy-tracetools
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-libstatistics-collector
+    - ros-jazzy-rcl
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-rcl-logging-interface
+    - ros-jazzy-rcl-yaml-param-parser
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosgraph-msgs
+    - ros-jazzy-rosidl-dynamic-typesupport
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros-jazzy-rosidl-typesupport-c
+    - ros-jazzy-rosidl-typesupport-cpp
+    - ros-jazzy-statistics-msgs
+    - ros-jazzy-tracetools
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rclpy/bld_ament_cmake.bat b/recipes/ros-jazzy-rclpy/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rclpy/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rclpy/build_ament_cmake.sh b/recipes/ros-jazzy-rclpy/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rclpy/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rclpy/patch/ros-jazzy-rclpy.osx.patch b/recipes/ros-jazzy-rclpy/patch/ros-jazzy-rclpy.osx.patch
new file mode 100644
index 00000000..89b7d203
--- /dev/null
+++ b/recipes/ros-jazzy-rclpy/patch/ros-jazzy-rclpy.osx.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 80b8a1f..5b6a55b 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -72,7 +72,7 @@ function(configure_build_install_location _library_name)
+ endfunction()
+ 
+ # Split from main extension and converted to pybind11
+-pybind11_add_module(_rclpy_pybind11 SHARED
++pybind11_add_module(_rclpy_pybind11 MODULE
+   src/rclpy/_rclpy_logging.cpp
+   src/rclpy/_rclpy_pybind11.cpp
+   src/rclpy/action_client.cpp
diff --git a/recipes/ros-jazzy-rclpy/recipe.yaml b/recipes/ros-jazzy-rclpy/recipe.yaml
new file mode 100644
index 00000000..ae56515f
--- /dev/null
+++ b/recipes/ros-jazzy-rclpy/recipe.yaml
@@ -0,0 +1,135 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rclpy
+  version: 7.1.3
+source:
+  git: https://github.com/ros2-gbp/rclpy-release.git
+  tag: release/jazzy/rclpy/7.1.3-1
+  target_directory: ros-jazzy-rclpy/src/work
+  patches:
+    - patch/ros-jazzy-rclpy.osx.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+    - if: build_platform != target_platform
+      then:
+        - pybind11
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-lifecycle-msgs
+    - ros-jazzy-pybind11-vendor
+    - ros-jazzy-python-cmake-module
+    - ros-jazzy-rcl
+    - ros-jazzy-rcl-action
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-rcl-lifecycle
+    - ros-jazzy-rcl-logging-interface
+    - ros-jazzy-rcl-yaml-param-parser
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-implementation
+    - ros-jazzy-rmw-implementation-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-generator-py
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-test-msgs
+    - ros-jazzy-unique-identifier-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - pybind11
+  run:
+    - python
+    - pyyaml
+    - ros-jazzy-action-msgs
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-lifecycle-msgs
+    - ros-jazzy-rcl
+    - ros-jazzy-rcl-action
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-rcl-lifecycle
+    - ros-jazzy-rcl-logging-interface
+    - ros-jazzy-rcl-yaml-param-parser
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-implementation
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosgraph-msgs
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rpyutils
+    - ros-jazzy-unique-identifier-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+tests:
+  - python:
+      imports:
+        - rclpy
+      pip_check: false
diff --git a/recipes/ros-jazzy-rcpputils/bld_ament_cmake.bat b/recipes/ros-jazzy-rcpputils/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rcpputils/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rcpputils/build_ament_cmake.sh b/recipes/ros-jazzy-rcpputils/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rcpputils/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rcpputils/recipe.yaml b/recipes/ros-jazzy-rcpputils/recipe.yaml
new file mode 100644
index 00000000..69191cae
--- /dev/null
+++ b/recipes/ros-jazzy-rcpputils/recipe.yaml
@@ -0,0 +1,97 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rcpputils
+  version: 2.11.1
+source:
+  git: https://github.com/ros2-gbp/rcpputils-release.git
+  tag: release/jazzy/rcpputils/2.11.1-1
+  target_directory: ros-jazzy-rcpputils/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-copyright
+    - ros-jazzy-ament-cmake-cppcheck
+    - ros-jazzy-ament-cmake-cpplint
+    - ros-jazzy-ament-cmake-flake8
+    - ros-jazzy-ament-cmake-gen-version-h
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-pep257
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-cmake-uncrustify
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rcutils/bld_ament_cmake.bat b/recipes/ros-jazzy-rcutils/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rcutils/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rcutils/build_ament_cmake.sh b/recipes/ros-jazzy-rcutils/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rcutils/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rcutils/recipe.yaml b/recipes/ros-jazzy-rcutils/recipe.yaml
new file mode 100644
index 00000000..3a3a0620
--- /dev/null
+++ b/recipes/ros-jazzy-rcutils/recipe.yaml
@@ -0,0 +1,96 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rcutils
+  version: 6.7.2
+source:
+  git: https://github.com/ros2-gbp/rcutils-release.git
+  tag: release/jazzy/rcutils/6.7.2-1
+  target_directory: ros-jazzy-rcutils/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - empy
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-launch
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ament-cmake
+    - ros-jazzy-mimick-vendor
+    - ros-jazzy-osrf-testing-tools-cpp
+    - ros-jazzy-performance-test-fixture
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-resource-retriever/bld_ament_cmake.bat b/recipes/ros-jazzy-resource-retriever/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-resource-retriever/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-resource-retriever/build_ament_cmake.sh b/recipes/ros-jazzy-resource-retriever/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-resource-retriever/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-resource-retriever/recipe.yaml b/recipes/ros-jazzy-resource-retriever/recipe.yaml
new file mode 100644
index 00000000..9c6f1e2e
--- /dev/null
+++ b/recipes/ros-jazzy-resource-retriever/recipe.yaml
@@ -0,0 +1,96 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-resource-retriever
+  version: 3.4.3
+source:
+  git: https://github.com/ros2-gbp/resource_retriever-release.git
+  tag: release/jazzy/resource_retriever/3.4.3-1
+  target_directory: ros-jazzy-resource-retriever/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-libcurl-vendor
+    - ros-jazzy-python-cmake-module
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-libcurl-vendor
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rmw-connextdds-common/bld_ament_cmake.bat b/recipes/ros-jazzy-rmw-connextdds-common/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-connextdds-common/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rmw-connextdds-common/build_ament_cmake.sh b/recipes/ros-jazzy-rmw-connextdds-common/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-connextdds-common/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rmw-connextdds-common/recipe.yaml b/recipes/ros-jazzy-rmw-connextdds-common/recipe.yaml
new file mode 100644
index 00000000..a7fb121e
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-connextdds-common/recipe.yaml
@@ -0,0 +1,114 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rmw-connextdds-common
+  version: 0.22.0
+source:
+  git: https://github.com/ros2-gbp/rmw_connextdds-release.git
+  tag: release/jazzy/rmw_connextdds_common/0.22.0-2
+  target_directory: ros-jazzy-rmw-connextdds-common/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-fastcdr
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-dds-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros-jazzy-rosidl-typesupport-fastrtps-c
+    - ros-jazzy-rosidl-typesupport-fastrtps-cpp
+    - ros-jazzy-rosidl-typesupport-introspection-c
+    - ros-jazzy-rosidl-typesupport-introspection-cpp
+    - ros-jazzy-rti-connext-dds-cmake-module
+    - ros-jazzy-tracetools
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-fastcdr
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-dds-common
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros-jazzy-rosidl-typesupport-fastrtps-c
+    - ros-jazzy-rosidl-typesupport-fastrtps-cpp
+    - ros-jazzy-rosidl-typesupport-introspection-c
+    - ros-jazzy-rosidl-typesupport-introspection-cpp
+    - ros-jazzy-rti-connext-dds-cmake-module
+    - ros-jazzy-tracetools
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rmw-connextdds/bld_ament_cmake.bat b/recipes/ros-jazzy-rmw-connextdds/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-connextdds/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rmw-connextdds/build_ament_cmake.sh b/recipes/ros-jazzy-rmw-connextdds/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-connextdds/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rmw-connextdds/recipe.yaml b/recipes/ros-jazzy-rmw-connextdds/recipe.yaml
new file mode 100644
index 00000000..c24179cf
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-connextdds/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rmw-connextdds
+  version: 0.22.0
+source:
+  git: https://github.com/ros2-gbp/rmw_connextdds-release.git
+  tag: release/jazzy/rmw_connextdds/0.22.0-2
+  target_directory: ros-jazzy-rmw-connextdds/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-rmw-connextdds-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-rmw-connextdds-common
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rmw-cyclonedds-cpp/bld_ament_cmake.bat b/recipes/ros-jazzy-rmw-cyclonedds-cpp/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-cyclonedds-cpp/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rmw-cyclonedds-cpp/build_ament_cmake.sh b/recipes/ros-jazzy-rmw-cyclonedds-cpp/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-cyclonedds-cpp/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rmw-cyclonedds-cpp/recipe.yaml b/recipes/ros-jazzy-rmw-cyclonedds-cpp/recipe.yaml
new file mode 100644
index 00000000..353da8c3
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-cyclonedds-cpp/recipe.yaml
@@ -0,0 +1,109 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rmw-cyclonedds-cpp
+  version: 2.2.2
+source:
+  git: https://github.com/ros2-gbp/rmw_cyclonedds-release.git
+  tag: release/jazzy/rmw_cyclonedds_cpp/2.2.2-1
+  target_directory: ros-jazzy-rmw-cyclonedds-cpp/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+    - if: build_platform != target_platform
+      then:
+        - ros-jazzy-cyclonedds
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-cyclonedds
+    - ros-jazzy-iceoryx-binding-c
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-dds-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-typesupport-introspection-c
+    - ros-jazzy-rosidl-typesupport-introspection-cpp
+    - ros-jazzy-tracetools
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-cyclonedds
+    - ros-jazzy-iceoryx-binding-c
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-dds-common
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-typesupport-introspection-c
+    - ros-jazzy-rosidl-typesupport-introspection-cpp
+    - ros-jazzy-tracetools
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rmw-dds-common/bld_ament_cmake.bat b/recipes/ros-jazzy-rmw-dds-common/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-dds-common/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rmw-dds-common/build_ament_cmake.sh b/recipes/ros-jazzy-rmw-dds-common/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-dds-common/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rmw-dds-common/recipe.yaml b/recipes/ros-jazzy-rmw-dds-common/recipe.yaml
new file mode 100644
index 00000000..056fb9fb
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-dds-common/recipe.yaml
@@ -0,0 +1,101 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rmw-dds-common
+  version: 3.1.0
+source:
+  git: https://github.com/ros2-gbp/rmw_dds_common-release.git
+  tag: release/jazzy/rmw_dds_common/3.1.0-2
+  target_directory: ros-jazzy-rmw-dds-common/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-osrf-testing-tools-cpp
+    - ros-jazzy-performance-test-fixture
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rmw-fastrtps-cpp/bld_ament_cmake.bat b/recipes/ros-jazzy-rmw-fastrtps-cpp/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-fastrtps-cpp/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rmw-fastrtps-cpp/build_ament_cmake.sh b/recipes/ros-jazzy-rmw-fastrtps-cpp/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-fastrtps-cpp/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rmw-fastrtps-cpp/recipe.yaml b/recipes/ros-jazzy-rmw-fastrtps-cpp/recipe.yaml
new file mode 100644
index 00000000..827104df
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-fastrtps-cpp/recipe.yaml
@@ -0,0 +1,121 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rmw-fastrtps-cpp
+  version: 8.4.1
+source:
+  git: https://github.com/ros2-gbp/rmw_fastrtps-release.git
+  tag: release/jazzy/rmw_fastrtps_cpp/8.4.1-1
+  target_directory: ros-jazzy-rmw-fastrtps-cpp/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-fastcdr
+    - ros-jazzy-fastrtps
+    - ros-jazzy-fastrtps-cmake-module
+    - ros-jazzy-osrf-testing-tools-cpp
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-dds-common
+    - ros-jazzy-rmw-fastrtps-shared-cpp
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-dynamic-typesupport
+    - ros-jazzy-rosidl-dynamic-typesupport-fastrtps
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros-jazzy-rosidl-typesupport-fastrtps-c
+    - ros-jazzy-rosidl-typesupport-fastrtps-cpp
+    - ros-jazzy-test-msgs
+    - ros-jazzy-tracetools
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-fastcdr
+    - ros-jazzy-fastrtps
+    - ros-jazzy-fastrtps-cmake-module
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-dds-common
+    - ros-jazzy-rmw-fastrtps-shared-cpp
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-dynamic-typesupport
+    - ros-jazzy-rosidl-dynamic-typesupport-fastrtps
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros-jazzy-rosidl-typesupport-fastrtps-c
+    - ros-jazzy-rosidl-typesupport-fastrtps-cpp
+    - ros-jazzy-tracetools
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rmw-fastrtps-dynamic-cpp/bld_ament_cmake.bat b/recipes/ros-jazzy-rmw-fastrtps-dynamic-cpp/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-fastrtps-dynamic-cpp/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rmw-fastrtps-dynamic-cpp/build_ament_cmake.sh b/recipes/ros-jazzy-rmw-fastrtps-dynamic-cpp/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-fastrtps-dynamic-cpp/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rmw-fastrtps-dynamic-cpp/recipe.yaml b/recipes/ros-jazzy-rmw-fastrtps-dynamic-cpp/recipe.yaml
new file mode 100644
index 00000000..a9bffeb8
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-fastrtps-dynamic-cpp/recipe.yaml
@@ -0,0 +1,113 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rmw-fastrtps-dynamic-cpp
+  version: 8.4.1
+source:
+  git: https://github.com/ros2-gbp/rmw_fastrtps-release.git
+  tag: release/jazzy/rmw_fastrtps_dynamic_cpp/8.4.1-1
+  target_directory: ros-jazzy-rmw-fastrtps-dynamic-cpp/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-fastcdr
+    - ros-jazzy-fastrtps
+    - ros-jazzy-fastrtps-cmake-module
+    - ros-jazzy-osrf-testing-tools-cpp
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-dds-common
+    - ros-jazzy-rmw-fastrtps-shared-cpp
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-typesupport-introspection-c
+    - ros-jazzy-rosidl-typesupport-introspection-cpp
+    - ros-jazzy-test-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-fastcdr
+    - ros-jazzy-fastrtps
+    - ros-jazzy-fastrtps-cmake-module
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-dds-common
+    - ros-jazzy-rmw-fastrtps-shared-cpp
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-typesupport-introspection-c
+    - ros-jazzy-rosidl-typesupport-introspection-cpp
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rmw-fastrtps-shared-cpp/bld_ament_cmake.bat b/recipes/ros-jazzy-rmw-fastrtps-shared-cpp/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-fastrtps-shared-cpp/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rmw-fastrtps-shared-cpp/build_ament_cmake.sh b/recipes/ros-jazzy-rmw-fastrtps-shared-cpp/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-fastrtps-shared-cpp/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rmw-fastrtps-shared-cpp/recipe.yaml b/recipes/ros-jazzy-rmw-fastrtps-shared-cpp/recipe.yaml
new file mode 100644
index 00000000..5b1155dd
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-fastrtps-shared-cpp/recipe.yaml
@@ -0,0 +1,112 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rmw-fastrtps-shared-cpp
+  version: 8.4.1
+source:
+  git: https://github.com/ros2-gbp/rmw_fastrtps-release.git
+  tag: release/jazzy/rmw_fastrtps_shared_cpp/8.4.1-1
+  target_directory: ros-jazzy-rmw-fastrtps-shared-cpp/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-fastcdr
+    - ros-jazzy-fastrtps
+    - ros-jazzy-fastrtps-cmake-module
+    - ros-jazzy-osrf-testing-tools-cpp
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-dds-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-dynamic-typesupport
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-typesupport-introspection-c
+    - ros-jazzy-rosidl-typesupport-introspection-cpp
+    - ros-jazzy-tracetools
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-fastcdr
+    - ros-jazzy-fastrtps
+    - ros-jazzy-fastrtps-cmake-module
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-dds-common
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-dynamic-typesupport
+    - ros-jazzy-rosidl-typesupport-introspection-c
+    - ros-jazzy-rosidl-typesupport-introspection-cpp
+    - ros-jazzy-tracetools
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rmw-implementation-cmake/bld_ament_cmake.bat b/recipes/ros-jazzy-rmw-implementation-cmake/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-implementation-cmake/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rmw-implementation-cmake/build_ament_cmake.sh b/recipes/ros-jazzy-rmw-implementation-cmake/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-implementation-cmake/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rmw-implementation-cmake/recipe.yaml b/recipes/ros-jazzy-rmw-implementation-cmake/recipe.yaml
new file mode 100644
index 00000000..b604a93d
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-implementation-cmake/recipe.yaml
@@ -0,0 +1,87 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rmw-implementation-cmake
+  version: 7.3.1
+source:
+  git: https://github.com/ros2-gbp/rmw-release.git
+  tag: release/jazzy/rmw_implementation_cmake/7.3.1-1
+  target_directory: ros-jazzy-rmw-implementation-cmake/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rmw-implementation/bld_ament_cmake.bat b/recipes/ros-jazzy-rmw-implementation/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-implementation/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rmw-implementation/build_ament_cmake.sh b/recipes/ros-jazzy-rmw-implementation/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-implementation/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rmw-implementation/recipe.yaml b/recipes/ros-jazzy-rmw-implementation/recipe.yaml
new file mode 100644
index 00000000..64c26d06
--- /dev/null
+++ b/recipes/ros-jazzy-rmw-implementation/recipe.yaml
@@ -0,0 +1,105 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rmw-implementation
+  version: 2.15.4
+source:
+  git: https://github.com/ros2-gbp/rmw_implementation-release.git
+  tag: release/jazzy/rmw_implementation/2.15.4-1
+  target_directory: ros-jazzy-rmw-implementation/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-performance-test-fixture
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-connextdds
+    - ros-jazzy-rmw-cyclonedds-cpp
+    - ros-jazzy-rmw-fastrtps-cpp
+    - ros-jazzy-rmw-fastrtps-dynamic-cpp
+    - ros-jazzy-rmw-implementation-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw-connextdds
+    - ros-jazzy-rmw-cyclonedds-cpp
+    - ros-jazzy-rmw-fastrtps-cpp
+    - ros-jazzy-rmw-fastrtps-dynamic-cpp
+    - ros-jazzy-rmw-implementation-cmake
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rmw/bld_ament_cmake.bat b/recipes/ros-jazzy-rmw/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rmw/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rmw/build_ament_cmake.sh b/recipes/ros-jazzy-rmw/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rmw/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rmw/recipe.yaml b/recipes/ros-jazzy-rmw/recipe.yaml
new file mode 100644
index 00000000..cce24bae
--- /dev/null
+++ b/recipes/ros-jazzy-rmw/recipe.yaml
@@ -0,0 +1,95 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rmw
+  version: 7.3.1
+source:
+  git: https://github.com/ros2-gbp/rmw-release.git
+  tag: release/jazzy/rmw/7.3.1-1
+  target_directory: ros-jazzy-rmw/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-cmake-version
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-osrf-testing-tools-cpp
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-dynamic-typesupport
+    - ros-jazzy-rosidl-runtime-c
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-dynamic-typesupport
+    - ros-jazzy-rosidl-runtime-c
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-robot-state-publisher/bld_ament_cmake.bat b/recipes/ros-jazzy-robot-state-publisher/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-robot-state-publisher/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-robot-state-publisher/build_ament_cmake.sh b/recipes/ros-jazzy-robot-state-publisher/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-robot-state-publisher/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-robot-state-publisher/recipe.yaml b/recipes/ros-jazzy-robot-state-publisher/recipe.yaml
new file mode 100644
index 00000000..20fecb7c
--- /dev/null
+++ b/recipes/ros-jazzy-robot-state-publisher/recipe.yaml
@@ -0,0 +1,111 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-robot-state-publisher
+  version: 3.3.3
+source:
+  git: https://github.com/ros2-gbp/robot_state_publisher-release.git
+  tag: release/jazzy/robot_state_publisher/3.3.3-3
+  target_directory: ros-jazzy-robot-state-publisher/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-kdl-parser
+    - ros-jazzy-launch-ros
+    - ros-jazzy-launch-testing-ament-cmake
+    - ros-jazzy-orocos-kdl-vendor
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros-jazzy-tf2-ros
+    - ros-jazzy-urdf
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-kdl-parser
+    - ros-jazzy-orocos-kdl-vendor
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros-jazzy-tf2-ros
+    - ros-jazzy-urdf
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros-base/bld_ament_cmake.bat b/recipes/ros-jazzy-ros-base/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-ros-base/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros-base/build_ament_cmake.sh b/recipes/ros-jazzy-ros-base/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-ros-base/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-ros-base/recipe.yaml b/recipes/ros-jazzy-ros-base/recipe.yaml
new file mode 100644
index 00000000..65f92976
--- /dev/null
+++ b/recipes/ros-jazzy-ros-base/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros-base
+  version: 0.11.0
+source:
+  git: https://github.com/ros2-gbp/variants-release.git
+  tag: release/jazzy/ros_base/0.11.0-1
+  target_directory: ros-jazzy-ros-base/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-geometry2
+    - ros-jazzy-kdl-parser
+    - ros-jazzy-robot-state-publisher
+    - ros-jazzy-ros-core
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2
+    - ros-jazzy-urdf
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros-core/bld_ament_cmake.bat b/recipes/ros-jazzy-ros-core/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-ros-core/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros-core/build_ament_cmake.sh b/recipes/ros-jazzy-ros-core/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-ros-core/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-ros-core/recipe.yaml b/recipes/ros-jazzy-ros-core/recipe.yaml
new file mode 100644
index 00000000..bfdcbdd2
--- /dev/null
+++ b/recipes/ros-jazzy-ros-core/recipe.yaml
@@ -0,0 +1,116 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros-core
+  version: 0.11.0
+source:
+  git: https://github.com/ros2-gbp/variants-release.git
+  tag: release/jazzy/ros_core/0.11.0-1
+  target_directory: ros-jazzy-ros-core/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-auto
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-class-loader
+    - ros-jazzy-common-interfaces
+    - ros-jazzy-launch
+    - ros-jazzy-launch-ros
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ament-cmake
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-launch-xml
+    - ros-jazzy-launch-yaml
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rcl-lifecycle
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-action
+    - ros-jazzy-rclcpp-lifecycle
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli-common-extensions
+    - ros-jazzy-ros2launch
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-rosidl-default-runtime
+    - ros-jazzy-sros2
+    - ros-jazzy-sros2-cmake
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros-gz-bridge/bld_ament_cmake.bat b/recipes/ros-jazzy-ros-gz-bridge/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-ros-gz-bridge/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros-gz-bridge/build_ament_cmake.sh b/recipes/ros-jazzy-ros-gz-bridge/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-ros-gz-bridge/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-ros-gz-bridge/recipe.yaml b/recipes/ros-jazzy-ros-gz-bridge/recipe.yaml
new file mode 100644
index 00000000..86ee02c8
--- /dev/null
+++ b/recipes/ros-jazzy-ros-gz-bridge/recipe.yaml
@@ -0,0 +1,128 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros-gz-bridge
+  version: 1.0.7
+source:
+  git: https://github.com/ros2-gbp/ros_ign-release.git
+  tag: release/jazzy/ros_gz_bridge/1.0.7-1
+  target_directory: ros-jazzy-ros-gz-bridge/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pkg-config
+    - python
+    - ros-jazzy-actuator-msgs
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-python
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-gps-msgs
+    - ros-jazzy-gz-msgs-vendor
+    - ros-jazzy-gz-transport-vendor
+    - ros-jazzy-launch
+    - ros-jazzy-launch-ros
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ament-cmake
+    - ros-jazzy-nav-msgs
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-gz-interfaces
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosgraph-msgs
+    - ros-jazzy-rosidl-pycommon
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros-jazzy-tf2-msgs
+    - ros-jazzy-trajectory-msgs
+    - ros-jazzy-vision-msgs
+    - ros-jazzy-yaml-cpp-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-actuator-msgs
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-gps-msgs
+    - ros-jazzy-gz-msgs-vendor
+    - ros-jazzy-gz-transport-vendor
+    - ros-jazzy-launch
+    - ros-jazzy-launch-ros
+    - ros-jazzy-nav-msgs
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-gz-interfaces
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosgraph-msgs
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros-jazzy-tf2-msgs
+    - ros-jazzy-trajectory-msgs
+    - ros-jazzy-vision-msgs
+    - ros-jazzy-yaml-cpp-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros-gz-image/bld_ament_cmake.bat b/recipes/ros-jazzy-ros-gz-image/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-ros-gz-image/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros-gz-image/build_ament_cmake.sh b/recipes/ros-jazzy-ros-gz-image/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-ros-gz-image/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-ros-gz-image/patch/ros-jazzy-ros-gz-image.patch b/recipes/ros-jazzy-ros-gz-image/patch/ros-jazzy-ros-gz-image.patch
new file mode 100644
index 00000000..27945782
--- /dev/null
+++ b/recipes/ros-jazzy-ros-gz-image/patch/ros-jazzy-ros-gz-image.patch
@@ -0,0 +1,14 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index e6e8de26..8e9ea2d3 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -10,6 +10,9 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+   add_compile_options(-Wall -Wextra)
+ endif()
+ 
++find_package(gz-cmake3 REQUIRED 3.5.2)
++gz_find_package(TINYXML2 REQUIRED PRIVATE PRETTY tinyxml2)
++
+ find_package(ament_cmake REQUIRED)
+ find_package(image_transport REQUIRED)
+ find_package(ros_gz_bridge REQUIRED)
diff --git a/recipes/ros-jazzy-ros-gz-image/recipe.yaml b/recipes/ros-jazzy-ros-gz-image/recipe.yaml
new file mode 100644
index 00000000..b0d94668
--- /dev/null
+++ b/recipes/ros-jazzy-ros-gz-image/recipe.yaml
@@ -0,0 +1,101 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros-gz-image
+  version: 1.0.7
+source:
+  git: https://github.com/ros2-gbp/ros_ign-release.git
+  tag: release/jazzy/ros_gz_image/1.0.7-1
+  target_directory: ros-jazzy-ros-gz-image/src/work
+  patches:
+    - patch/ros-jazzy-ros-gz-image.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pkg-config
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-gz-msgs-vendor
+    - ros-jazzy-gz-transport-vendor
+    - ros-jazzy-image-transport
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-gz-bridge
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-gz-msgs-vendor
+    - ros-jazzy-gz-transport-vendor
+    - ros-jazzy-image-transport
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-gz-bridge
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros-gz-interfaces/bld_ament_cmake.bat b/recipes/ros-jazzy-ros-gz-interfaces/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-ros-gz-interfaces/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros-gz-interfaces/build_ament_cmake.sh b/recipes/ros-jazzy-ros-gz-interfaces/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-ros-gz-interfaces/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-ros-gz-interfaces/recipe.yaml b/recipes/ros-jazzy-ros-gz-interfaces/recipe.yaml
new file mode 100644
index 00000000..933dd133
--- /dev/null
+++ b/recipes/ros-jazzy-ros-gz-interfaces/recipe.yaml
@@ -0,0 +1,95 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros-gz-interfaces
+  version: 1.0.7
+source:
+  git: https://github.com/ros2-gbp/ros_ign-release.git
+  tag: release/jazzy/ros_gz_interfaces/1.0.7-1
+  target_directory: ros-jazzy-ros-gz-interfaces/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros-gz-sim-demos/bld_ament_cmake.bat b/recipes/ros-jazzy-ros-gz-sim-demos/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-ros-gz-sim-demos/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros-gz-sim-demos/build_ament_cmake.sh b/recipes/ros-jazzy-ros-gz-sim-demos/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-ros-gz-sim-demos/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-ros-gz-sim-demos/recipe.yaml b/recipes/ros-jazzy-ros-gz-sim-demos/recipe.yaml
new file mode 100644
index 00000000..100a07fa
--- /dev/null
+++ b/recipes/ros-jazzy-ros-gz-sim-demos/recipe.yaml
@@ -0,0 +1,99 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros-gz-sim-demos
+  version: 1.0.7
+source:
+  git: https://github.com/ros2-gbp/ros_ign-release.git
+  tag: release/jazzy/ros_gz_sim_demos/1.0.7-1
+  target_directory: ros-jazzy-ros-gz-sim-demos/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-gz-sim-vendor
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-gz-sim-vendor
+    - ros-jazzy-image-transport-plugins
+    - ros-jazzy-robot-state-publisher
+    - ros-jazzy-ros-gz-bridge
+    - ros-jazzy-ros-gz-image
+    - ros-jazzy-ros-gz-sim
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rqt-image-view
+    - ros-jazzy-rqt-plot
+    - ros-jazzy-rqt-topic
+    - ros-jazzy-rviz2
+    - ros-jazzy-sdformat-urdf
+    - ros-jazzy-xacro
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros-gz-sim/bld_ament_cmake.bat b/recipes/ros-jazzy-ros-gz-sim/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-ros-gz-sim/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros-gz-sim/build_ament_cmake.sh b/recipes/ros-jazzy-ros-gz-sim/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-ros-gz-sim/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-ros-gz-sim/recipe.yaml b/recipes/ros-jazzy-ros-gz-sim/recipe.yaml
new file mode 100644
index 00000000..1b84dcb9
--- /dev/null
+++ b/recipes/ros-jazzy-ros-gz-sim/recipe.yaml
@@ -0,0 +1,123 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros-gz-sim
+  version: 1.0.7
+source:
+  git: https://github.com/ros2-gbp/ros_ign-release.git
+  tag: release/jazzy/ros_gz_sim/1.0.7-1
+  target_directory: ros-jazzy-ros-gz-sim/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - gflags
+    - numpy
+    - pip
+    - pkg-config
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-python
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-msgs-vendor
+    - ros-jazzy-gz-sim-vendor
+    - ros-jazzy-gz-transport-vendor
+    - ros-jazzy-launch
+    - ros-jazzy-launch-ros
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ament-cmake
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - gflags
+    - python
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-msgs-vendor
+    - ros-jazzy-gz-sim-vendor
+    - ros-jazzy-gz-transport-vendor
+    - ros-jazzy-launch
+    - ros-jazzy-launch-ros
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-ros-gz/bld_ament_cmake.bat b/recipes/ros-jazzy-ros-gz/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-ros-gz/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros-gz/build_ament_cmake.sh b/recipes/ros-jazzy-ros-gz/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-ros-gz/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-ros-gz/recipe.yaml b/recipes/ros-jazzy-ros-gz/recipe.yaml
new file mode 100644
index 00000000..3508f343
--- /dev/null
+++ b/recipes/ros-jazzy-ros-gz/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros-gz
+  version: 1.0.7
+source:
+  git: https://github.com/ros2-gbp/ros_ign-release.git
+  tag: release/jazzy/ros_gz/1.0.7-1
+  target_directory: ros-jazzy-ros-gz/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-gz-bridge
+    - ros-jazzy-ros-gz-image
+    - ros-jazzy-ros-gz-sim
+    - ros-jazzy-ros-gz-sim-demos
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros-testing/bld_ament_cmake.bat b/recipes/ros-jazzy-ros-testing/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-ros-testing/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros-testing/build_ament_cmake.sh b/recipes/ros-jazzy-ros-testing/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-ros-testing/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-ros-testing/recipe.yaml b/recipes/ros-jazzy-ros-testing/recipe.yaml
new file mode 100644
index 00000000..0c9088a4
--- /dev/null
+++ b/recipes/ros-jazzy-ros-testing/recipe.yaml
@@ -0,0 +1,94 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros-testing
+  version: 0.6.0
+source:
+  git: https://github.com/ros2-gbp/ros_testing-release.git
+  tag: release/jazzy/ros_testing/0.6.0-3
+  target_directory: ros-jazzy-ros-testing/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-export-dependencies
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ament-cmake
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2test
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ament-cmake
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2test
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros2action/bld_ament_python.bat b/recipes/ros-jazzy-ros2action/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-ros2action/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros2action/build_ament_python.sh b/recipes/ros-jazzy-ros2action/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-ros2action/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-ros2action/recipe.yaml b/recipes/ros-jazzy-ros2action/recipe.yaml
new file mode 100644
index 00000000..82d5b1f4
--- /dev/null
+++ b/recipes/ros-jazzy-ros2action/recipe.yaml
@@ -0,0 +1,99 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros2action
+  version: 0.32.2
+source:
+  git: https://github.com/ros2-gbp/ros2cli-release.git
+  tag: release/jazzy/ros2action/0.32.2-1
+  target_directory: ros-jazzy-ros2action/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - pytest-timeout
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ament-xmllint
+    - ros-jazzy-launch
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-test-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-action-msgs
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli
+    - ros-jazzy-rosidl-runtime-py
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros2bag/bld_ament_python.bat b/recipes/ros-jazzy-ros2bag/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-ros2bag/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros2bag/build_ament_python.sh b/recipes/ros-jazzy-ros2bag/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-ros2bag/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-ros2bag/recipe.yaml b/recipes/ros-jazzy-ros2bag/recipe.yaml
new file mode 100644
index 00000000..658d70ad
--- /dev/null
+++ b/recipes/ros-jazzy-ros2bag/recipe.yaml
@@ -0,0 +1,97 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros2bag
+  version: 0.26.6
+source:
+  git: https://github.com/ros2-gbp/rosbag2-release.git
+  tag: release/jazzy/ros2bag/0.26.6-1
+  target_directory: ros-jazzy-ros2bag/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2-storage-default-plugins
+    - ros-jazzy-rosbag2-test-common
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - pyyaml
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli
+    - ros-jazzy-rosbag2-py
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros2cli-common-extensions/bld_ament_cmake.bat b/recipes/ros-jazzy-ros2cli-common-extensions/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-ros2cli-common-extensions/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros2cli-common-extensions/build_ament_cmake.sh b/recipes/ros-jazzy-ros2cli-common-extensions/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-ros2cli-common-extensions/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-ros2cli-common-extensions/recipe.yaml b/recipes/ros-jazzy-ros2cli-common-extensions/recipe.yaml
new file mode 100644
index 00000000..62bb6ad4
--- /dev/null
+++ b/recipes/ros-jazzy-ros2cli-common-extensions/recipe.yaml
@@ -0,0 +1,103 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros2cli-common-extensions
+  version: 0.3.0
+source:
+  git: https://github.com/ros2-gbp/ros2cli_common_extensions-release.git
+  tag: release/jazzy/ros2cli_common_extensions/0.3.0-3
+  target_directory: ros-jazzy-ros2cli-common-extensions/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-launch-xml
+    - ros-jazzy-launch-yaml
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2action
+    - ros-jazzy-ros2cli
+    - ros-jazzy-ros2component
+    - ros-jazzy-ros2doctor
+    - ros-jazzy-ros2interface
+    - ros-jazzy-ros2launch
+    - ros-jazzy-ros2lifecycle
+    - ros-jazzy-ros2multicast
+    - ros-jazzy-ros2node
+    - ros-jazzy-ros2param
+    - ros-jazzy-ros2pkg
+    - ros-jazzy-ros2run
+    - ros-jazzy-ros2service
+    - ros-jazzy-ros2topic
+    - ros-jazzy-sros2
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros2cli-test-interfaces/bld_ament_cmake.bat b/recipes/ros-jazzy-ros2cli-test-interfaces/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-ros2cli-test-interfaces/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros2cli-test-interfaces/build_ament_cmake.sh b/recipes/ros-jazzy-ros2cli-test-interfaces/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-ros2cli-test-interfaces/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-ros2cli-test-interfaces/recipe.yaml b/recipes/ros-jazzy-ros2cli-test-interfaces/recipe.yaml
new file mode 100644
index 00000000..aac0ac58
--- /dev/null
+++ b/recipes/ros-jazzy-ros2cli-test-interfaces/recipe.yaml
@@ -0,0 +1,87 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros2cli-test-interfaces
+  version: 0.32.2
+source:
+  git: https://github.com/ros2-gbp/ros2cli-release.git
+  tag: release/jazzy/ros2cli_test_interfaces/0.32.2-1
+  target_directory: ros-jazzy-ros2cli-test-interfaces/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros2cli/bld_ament_python.bat b/recipes/ros-jazzy-ros2cli/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-ros2cli/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros2cli/build_ament_python.sh b/recipes/ros-jazzy-ros2cli/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-ros2cli/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-ros2cli/recipe.yaml b/recipes/ros-jazzy-ros2cli/recipe.yaml
new file mode 100644
index 00000000..0a1604ff
--- /dev/null
+++ b/recipes/ros-jazzy-ros2cli/recipe.yaml
@@ -0,0 +1,96 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros2cli
+  version: 0.32.2
+source:
+  git: https://github.com/ros2-gbp/ros2cli-release.git
+  tag: release/jazzy/ros2cli/0.32.2-1
+  target_directory: ros-jazzy-ros2cli/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - pytest-timeout
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ament-xmllint
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-test-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - argcomplete
+    - importlib-metadata
+    - packaging
+    - psutil
+    - python
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros2component/bld_ament_python.bat b/recipes/ros-jazzy-ros2component/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-ros2component/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros2component/build_ament_python.sh b/recipes/ros-jazzy-ros2component/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-ros2component/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-ros2component/recipe.yaml b/recipes/ros-jazzy-ros2component/recipe.yaml
new file mode 100644
index 00000000..80c0f3c7
--- /dev/null
+++ b/recipes/ros-jazzy-ros2component/recipe.yaml
@@ -0,0 +1,99 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros2component
+  version: 0.32.2
+source:
+  git: https://github.com/ros2-gbp/ros2cli-release.git
+  tag: release/jazzy/ros2component/0.32.2-1
+  target_directory: ros-jazzy-ros2component/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - pytest-timeout
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ament-xmllint
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-composition-interfaces
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli
+    - ros-jazzy-ros2node
+    - ros-jazzy-ros2param
+    - ros-jazzy-ros2pkg
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros2doctor/bld_ament_python.bat b/recipes/ros-jazzy-ros2doctor/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-ros2doctor/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros2doctor/build_ament_python.sh b/recipes/ros-jazzy-ros2doctor/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-ros2doctor/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-ros2doctor/recipe.yaml b/recipes/ros-jazzy-ros2doctor/recipe.yaml
new file mode 100644
index 00000000..5855cd76
--- /dev/null
+++ b/recipes/ros-jazzy-ros2doctor/recipe.yaml
@@ -0,0 +1,104 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros2doctor
+  version: 0.32.2
+source:
+  git: https://github.com/ros2-gbp/ros2cli-release.git
+  tag: release/jazzy/ros2doctor/0.32.2-1
+  target_directory: ros-jazzy-ros2doctor/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - pytest-timeout
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ament-xmllint
+    - ros-jazzy-launch
+    - ros-jazzy-launch-ros
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - catkin_pkg
+    - importlib-metadata
+    - psutil
+    - python
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - rosdistro
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros2interface/bld_ament_python.bat b/recipes/ros-jazzy-ros2interface/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-ros2interface/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros2interface/build_ament_python.sh b/recipes/ros-jazzy-ros2interface/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-ros2interface/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-ros2interface/recipe.yaml b/recipes/ros-jazzy-ros2interface/recipe.yaml
new file mode 100644
index 00000000..aeb5ab59
--- /dev/null
+++ b/recipes/ros-jazzy-ros2interface/recipe.yaml
@@ -0,0 +1,99 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros2interface
+  version: 0.32.2
+source:
+  git: https://github.com/ros2-gbp/ros2cli-release.git
+  tag: release/jazzy/ros2interface/0.32.2-1
+  target_directory: ros-jazzy-ros2interface/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - pytest-timeout
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ament-xmllint
+    - ros-jazzy-launch
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli-test-interfaces
+    - ros-jazzy-test-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli
+    - ros-jazzy-rosidl-adapter
+    - ros-jazzy-rosidl-runtime-py
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros2launch/bld_ament_python.bat b/recipes/ros-jazzy-ros2launch/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-ros2launch/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros2launch/build_ament_python.sh b/recipes/ros-jazzy-ros2launch/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-ros2launch/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-ros2launch/recipe.yaml b/recipes/ros-jazzy-ros2launch/recipe.yaml
new file mode 100644
index 00000000..2ff60d0a
--- /dev/null
+++ b/recipes/ros-jazzy-ros2launch/recipe.yaml
@@ -0,0 +1,102 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros2launch
+  version: 0.26.6
+source:
+  git: https://github.com/ros2-gbp/launch_ros-release.git
+  tag: release/jazzy/ros2launch/0.26.6-1
+  target_directory: ros-jazzy-ros2launch/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-launch
+    - ros-jazzy-launch-ros
+    - ros-jazzy-launch-xml
+    - ros-jazzy-launch-yaml
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli
+    - ros-jazzy-ros2pkg
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-launch
+    - ros-jazzy-launch-ros
+    - ros-jazzy-launch-xml
+    - ros-jazzy-launch-yaml
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli
+    - ros-jazzy-ros2pkg
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros2lifecycle-test-fixtures/bld_ament_cmake.bat b/recipes/ros-jazzy-ros2lifecycle-test-fixtures/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-ros2lifecycle-test-fixtures/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros2lifecycle-test-fixtures/build_ament_cmake.sh b/recipes/ros-jazzy-ros2lifecycle-test-fixtures/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-ros2lifecycle-test-fixtures/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-ros2lifecycle-test-fixtures/recipe.yaml b/recipes/ros-jazzy-ros2lifecycle-test-fixtures/recipe.yaml
new file mode 100644
index 00000000..c70b16f5
--- /dev/null
+++ b/recipes/ros-jazzy-ros2lifecycle-test-fixtures/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros2lifecycle-test-fixtures
+  version: 0.32.2
+source:
+  git: https://github.com/ros2-gbp/ros2cli-release.git
+  tag: release/jazzy/ros2lifecycle_test_fixtures/0.32.2-1
+  target_directory: ros-jazzy-ros2lifecycle-test-fixtures/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-lifecycle
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-lifecycle
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros2lifecycle/bld_ament_python.bat b/recipes/ros-jazzy-ros2lifecycle/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-ros2lifecycle/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros2lifecycle/build_ament_python.sh b/recipes/ros-jazzy-ros2lifecycle/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-ros2lifecycle/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-ros2lifecycle/recipe.yaml b/recipes/ros-jazzy-ros2lifecycle/recipe.yaml
new file mode 100644
index 00000000..d4da643e
--- /dev/null
+++ b/recipes/ros-jazzy-ros2lifecycle/recipe.yaml
@@ -0,0 +1,100 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros2lifecycle
+  version: 0.32.2
+source:
+  git: https://github.com/ros2-gbp/ros2cli-release.git
+  tag: release/jazzy/ros2lifecycle/0.32.2-1
+  target_directory: ros-jazzy-ros2lifecycle/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - pytest-timeout
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ament-xmllint
+    - ros-jazzy-launch
+    - ros-jazzy-launch-ros
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2lifecycle-test-fixtures
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-lifecycle-msgs
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli
+    - ros-jazzy-ros2node
+    - ros-jazzy-ros2service
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros2multicast/bld_ament_python.bat b/recipes/ros-jazzy-ros2multicast/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-ros2multicast/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros2multicast/build_ament_python.sh b/recipes/ros-jazzy-ros2multicast/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-ros2multicast/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-ros2multicast/recipe.yaml b/recipes/ros-jazzy-ros2multicast/recipe.yaml
new file mode 100644
index 00000000..76f73afa
--- /dev/null
+++ b/recipes/ros-jazzy-ros2multicast/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros2multicast
+  version: 0.32.2
+source:
+  git: https://github.com/ros2-gbp/ros2cli-release.git
+  tag: release/jazzy/ros2multicast/0.32.2-1
+  target_directory: ros-jazzy-ros2multicast/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - pytest-timeout
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ament-xmllint
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros2node/bld_ament_python.bat b/recipes/ros-jazzy-ros2node/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-ros2node/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros2node/build_ament_python.sh b/recipes/ros-jazzy-ros2node/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-ros2node/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-ros2node/recipe.yaml b/recipes/ros-jazzy-ros2node/recipe.yaml
new file mode 100644
index 00000000..f64627c8
--- /dev/null
+++ b/recipes/ros-jazzy-ros2node/recipe.yaml
@@ -0,0 +1,98 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros2node
+  version: 0.32.2
+source:
+  git: https://github.com/ros2-gbp/ros2cli-release.git
+  tag: release/jazzy/ros2node/0.32.2-1
+  target_directory: ros-jazzy-ros2node/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - pytest-timeout
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ament-xmllint
+    - ros-jazzy-launch
+    - ros-jazzy-launch-ros
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-test-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros2param/bld_ament_python.bat b/recipes/ros-jazzy-ros2param/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-ros2param/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros2param/build_ament_python.sh b/recipes/ros-jazzy-ros2param/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-ros2param/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-ros2param/recipe.yaml b/recipes/ros-jazzy-ros2param/recipe.yaml
new file mode 100644
index 00000000..87ac5747
--- /dev/null
+++ b/recipes/ros-jazzy-ros2param/recipe.yaml
@@ -0,0 +1,99 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros2param
+  version: 0.32.2
+source:
+  git: https://github.com/ros2-gbp/ros2cli-release.git
+  tag: release/jazzy/ros2param/0.32.2-1
+  target_directory: ros-jazzy-ros2param/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - pytest-timeout
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ament-xmllint
+    - ros-jazzy-launch
+    - ros-jazzy-launch-ros
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli
+    - ros-jazzy-ros2node
+    - ros-jazzy-ros2service
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros2pkg/bld_ament_python.bat b/recipes/ros-jazzy-ros2pkg/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-ros2pkg/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros2pkg/build_ament_python.sh b/recipes/ros-jazzy-ros2pkg/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-ros2pkg/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-ros2pkg/recipe.yaml b/recipes/ros-jazzy-ros2pkg/recipe.yaml
new file mode 100644
index 00000000..c35c441c
--- /dev/null
+++ b/recipes/ros-jazzy-ros2pkg/recipe.yaml
@@ -0,0 +1,98 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros2pkg
+  version: 0.32.2
+source:
+  git: https://github.com/ros2-gbp/ros2cli-release.git
+  tag: release/jazzy/ros2pkg/0.32.2-1
+  target_directory: ros-jazzy-ros2pkg/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - pytest-timeout
+    - python
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ament-xmllint
+    - ros-jazzy-launch
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - catkin_pkg
+    - empy
+    - importlib_resources
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros2run/bld_ament_python.bat b/recipes/ros-jazzy-ros2run/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-ros2run/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros2run/build_ament_python.sh b/recipes/ros-jazzy-ros2run/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-ros2run/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-ros2run/recipe.yaml b/recipes/ros-jazzy-ros2run/recipe.yaml
new file mode 100644
index 00000000..b5b8dd05
--- /dev/null
+++ b/recipes/ros-jazzy-ros2run/recipe.yaml
@@ -0,0 +1,92 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros2run
+  version: 0.32.2
+source:
+  git: https://github.com/ros2-gbp/ros2cli-release.git
+  tag: release/jazzy/ros2run/0.32.2-1
+  target_directory: ros-jazzy-ros2run/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - pytest-timeout
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ament-xmllint
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli
+    - ros-jazzy-ros2pkg
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros2service/bld_ament_python.bat b/recipes/ros-jazzy-ros2service/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-ros2service/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros2service/build_ament_python.sh b/recipes/ros-jazzy-ros2service/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-ros2service/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-ros2service/recipe.yaml b/recipes/ros-jazzy-ros2service/recipe.yaml
new file mode 100644
index 00000000..134b3e88
--- /dev/null
+++ b/recipes/ros-jazzy-ros2service/recipe.yaml
@@ -0,0 +1,99 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros2service
+  version: 0.32.2
+source:
+  git: https://github.com/ros2-gbp/ros2cli-release.git
+  tag: release/jazzy/ros2service/0.32.2-1
+  target_directory: ros-jazzy-ros2service/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - pytest-timeout
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ament-xmllint
+    - ros-jazzy-launch
+    - ros-jazzy-launch-ros
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-test-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - pyyaml
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli
+    - ros-jazzy-rosidl-runtime-py
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros2test/bld_ament_python.bat b/recipes/ros-jazzy-ros2test/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-ros2test/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros2test/build_ament_python.sh b/recipes/ros-jazzy-ros2test/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-ros2test/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-ros2test/recipe.yaml b/recipes/ros-jazzy-ros2test/recipe.yaml
new file mode 100644
index 00000000..95670f54
--- /dev/null
+++ b/recipes/ros-jazzy-ros2test/recipe.yaml
@@ -0,0 +1,99 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros2test
+  version: 0.6.0
+source:
+  git: https://github.com/ros2-gbp/ros_testing-release.git
+  tag: release/jazzy/ros2test/0.6.0-3
+  target_directory: ros-jazzy-ros2test/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-launch
+    - ros-jazzy-launch-ros
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-domain-coordinator
+    - ros-jazzy-launch
+    - ros-jazzy-launch-ros
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-ros2topic/bld_ament_python.bat b/recipes/ros-jazzy-ros2topic/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-ros2topic/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-ros2topic/build_ament_python.sh b/recipes/ros-jazzy-ros2topic/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-ros2topic/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-ros2topic/recipe.yaml b/recipes/ros-jazzy-ros2topic/recipe.yaml
new file mode 100644
index 00000000..a2b799e7
--- /dev/null
+++ b/recipes/ros-jazzy-ros2topic/recipe.yaml
@@ -0,0 +1,103 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-ros2topic
+  version: 0.32.2
+source:
+  git: https://github.com/ros2-gbp/ros2cli-release.git
+  tag: release/jazzy/ros2topic/0.32.2-1
+  target_directory: ros-jazzy-ros2topic/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - pytest-timeout
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ament-xmllint
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-launch
+    - ros-jazzy-launch-ros
+    - ros-jazzy-launch-testing
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosgraph-msgs
+    - ros-jazzy-std-msgs
+    - ros-jazzy-test-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - numpy
+    - python
+    - pyyaml
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli
+    - ros-jazzy-rosidl-runtime-py
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosbag2-compression-zstd/bld_ament_cmake.bat b/recipes/ros-jazzy-rosbag2-compression-zstd/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-compression-zstd/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosbag2-compression-zstd/build_ament_cmake.sh b/recipes/ros-jazzy-rosbag2-compression-zstd/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-compression-zstd/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosbag2-compression-zstd/recipe.yaml b/recipes/ros-jazzy-rosbag2-compression-zstd/recipe.yaml
new file mode 100644
index 00000000..9e86a6d3
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-compression-zstd/recipe.yaml
@@ -0,0 +1,97 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosbag2-compression-zstd
+  version: 0.26.6
+source:
+  git: https://github.com/ros2-gbp/rosbag2-release.git
+  tag: release/jazzy/rosbag2_compression_zstd/0.26.6-1
+  target_directory: ros-jazzy-rosbag2-compression-zstd/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2-compression
+    - ros-jazzy-rosbag2-test-common
+    - ros-jazzy-zstd-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2-compression
+    - ros-jazzy-zstd-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosbag2-compression/bld_ament_cmake.bat b/recipes/ros-jazzy-rosbag2-compression/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-compression/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosbag2-compression/build_ament_cmake.sh b/recipes/ros-jazzy-rosbag2-compression/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-compression/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosbag2-compression/recipe.yaml b/recipes/ros-jazzy-rosbag2-compression/recipe.yaml
new file mode 100644
index 00000000..7651f54b
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-compression/recipe.yaml
@@ -0,0 +1,98 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosbag2-compression
+  version: 0.26.6
+source:
+  git: https://github.com/ros2-gbp/rosbag2-release.git
+  tag: release/jazzy/rosbag2_compression/0.26.6-1
+  target_directory: ros-jazzy-rosbag2-compression/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2-cpp
+    - ros-jazzy-rosbag2-storage
+    - ros-jazzy-rosbag2-test-common
+    - ros-jazzy-test-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2-cpp
+    - ros-jazzy-rosbag2-storage
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosbag2-cpp/bld_ament_cmake.bat b/recipes/ros-jazzy-rosbag2-cpp/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-cpp/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosbag2-cpp/build_ament_cmake.sh b/recipes/ros-jazzy-rosbag2-cpp/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-cpp/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosbag2-cpp/recipe.yaml b/recipes/ros-jazzy-rosbag2-cpp/recipe.yaml
new file mode 100644
index 00000000..081801ff
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-cpp/recipe.yaml
@@ -0,0 +1,117 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosbag2-cpp
+  version: 0.26.6
+source:
+  git: https://github.com/ros2-gbp/rosbag2-release.git
+  tag: release/jazzy/rosbag2_cpp/0.26.6-1
+  target_directory: ros-jazzy-rosbag2-cpp/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-implementation
+    - ros-jazzy-rmw-implementation-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2-storage
+    - ros-jazzy-rosbag2-storage-default-plugins
+    - ros-jazzy-rosbag2-test-common
+    - ros-jazzy-rosbag2-test-msgdefs
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros-jazzy-rosidl-typesupport-cpp
+    - ros-jazzy-rosidl-typesupport-introspection-cpp
+    - ros-jazzy-std-msgs
+    - ros-jazzy-test-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-implementation
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2-storage
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros-jazzy-rosidl-typesupport-cpp
+    - ros-jazzy-rosidl-typesupport-introspection-cpp
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosbag2-interfaces/bld_ament_cmake.bat b/recipes/ros-jazzy-rosbag2-interfaces/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-interfaces/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosbag2-interfaces/build_ament_cmake.sh b/recipes/ros-jazzy-rosbag2-interfaces/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-interfaces/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosbag2-interfaces/recipe.yaml b/recipes/ros-jazzy-rosbag2-interfaces/recipe.yaml
new file mode 100644
index 00000000..488ba1a2
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-interfaces/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosbag2-interfaces
+  version: 0.26.6
+source:
+  git: https://github.com/ros2-gbp/rosbag2-release.git
+  tag: release/jazzy/rosbag2_interfaces/0.26.6-1
+  target_directory: ros-jazzy-rosbag2-interfaces/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosbag2-py/bld_ament_cmake.bat b/recipes/ros-jazzy-rosbag2-py/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-py/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosbag2-py/build_ament_cmake.sh b/recipes/ros-jazzy-rosbag2-py/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-py/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosbag2-py/patch/ros-jazzy-rosbag2-py.osx.patch b/recipes/ros-jazzy-rosbag2-py/patch/ros-jazzy-rosbag2-py.osx.patch
new file mode 100644
index 00000000..d7564996
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-py/patch/ros-jazzy-rosbag2-py.osx.patch
@@ -0,0 +1,74 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index feb07925f..6000ec43e 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -41,21 +41,21 @@ find_package(pybind11 REQUIRED)
+ 
+ ament_python_install_package(${PROJECT_NAME})
+ 
+-pybind11_add_module(_compression_options SHARED
++pybind11_add_module(_compression_options MODULE
+   src/rosbag2_py/_compression_options.cpp
+ )
+ target_link_libraries(_compression_options PUBLIC
+   rosbag2_compression::rosbag2_compression
+ )
+ 
+-pybind11_add_module(_message_definitions SHARED
++pybind11_add_module(_message_definitions MODULE
+   src/rosbag2_py/_message_definitions.cpp
+ )
+ target_link_libraries(_message_definitions PUBLIC
+   rosbag2_cpp::rosbag2_cpp
+ )
+ 
+-pybind11_add_module(_reader SHARED
++pybind11_add_module(_reader MODULE
+   src/rosbag2_py/_reader.cpp
+ )
+ target_link_libraries(_reader PUBLIC
+@@ -64,7 +64,7 @@ target_link_libraries(_reader PUBLIC
+   rosbag2_storage::rosbag2_storage
+ )
+ 
+-pybind11_add_module(_storage SHARED
++pybind11_add_module(_storage MODULE
+   src/rosbag2_py/_storage.cpp
+   src/rosbag2_py/format_bag_metadata.cpp
+ )
+@@ -73,7 +73,7 @@ target_link_libraries(_storage PUBLIC
+   rosbag2_storage::rosbag2_storage
+ )
+ 
+-pybind11_add_module(_writer SHARED
++pybind11_add_module(_writer MODULE
+   src/rosbag2_py/_writer.cpp
+ )
+ target_link_libraries(_writer PUBLIC
+@@ -82,7 +82,7 @@ target_link_libraries(_writer PUBLIC
+   rosbag2_storage::rosbag2_storage
+ )
+ 
+-pybind11_add_module(_info SHARED
++pybind11_add_module(_info MODULE
+   src/rosbag2_py/_info.cpp
+   src/rosbag2_py/format_bag_metadata.cpp
+   src/rosbag2_py/format_service_info.cpp
+@@ -92,7 +92,7 @@ target_link_libraries(_info PUBLIC
+   rosbag2_storage::rosbag2_storage
+ )
+ 
+-pybind11_add_module(_transport SHARED
++pybind11_add_module(_transport MODULE
+   src/rosbag2_py/_transport.cpp
+ )
+ target_link_libraries(_transport PUBLIC
+@@ -102,7 +102,7 @@ target_link_libraries(_transport PUBLIC
+   rosbag2_transport::rosbag2_transport
+ )
+ 
+-pybind11_add_module(_reindexer SHARED
++pybind11_add_module(_reindexer MODULE
+   src/rosbag2_py/_reindexer.cpp
+ )
+ target_link_libraries(_reindexer PUBLIC
diff --git a/recipes/ros-jazzy-rosbag2-py/recipe.yaml b/recipes/ros-jazzy-rosbag2-py/recipe.yaml
new file mode 100644
index 00000000..50059cb4
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-py/recipe.yaml
@@ -0,0 +1,114 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosbag2-py
+  version: 0.26.6
+source:
+  git: https://github.com/ros2-gbp/rosbag2-release.git
+  tag: release/jazzy/rosbag2_py/0.26.6-1
+  target_directory: ros-jazzy-rosbag2-py/src/work
+  patches:
+    - patch/ros-jazzy-rosbag2-py.osx.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+    - if: build_platform != target_platform
+      then:
+        - pybind11
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-cmake-python
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-pybind11-vendor
+    - ros-jazzy-python-cmake-module
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2-compression
+    - ros-jazzy-rosbag2-compression-zstd
+    - ros-jazzy-rosbag2-cpp
+    - ros-jazzy-rosbag2-storage
+    - ros-jazzy-rosbag2-storage-default-plugins
+    - ros-jazzy-rosbag2-test-common
+    - ros-jazzy-rosbag2-test-msgdefs
+    - ros-jazzy-rosbag2-transport
+    - ros-jazzy-rosidl-runtime-py
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - pybind11
+  run:
+    - python
+    - ros-jazzy-pybind11-vendor
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2-compression
+    - ros-jazzy-rosbag2-cpp
+    - ros-jazzy-rosbag2-storage
+    - ros-jazzy-rosbag2-transport
+    - ros-jazzy-rpyutils
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosbag2-storage-default-plugins/bld_ament_cmake.bat b/recipes/ros-jazzy-rosbag2-storage-default-plugins/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-storage-default-plugins/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosbag2-storage-default-plugins/build_ament_cmake.sh b/recipes/ros-jazzy-rosbag2-storage-default-plugins/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-storage-default-plugins/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosbag2-storage-default-plugins/recipe.yaml b/recipes/ros-jazzy-rosbag2-storage-default-plugins/recipe.yaml
new file mode 100644
index 00000000..aa48c5ca
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-storage-default-plugins/recipe.yaml
@@ -0,0 +1,86 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosbag2-storage-default-plugins
+  version: 0.26.6
+source:
+  git: https://github.com/ros2-gbp/rosbag2-release.git
+  tag: release/jazzy/rosbag2_storage_default_plugins/0.26.6-1
+  target_directory: ros-jazzy-rosbag2-storage-default-plugins/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2-storage-mcap
+    - ros-jazzy-rosbag2-storage-sqlite3
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosbag2-storage-mcap/bld_ament_cmake.bat b/recipes/ros-jazzy-rosbag2-storage-mcap/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-storage-mcap/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosbag2-storage-mcap/build_ament_cmake.sh b/recipes/ros-jazzy-rosbag2-storage-mcap/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-storage-mcap/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosbag2-storage-mcap/recipe.yaml b/recipes/ros-jazzy-rosbag2-storage-mcap/recipe.yaml
new file mode 100644
index 00000000..e5eac0c3
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-storage-mcap/recipe.yaml
@@ -0,0 +1,103 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosbag2-storage-mcap
+  version: 0.26.6
+source:
+  git: https://github.com/ros2-gbp/rosbag2-release.git
+  tag: release/jazzy/rosbag2_storage_mcap/0.26.6-1
+  target_directory: ros-jazzy-rosbag2-storage-mcap/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-clang-format
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-cmake-python
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-mcap-vendor
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2-storage
+    - ros-jazzy-rosbag2-test-common
+    - ros-jazzy-std-msgs
+    - ros-jazzy-yaml-cpp-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-mcap-vendor
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2-storage
+    - ros-jazzy-yaml-cpp-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosbag2-storage-sqlite3/bld_ament_cmake.bat b/recipes/ros-jazzy-rosbag2-storage-sqlite3/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-storage-sqlite3/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosbag2-storage-sqlite3/build_ament_cmake.sh b/recipes/ros-jazzy-rosbag2-storage-sqlite3/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-storage-sqlite3/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosbag2-storage-sqlite3/recipe.yaml b/recipes/ros-jazzy-rosbag2-storage-sqlite3/recipe.yaml
new file mode 100644
index 00000000..896fcbe1
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-storage-sqlite3/recipe.yaml
@@ -0,0 +1,102 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosbag2-storage-sqlite3
+  version: 0.26.6
+source:
+  git: https://github.com/ros2-gbp/rosbag2-release.git
+  tag: release/jazzy/rosbag2_storage_sqlite3/0.26.6-1
+  target_directory: ros-jazzy-rosbag2-storage-sqlite3/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-cmake-python
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2-storage
+    - ros-jazzy-rosbag2-test-common
+    - ros-jazzy-sqlite3-vendor
+    - ros-jazzy-std-msgs
+    - ros-jazzy-yaml-cpp-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2-storage
+    - ros-jazzy-sqlite3-vendor
+    - ros-jazzy-yaml-cpp-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosbag2-storage/bld_ament_cmake.bat b/recipes/ros-jazzy-rosbag2-storage/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-storage/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosbag2-storage/build_ament_cmake.sh b/recipes/ros-jazzy-rosbag2-storage/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-storage/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosbag2-storage/recipe.yaml b/recipes/ros-jazzy-rosbag2-storage/recipe.yaml
new file mode 100644
index 00000000..9bd5761e
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-storage/recipe.yaml
@@ -0,0 +1,99 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosbag2-storage
+  version: 0.26.6
+source:
+  git: https://github.com/ros2-gbp/rosbag2-release.git
+  tag: release/jazzy/rosbag2_storage/0.26.6-1
+  target_directory: ros-jazzy-rosbag2-storage/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2-test-common
+    - ros-jazzy-yaml-cpp-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-yaml-cpp-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosbag2-test-common/bld_ament_cmake.bat b/recipes/ros-jazzy-rosbag2-test-common/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-test-common/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosbag2-test-common/build_ament_cmake.sh b/recipes/ros-jazzy-rosbag2-test-common/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-test-common/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosbag2-test-common/recipe.yaml b/recipes/ros-jazzy-rosbag2-test-common/recipe.yaml
new file mode 100644
index 00000000..bef1fffb
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-test-common/recipe.yaml
@@ -0,0 +1,94 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosbag2-test-common
+  version: 0.26.6
+source:
+  git: https://github.com/ros2-gbp/rosbag2-release.git
+  tag: release/jazzy/rosbag2_test_common/0.26.6-1
+  target_directory: ros-jazzy-rosbag2-test-common/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-python
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-python-cmake-module
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-test-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-test-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosbag2-test-msgdefs/bld_ament_cmake.bat b/recipes/ros-jazzy-rosbag2-test-msgdefs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-test-msgdefs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosbag2-test-msgdefs/build_ament_cmake.sh b/recipes/ros-jazzy-rosbag2-test-msgdefs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-test-msgdefs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosbag2-test-msgdefs/recipe.yaml b/recipes/ros-jazzy-rosbag2-test-msgdefs/recipe.yaml
new file mode 100644
index 00000000..b566a5e0
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-test-msgdefs/recipe.yaml
@@ -0,0 +1,87 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosbag2-test-msgdefs
+  version: 0.26.6
+source:
+  git: https://github.com/ros2-gbp/rosbag2-release.git
+  tag: release/jazzy/rosbag2_test_msgdefs/0.26.6-1
+  target_directory: ros-jazzy-rosbag2-test-msgdefs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosbag2-tests/bld_ament_cmake.bat b/recipes/ros-jazzy-rosbag2-tests/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-tests/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosbag2-tests/build_ament_cmake.sh b/recipes/ros-jazzy-rosbag2-tests/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-tests/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosbag2-tests/recipe.yaml b/recipes/ros-jazzy-rosbag2-tests/recipe.yaml
new file mode 100644
index 00000000..d5d143f8
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-tests/recipe.yaml
@@ -0,0 +1,102 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosbag2-tests
+  version: 0.26.6
+source:
+  git: https://github.com/ros2-gbp/rosbag2-release.git
+  tag: release/jazzy/rosbag2_tests/0.26.6-1
+  target_directory: ros-jazzy-rosbag2-tests/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcpputils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2bag
+    - ros-jazzy-rosbag2-compression
+    - ros-jazzy-rosbag2-compression-zstd
+    - ros-jazzy-rosbag2-cpp
+    - ros-jazzy-rosbag2-interfaces
+    - ros-jazzy-rosbag2-storage
+    - ros-jazzy-rosbag2-storage-default-plugins
+    - ros-jazzy-rosbag2-test-common
+    - ros-jazzy-rosbag2-transport
+    - ros-jazzy-std-msgs
+    - ros-jazzy-test-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosbag2-transport/bld_ament_cmake.bat b/recipes/ros-jazzy-rosbag2-transport/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-transport/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosbag2-transport/build_ament_cmake.sh b/recipes/ros-jazzy-rosbag2-transport/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-transport/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosbag2-transport/recipe.yaml b/recipes/ros-jazzy-rosbag2-transport/recipe.yaml
new file mode 100644
index 00000000..7367e949
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2-transport/recipe.yaml
@@ -0,0 +1,116 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosbag2-transport
+  version: 0.26.6
+source:
+  git: https://github.com/ros2-gbp/rosbag2-release.git
+  tag: release/jazzy/rosbag2_transport/0.26.6-1
+  target_directory: ros-jazzy-rosbag2-transport/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-composition-interfaces
+    - ros-jazzy-keyboard-handler
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-rmw-implementation-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2-compression
+    - ros-jazzy-rosbag2-compression-zstd
+    - ros-jazzy-rosbag2-cpp
+    - ros-jazzy-rosbag2-interfaces
+    - ros-jazzy-rosbag2-storage
+    - ros-jazzy-rosbag2-storage-default-plugins
+    - ros-jazzy-rosbag2-test-common
+    - ros-jazzy-test-msgs
+    - ros-jazzy-yaml-cpp-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-keyboard-handler
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2-compression
+    - ros-jazzy-rosbag2-cpp
+    - ros-jazzy-rosbag2-interfaces
+    - ros-jazzy-rosbag2-storage
+    - ros-jazzy-yaml-cpp-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosbag2/bld_ament_cmake.bat b/recipes/ros-jazzy-rosbag2/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosbag2/build_ament_cmake.sh b/recipes/ros-jazzy-rosbag2/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosbag2/recipe.yaml b/recipes/ros-jazzy-rosbag2/recipe.yaml
new file mode 100644
index 00000000..d1959ba3
--- /dev/null
+++ b/recipes/ros-jazzy-rosbag2/recipe.yaml
@@ -0,0 +1,94 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosbag2
+  version: 0.26.6
+source:
+  git: https://github.com/ros2-gbp/rosbag2-release.git
+  tag: release/jazzy/rosbag2/0.26.6-1
+  target_directory: ros-jazzy-rosbag2/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2-test-common
+    - ros-jazzy-rosbag2-tests
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2bag
+    - ros-jazzy-rosbag2-compression
+    - ros-jazzy-rosbag2-compression-zstd
+    - ros-jazzy-rosbag2-cpp
+    - ros-jazzy-rosbag2-py
+    - ros-jazzy-rosbag2-storage
+    - ros-jazzy-rosbag2-storage-default-plugins
+    - ros-jazzy-rosbag2-transport
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosgraph-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-rosgraph-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosgraph-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosgraph-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-rosgraph-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosgraph-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosgraph-msgs/recipe.yaml b/recipes/ros-jazzy-rosgraph-msgs/recipe.yaml
new file mode 100644
index 00000000..76eb5176
--- /dev/null
+++ b/recipes/ros-jazzy-rosgraph-msgs/recipe.yaml
@@ -0,0 +1,89 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosgraph-msgs
+  version: 2.0.2
+source:
+  git: https://github.com/ros2-gbp/rcl_interfaces-release.git
+  tag: release/jazzy/rosgraph_msgs/2.0.2-2
+  target_directory: ros-jazzy-rosgraph-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-adapter/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-adapter/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-adapter/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-adapter/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-adapter/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-adapter/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-adapter/recipe.yaml b/recipes/ros-jazzy-rosidl-adapter/recipe.yaml
new file mode 100644
index 00000000..8342c382
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-adapter/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-adapter
+  version: 4.6.5
+source:
+  git: https://github.com/ros2-gbp/rosidl-release.git
+  tag: release/jazzy/rosidl_adapter/4.6.5-1
+  target_directory: ros-jazzy-rosidl-adapter/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - empy
+    - python
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cli
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-cmake/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-cmake/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-cmake/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-cmake/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-cmake/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-cmake/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-cmake/recipe.yaml b/recipes/ros-jazzy-rosidl-cmake/recipe.yaml
new file mode 100644
index 00000000..6508bfdb
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-cmake/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-cmake
+  version: 4.6.5
+source:
+  git: https://github.com/ros2-gbp/rosidl-release.git
+  tag: release/jazzy/rosidl_cmake/4.6.5-1
+  target_directory: ros-jazzy-rosidl-cmake/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - empy
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-python
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - empy
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-pycommon
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-core-generators/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-core-generators/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-core-generators/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-core-generators/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-core-generators/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-core-generators/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-core-generators/recipe.yaml b/recipes/ros-jazzy-rosidl-core-generators/recipe.yaml
new file mode 100644
index 00000000..e1983f47
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-core-generators/recipe.yaml
@@ -0,0 +1,110 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-core-generators
+  version: 0.2.0
+source:
+  git: https://github.com/ros2-gbp/rosidl_core-release.git
+  tag: release/jazzy/rosidl_core_generators/0.2.0-3
+  target_directory: ros-jazzy-rosidl-core-generators/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cmake
+    - ros-jazzy-rosidl-generator-c
+    - ros-jazzy-rosidl-generator-cpp
+    - ros-jazzy-rosidl-generator-py
+    - ros-jazzy-rosidl-generator-type-description
+    - ros-jazzy-rosidl-typesupport-c
+    - ros-jazzy-rosidl-typesupport-cpp
+    - ros-jazzy-rosidl-typesupport-fastrtps-c
+    - ros-jazzy-rosidl-typesupport-fastrtps-cpp
+    - ros-jazzy-rosidl-typesupport-introspection-c
+    - ros-jazzy-rosidl-typesupport-introspection-cpp
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cmake
+    - ros-jazzy-rosidl-generator-c
+    - ros-jazzy-rosidl-generator-cpp
+    - ros-jazzy-rosidl-generator-py
+    - ros-jazzy-rosidl-generator-type-description
+    - ros-jazzy-rosidl-typesupport-c
+    - ros-jazzy-rosidl-typesupport-cpp
+    - ros-jazzy-rosidl-typesupport-fastrtps-c
+    - ros-jazzy-rosidl-typesupport-fastrtps-cpp
+    - ros-jazzy-rosidl-typesupport-introspection-c
+    - ros-jazzy-rosidl-typesupport-introspection-cpp
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-core-runtime/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-core-runtime/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-core-runtime/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-core-runtime/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-core-runtime/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-core-runtime/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-core-runtime/recipe.yaml b/recipes/ros-jazzy-rosidl-core-runtime/recipe.yaml
new file mode 100644
index 00000000..c028a906
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-core-runtime/recipe.yaml
@@ -0,0 +1,104 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-core-runtime
+  version: 0.2.0
+source:
+  git: https://github.com/ros2-gbp/rosidl_core-release.git
+  tag: release/jazzy/rosidl_core_runtime/0.2.0-3
+  target_directory: ros-jazzy-rosidl-core-runtime/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-generator-py
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros-jazzy-rosidl-typesupport-c
+    - ros-jazzy-rosidl-typesupport-cpp
+    - ros-jazzy-rosidl-typesupport-fastrtps-c
+    - ros-jazzy-rosidl-typesupport-fastrtps-cpp
+    - ros-jazzy-rosidl-typesupport-introspection-c
+    - ros-jazzy-rosidl-typesupport-introspection-cpp
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-generator-py
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros-jazzy-rosidl-typesupport-c
+    - ros-jazzy-rosidl-typesupport-cpp
+    - ros-jazzy-rosidl-typesupport-fastrtps-c
+    - ros-jazzy-rosidl-typesupport-fastrtps-cpp
+    - ros-jazzy-rosidl-typesupport-introspection-c
+    - ros-jazzy-rosidl-typesupport-introspection-cpp
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-default-generators/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-default-generators/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-default-generators/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-default-generators/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-default-generators/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-default-generators/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-default-generators/recipe.yaml b/recipes/ros-jazzy-rosidl-default-generators/recipe.yaml
new file mode 100644
index 00000000..7cdc6dd4
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-default-generators/recipe.yaml
@@ -0,0 +1,94 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-default-generators
+  version: 1.6.0
+source:
+  git: https://github.com/ros2-gbp/rosidl_defaults-release.git
+  tag: release/jazzy/rosidl_default_generators/1.6.0-3
+  target_directory: ros-jazzy-rosidl-default-generators/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-action-msgs
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-core-generators
+    - ros-jazzy-service-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-action-msgs
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-core-generators
+    - ros-jazzy-service-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-default-runtime/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-default-runtime/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-default-runtime/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-default-runtime/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-default-runtime/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-default-runtime/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-default-runtime/recipe.yaml b/recipes/ros-jazzy-rosidl-default-runtime/recipe.yaml
new file mode 100644
index 00000000..039816c8
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-default-runtime/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-default-runtime
+  version: 1.6.0
+source:
+  git: https://github.com/ros2-gbp/rosidl_defaults-release.git
+  tag: release/jazzy/rosidl_default_runtime/1.6.0-3
+  target_directory: ros-jazzy-rosidl-default-runtime/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-core-runtime
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-action-msgs
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-core-runtime
+    - ros-jazzy-service-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-dynamic-typesupport-fastrtps/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-dynamic-typesupport-fastrtps/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-dynamic-typesupport-fastrtps/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-dynamic-typesupport-fastrtps/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-dynamic-typesupport-fastrtps/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-dynamic-typesupport-fastrtps/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-dynamic-typesupport-fastrtps/recipe.yaml b/recipes/ros-jazzy-rosidl-dynamic-typesupport-fastrtps/recipe.yaml
new file mode 100644
index 00000000..a13669e8
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-dynamic-typesupport-fastrtps/recipe.yaml
@@ -0,0 +1,93 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-dynamic-typesupport-fastrtps
+  version: 0.1.0
+source:
+  git: https://github.com/ros2-gbp/rosidl_dynamic_typesupport_fastrtps-release.git
+  tag: release/jazzy/rosidl_dynamic_typesupport_fastrtps/0.1.0-3
+  target_directory: ros-jazzy-rosidl-dynamic-typesupport-fastrtps/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-fastcdr
+    - ros-jazzy-fastrtps
+    - ros-jazzy-fastrtps-cmake-module
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-dynamic-typesupport
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-fastcdr
+    - ros-jazzy-fastrtps
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-dynamic-typesupport
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-dynamic-typesupport/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-dynamic-typesupport/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-dynamic-typesupport/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-dynamic-typesupport/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-dynamic-typesupport/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-dynamic-typesupport/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-dynamic-typesupport/recipe.yaml b/recipes/ros-jazzy-rosidl-dynamic-typesupport/recipe.yaml
new file mode 100644
index 00000000..955881c9
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-dynamic-typesupport/recipe.yaml
@@ -0,0 +1,88 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-dynamic-typesupport
+  version: 0.1.2
+source:
+  git: https://github.com/ros2-gbp/rosidl_dynamic_typesupport-release.git
+  tag: release/jazzy/rosidl_dynamic_typesupport/0.1.2-3
+  target_directory: ros-jazzy-rosidl-dynamic-typesupport/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-c
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-c
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-generator-c/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-generator-c/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-generator-c/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-generator-c/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-generator-c/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-generator-c/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-generator-c/recipe.yaml b/recipes/ros-jazzy-rosidl-generator-c/recipe.yaml
new file mode 100644
index 00000000..b8854017
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-generator-c/recipe.yaml
@@ -0,0 +1,102 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-generator-c
+  version: 4.6.5
+source:
+  git: https://github.com/ros2-gbp/rosidl-release.git
+  tag: release/jazzy/rosidl_generator_c/4.6.5-1
+  target_directory: ros-jazzy-rosidl-generator-c/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-python
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cmake
+    - ros-jazzy-rosidl-generator-type-description
+    - ros-jazzy-rosidl-pycommon
+    - ros-jazzy-rosidl-typesupport-interface
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cli
+    - ros-jazzy-rosidl-cmake
+    - ros-jazzy-rosidl-generator-type-description
+    - ros-jazzy-rosidl-parser
+    - ros-jazzy-rosidl-pycommon
+    - ros-jazzy-rosidl-typesupport-interface
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-generator-cpp/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-generator-cpp/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-generator-cpp/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-generator-cpp/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-generator-cpp/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-generator-cpp/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-generator-cpp/recipe.yaml b/recipes/ros-jazzy-rosidl-generator-cpp/recipe.yaml
new file mode 100644
index 00000000..6dc599a8
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-generator-cpp/recipe.yaml
@@ -0,0 +1,100 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-generator-cpp
+  version: 4.6.5
+source:
+  git: https://github.com/ros2-gbp/rosidl-release.git
+  tag: release/jazzy/rosidl_generator_cpp/4.6.5-1
+  target_directory: ros-jazzy-rosidl-generator-cpp/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cmake
+    - ros-jazzy-rosidl-generator-c
+    - ros-jazzy-rosidl-pycommon
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cli
+    - ros-jazzy-rosidl-cmake
+    - ros-jazzy-rosidl-generator-c
+    - ros-jazzy-rosidl-generator-type-description
+    - ros-jazzy-rosidl-parser
+    - ros-jazzy-rosidl-pycommon
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-generator-py/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-generator-py/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-generator-py/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-generator-py/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-generator-py/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-generator-py/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-generator-py/patch/ros-jazzy-rosidl-generator-py.osx.patch b/recipes/ros-jazzy-rosidl-generator-py/patch/ros-jazzy-rosidl-generator-py.osx.patch
new file mode 100644
index 00000000..cde64b21
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-generator-py/patch/ros-jazzy-rosidl-generator-py.osx.patch
@@ -0,0 +1,69 @@
+diff --git a/cmake/rosidl_generator_py_generate_interfaces.cmake b/cmake/rosidl_generator_py_generate_interfaces.cmake
+index cfc424a..cddd23d 100644
+--- a/cmake/rosidl_generator_py_generate_interfaces.cmake
++++ b/cmake/rosidl_generator_py_generate_interfaces.cmake
+@@ -138,7 +139,7 @@ set_property(
+ 
+ set(_target_name_lib "${rosidl_generate_interfaces_TARGET}__rosidl_generator_py")
+ add_library(${_target_name_lib} SHARED ${_generated_c_files})
+-target_link_libraries(${_target_name_lib} PRIVATE
++target_link_libraries(${_target_name_lib} PUBLIC
+   ${rosidl_generate_interfaces_TARGET}__rosidl_generator_c)
+ add_dependencies(
+   ${_target_name_lib}
+@@ -146,11 +147,6 @@ add_dependencies(
+   ${rosidl_generate_interfaces_TARGET}__rosidl_typesupport_c
+ )
+ 
+-target_link_libraries(
+-  ${_target_name_lib} PRIVATE
+-  Python3::NumPy
+-  Python3::Python
+-)
+ target_include_directories(${_target_name_lib}
+   PRIVATE
+   ${CMAKE_CURRENT_BINARY_DIR}/rosidl_generator_c
+@@ -162,8 +158,15 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+   set(_extension_compile_flags -Wall -Wextra)
+ endif()
+ 
++if(APPLE)
++  set_target_properties(${_target_name_lib} PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
++  target_include_directories(${_target_name_lib} PUBLIC ${Python3_INCLUDE_DIRS} ${Python3_NumPy_INCLUDE_DIRS})
++else()
++  target_link_libraries(${_target_name_lib} PUBLIC Python3::NumPy Python3::Python)
++endif()
++
+ rosidl_get_typesupport_target(c_typesupport_target "${rosidl_generate_interfaces_TARGET}" "rosidl_typesupport_c")
+-target_link_libraries(${_target_name_lib} PRIVATE ${c_typesupport_target})
++target_link_libraries(${_target_name_lib} PUBLIC ${c_typesupport_target})
+ 
+ foreach(_typesupport_impl ${_typesupport_impls})
+   find_package(${_typesupport_impl} REQUIRED)
+@@ -194,7 +197,7 @@ foreach(_typesupport_impl ${_typesupport_impls})
+     RUNTIME_OUTPUT_DIRECTORY ${_output_path})
+ 
+   target_link_libraries(
+-    ${_target_name} PRIVATE
++    ${_target_name} PUBLIC
+     ${_target_name_lib}
+     ${rosidl_generate_interfaces_TARGET}__${_typesupport_impl}
+     ${c_typesupport_target}
+@@ -210,7 +213,7 @@ foreach(_typesupport_impl ${_typesupport_impls})
+   )
+ 
+   foreach(_pkg_name ${rosidl_generate_interfaces_DEPENDENCY_PACKAGE_NAMES})
+-    target_link_libraries(${_target_name} PRIVATE ${${_pkg_name}__TARGETS})
++    target_link_libraries(${_target_name} PUBLIC ${${_pkg_name}__TARGETS})
+   endforeach()
+ 
+   add_dependencies(${_target_name}
+@@ -231,7 +234,7 @@ endforeach()
+ 
+ # Depend on rosidl_generator_py generated targets from our dependencies
+ foreach(_pkg_name ${rosidl_generate_interfaces_DEPENDENCY_PACKAGE_NAMES})
+-  target_link_libraries(${_target_name_lib} PRIVATE ${${_pkg_name}_TARGETS${rosidl_generator_py_suffix}})
++  target_link_libraries(${_target_name_lib} PUBLIC ${${_pkg_name}_TARGETS${rosidl_generator_py_suffix}})
+ endforeach()
+ 
+ set_target_properties(${_target_name_lib} PROPERTIES COMPILE_OPTIONS "${_extension_compile_flags}")
diff --git a/recipes/ros-jazzy-rosidl-generator-py/recipe.yaml b/recipes/ros-jazzy-rosidl-generator-py/recipe.yaml
new file mode 100644
index 00000000..3eeb1788
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-generator-py/recipe.yaml
@@ -0,0 +1,123 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-generator-py
+  version: 0.22.0
+source:
+  git: https://github.com/ros2-gbp/rosidl_python-release.git
+  tag: release/jazzy/rosidl_generator_py/0.22.0-2
+  target_directory: ros-jazzy-rosidl-generator-py/src/work
+  patches:
+    - patch/ros-jazzy-rosidl-generator-py.osx.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-python-cmake-module
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cmake
+    - ros-jazzy-rosidl-generator-c
+    - ros-jazzy-rosidl-generator-cpp
+    - ros-jazzy-rosidl-parser
+    - ros-jazzy-rosidl-pycommon
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-typesupport-c
+    - ros-jazzy-rosidl-typesupport-fastrtps-c
+    - ros-jazzy-rosidl-typesupport-interface
+    - ros-jazzy-rosidl-typesupport-introspection-c
+    - ros-jazzy-rpyutils
+    - ros-jazzy-test-interface-files
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - numpy
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-cppcheck
+    - ros-jazzy-ament-cmake-cpplint
+    - ros-jazzy-ament-cmake-flake8
+    - ros-jazzy-ament-cmake-pep257
+    - ros-jazzy-ament-cmake-uncrustify
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-python-cmake-module
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cli
+    - ros-jazzy-rosidl-generator-c
+    - ros-jazzy-rosidl-parser
+    - ros-jazzy-rosidl-pycommon
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-typesupport-c
+    - ros-jazzy-rosidl-typesupport-interface
+    - ros-jazzy-rpyutils
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-generator-type-description/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-generator-type-description/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-generator-type-description/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-generator-type-description/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-generator-type-description/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-generator-type-description/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-generator-type-description/recipe.yaml b/recipes/ros-jazzy-rosidl-generator-type-description/recipe.yaml
new file mode 100644
index 00000000..e5182d6e
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-generator-type-description/recipe.yaml
@@ -0,0 +1,92 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-generator-type-description
+  version: 4.6.5
+source:
+  git: https://github.com/ros2-gbp/rosidl-release.git
+  tag: release/jazzy/rosidl_generator_type_description/4.6.5-1
+  target_directory: ros-jazzy-rosidl-generator-type-description/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-python
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cli
+    - ros-jazzy-rosidl-parser
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-parser/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-parser/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-parser/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-parser/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-parser/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-parser/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-parser/recipe.yaml b/recipes/ros-jazzy-rosidl-parser/recipe.yaml
new file mode 100644
index 00000000..d9a5803b
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-parser/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-parser
+  version: 4.6.5
+source:
+  git: https://github.com/ros2-gbp/rosidl-release.git
+  tag: release/jazzy/rosidl_parser/4.6.5-1
+  target_directory: ros-jazzy-rosidl-parser/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - lark-parser
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-adapter
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-pycommon/bld_ament_python.bat b/recipes/ros-jazzy-rosidl-pycommon/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-pycommon/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-pycommon/build_ament_python.sh b/recipes/ros-jazzy-rosidl-pycommon/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-pycommon/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-rosidl-pycommon/recipe.yaml b/recipes/ros-jazzy-rosidl-pycommon/recipe.yaml
new file mode 100644
index 00000000..e78e3855
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-pycommon/recipe.yaml
@@ -0,0 +1,89 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-pycommon
+  version: 4.6.5
+source:
+  git: https://github.com/ros2-gbp/rosidl-release.git
+  tag: release/jazzy/rosidl_pycommon/4.6.5-1
+  target_directory: ros-jazzy-rosidl-pycommon/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-parser
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-runtime-c/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-runtime-c/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-runtime-c/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-runtime-c/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-runtime-c/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-runtime-c/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-runtime-c/recipe.yaml b/recipes/ros-jazzy-rosidl-runtime-c/recipe.yaml
new file mode 100644
index 00000000..4d55a202
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-runtime-c/recipe.yaml
@@ -0,0 +1,93 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-runtime-c
+  version: 4.6.5
+source:
+  git: https://github.com/ros2-gbp/rosidl-release.git
+  tag: release/jazzy/rosidl_runtime_c/4.6.5-1
+  target_directory: ros-jazzy-rosidl-runtime-c/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-performance-test-fixture
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-typesupport-interface
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-typesupport-interface
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-runtime-cpp/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-runtime-cpp/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-runtime-cpp/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-runtime-cpp/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-runtime-cpp/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-runtime-cpp/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-runtime-cpp/recipe.yaml b/recipes/ros-jazzy-rosidl-runtime-cpp/recipe.yaml
new file mode 100644
index 00000000..344ab00a
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-runtime-cpp/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-runtime-cpp
+  version: 4.6.5
+source:
+  git: https://github.com/ros2-gbp/rosidl-release.git
+  tag: release/jazzy/rosidl_runtime_cpp/4.6.5-1
+  target_directory: ros-jazzy-rosidl-runtime-cpp/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-performance-test-fixture
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-c
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-c
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-runtime-py/bld_ament_python.bat b/recipes/ros-jazzy-rosidl-runtime-py/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-runtime-py/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-runtime-py/build_ament_python.sh b/recipes/ros-jazzy-rosidl-runtime-py/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-runtime-py/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-rosidl-runtime-py/recipe.yaml b/recipes/ros-jazzy-rosidl-runtime-py/recipe.yaml
new file mode 100644
index 00000000..27a2e5eb
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-runtime-py/recipe.yaml
@@ -0,0 +1,95 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-runtime-py
+  version: 0.13.1
+source:
+  git: https://github.com/ros2-gbp/rosidl_runtime_py-release.git
+  tag: release/jazzy/rosidl_runtime_py/0.13.1-2
+  target_directory: ros-jazzy-rosidl-runtime-py/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ament-xmllint
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros-jazzy-std-srvs
+    - ros-jazzy-test-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - numpy
+    - python
+    - pyyaml
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-parser
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-typesupport-c/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-typesupport-c/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-c/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-typesupport-c/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-typesupport-c/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-c/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-typesupport-c/recipe.yaml b/recipes/ros-jazzy-rosidl-typesupport-c/recipe.yaml
new file mode 100644
index 00000000..d6c1f366
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-c/recipe.yaml
@@ -0,0 +1,105 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-typesupport-c
+  version: 3.2.2
+source:
+  git: https://github.com/ros2-gbp/rosidl_typesupport-release.git
+  tag: release/jazzy/rosidl_typesupport_c/3.2.2-1
+  target_directory: ros-jazzy-rosidl-typesupport-c/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-mimick-vendor
+    - ros-jazzy-performance-test-fixture
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-typesupport-fastrtps-c
+    - ros-jazzy-rosidl-typesupport-introspection-c
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cli
+    - ros-jazzy-rosidl-generator-c
+    - ros-jazzy-rosidl-pycommon
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-typesupport-fastrtps-c
+    - ros-jazzy-rosidl-typesupport-interface
+    - ros-jazzy-rosidl-typesupport-introspection-c
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-typesupport-cpp/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-typesupport-cpp/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-cpp/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-typesupport-cpp/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-typesupport-cpp/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-cpp/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-typesupport-cpp/recipe.yaml b/recipes/ros-jazzy-rosidl-typesupport-cpp/recipe.yaml
new file mode 100644
index 00000000..3d779bea
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-cpp/recipe.yaml
@@ -0,0 +1,109 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-typesupport-cpp
+  version: 3.2.2
+source:
+  git: https://github.com/ros2-gbp/rosidl_typesupport-release.git
+  tag: release/jazzy/rosidl_typesupport_cpp/3.2.2-1
+  target_directory: ros-jazzy-rosidl-typesupport-cpp/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-performance-test-fixture
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros-jazzy-rosidl-typesupport-c
+    - ros-jazzy-rosidl-typesupport-fastrtps-cpp
+    - ros-jazzy-rosidl-typesupport-introspection-cpp
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-rcpputils
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cli
+    - ros-jazzy-rosidl-generator-c
+    - ros-jazzy-rosidl-generator-type-description
+    - ros-jazzy-rosidl-pycommon
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros-jazzy-rosidl-typesupport-c
+    - ros-jazzy-rosidl-typesupport-fastrtps-cpp
+    - ros-jazzy-rosidl-typesupport-interface
+    - ros-jazzy-rosidl-typesupport-introspection-cpp
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-typesupport-fastrtps-c/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-typesupport-fastrtps-c/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-fastrtps-c/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-typesupport-fastrtps-c/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-typesupport-fastrtps-c/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-fastrtps-c/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-typesupport-fastrtps-c/recipe.yaml b/recipes/ros-jazzy-rosidl-typesupport-fastrtps-c/recipe.yaml
new file mode 100644
index 00000000..79946d72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-fastrtps-c/recipe.yaml
@@ -0,0 +1,114 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-typesupport-fastrtps-c
+  version: 3.6.1
+source:
+  git: https://github.com/ros2-gbp/rosidl_typesupport_fastrtps-release.git
+  tag: release/jazzy/rosidl_typesupport_fastrtps_c/3.6.1-1
+  target_directory: ros-jazzy-rosidl-typesupport-fastrtps-c/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-cmake-python
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-fastcdr
+    - ros-jazzy-fastrtps-cmake-module
+    - ros-jazzy-osrf-testing-tools-cpp
+    - ros-jazzy-performance-test-fixture
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cli
+    - ros-jazzy-rosidl-generator-c
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros-jazzy-rosidl-typesupport-fastrtps-cpp
+    - ros-jazzy-rosidl-typesupport-interface
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-fastcdr
+    - ros-jazzy-fastrtps-cmake-module
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cli
+    - ros-jazzy-rosidl-generator-c
+    - ros-jazzy-rosidl-pycommon
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros-jazzy-rosidl-typesupport-fastrtps-cpp
+    - ros-jazzy-rosidl-typesupport-interface
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-typesupport-fastrtps-cpp/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-typesupport-fastrtps-cpp/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-fastrtps-cpp/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-typesupport-fastrtps-cpp/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-typesupport-fastrtps-cpp/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-fastrtps-cpp/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-typesupport-fastrtps-cpp/recipe.yaml b/recipes/ros-jazzy-rosidl-typesupport-fastrtps-cpp/recipe.yaml
new file mode 100644
index 00000000..f579814c
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-fastrtps-cpp/recipe.yaml
@@ -0,0 +1,114 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-typesupport-fastrtps-cpp
+  version: 3.6.1
+source:
+  git: https://github.com/ros2-gbp/rosidl_typesupport_fastrtps-release.git
+  tag: release/jazzy/rosidl_typesupport_fastrtps_cpp/3.6.1-1
+  target_directory: ros-jazzy-rosidl-typesupport-fastrtps-cpp/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-cmake-python
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-fastcdr
+    - ros-jazzy-fastrtps-cmake-module
+    - ros-jazzy-osrf-testing-tools-cpp
+    - ros-jazzy-performance-test-fixture
+    - ros-jazzy-rcutils
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cli
+    - ros-jazzy-rosidl-generator-c
+    - ros-jazzy-rosidl-generator-cpp
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros-jazzy-rosidl-typesupport-interface
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-fastcdr
+    - ros-jazzy-fastrtps-cmake-module
+    - ros-jazzy-rmw
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cli
+    - ros-jazzy-rosidl-generator-c
+    - ros-jazzy-rosidl-generator-cpp
+    - ros-jazzy-rosidl-pycommon
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros-jazzy-rosidl-typesupport-interface
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-typesupport-interface/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-typesupport-interface/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-interface/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-typesupport-interface/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-typesupport-interface/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-interface/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-typesupport-interface/recipe.yaml b/recipes/ros-jazzy-rosidl-typesupport-interface/recipe.yaml
new file mode 100644
index 00000000..31fd3a1c
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-interface/recipe.yaml
@@ -0,0 +1,87 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-typesupport-interface
+  version: 4.6.5
+source:
+  git: https://github.com/ros2-gbp/rosidl-release.git
+  tag: release/jazzy/rosidl_typesupport_interface/4.6.5-1
+  target_directory: ros-jazzy-rosidl-typesupport-interface/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-typesupport-introspection-c/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-typesupport-introspection-c/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-introspection-c/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-typesupport-introspection-c/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-typesupport-introspection-c/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-introspection-c/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-typesupport-introspection-c/recipe.yaml b/recipes/ros-jazzy-rosidl-typesupport-introspection-c/recipe.yaml
new file mode 100644
index 00000000..10279f75
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-introspection-c/recipe.yaml
@@ -0,0 +1,101 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-typesupport-introspection-c
+  version: 4.6.5
+source:
+  git: https://github.com/ros2-gbp/rosidl-release.git
+  tag: release/jazzy/rosidl_typesupport_introspection_c/4.6.5-1
+  target_directory: ros-jazzy-rosidl-typesupport-introspection-c/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cmake
+    - ros-jazzy-rosidl-generator-c
+    - ros-jazzy-rosidl-pycommon
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-typesupport-interface
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cli
+    - ros-jazzy-rosidl-cmake
+    - ros-jazzy-rosidl-generator-c
+    - ros-jazzy-rosidl-parser
+    - ros-jazzy-rosidl-pycommon
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-typesupport-interface
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rosidl-typesupport-introspection-cpp/bld_ament_cmake.bat b/recipes/ros-jazzy-rosidl-typesupport-introspection-cpp/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-introspection-cpp/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rosidl-typesupport-introspection-cpp/build_ament_cmake.sh b/recipes/ros-jazzy-rosidl-typesupport-introspection-cpp/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-introspection-cpp/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rosidl-typesupport-introspection-cpp/recipe.yaml b/recipes/ros-jazzy-rosidl-typesupport-introspection-cpp/recipe.yaml
new file mode 100644
index 00000000..e0dc48af
--- /dev/null
+++ b/recipes/ros-jazzy-rosidl-typesupport-introspection-cpp/recipe.yaml
@@ -0,0 +1,106 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rosidl-typesupport-introspection-cpp
+  version: 4.6.5
+source:
+  git: https://github.com/ros2-gbp/rosidl-release.git
+  tag: release/jazzy/rosidl_typesupport_introspection_cpp/4.6.5-1
+  target_directory: ros-jazzy-rosidl-typesupport-introspection-cpp/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cmake
+    - ros-jazzy-rosidl-generator-c
+    - ros-jazzy-rosidl-generator-cpp
+    - ros-jazzy-rosidl-pycommon
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros-jazzy-rosidl-typesupport-introspection-c
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cli
+    - ros-jazzy-rosidl-cmake
+    - ros-jazzy-rosidl-generator-c
+    - ros-jazzy-rosidl-generator-cpp
+    - ros-jazzy-rosidl-parser
+    - ros-jazzy-rosidl-pycommon
+    - ros-jazzy-rosidl-runtime-c
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros-jazzy-rosidl-typesupport-interface
+    - ros-jazzy-rosidl-typesupport-introspection-c
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rqt-action/bld_ament_python.bat b/recipes/ros-jazzy-rqt-action/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-action/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rqt-action/build_ament_python.sh b/recipes/ros-jazzy-rqt-action/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-action/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-rqt-action/recipe.yaml b/recipes/ros-jazzy-rqt-action/recipe.yaml
new file mode 100644
index 00000000..1c31f06f
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-action/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rqt-action
+  version: 2.2.0
+source:
+  git: https://github.com/ros2-gbp/rqt_action-release.git
+  tag: release/jazzy/rqt_action/2.2.0-3
+  target_directory: ros-jazzy-rqt-action/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-xmllint
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rqt-gui
+    - ros-jazzy-rqt-gui-py
+    - ros-jazzy-rqt-msg
+    - ros-jazzy-rqt-py-common
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rqt-bag-plugins/bld_ament_python.bat b/recipes/ros-jazzy-rqt-bag-plugins/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-bag-plugins/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rqt-bag-plugins/build_ament_python.sh b/recipes/ros-jazzy-rqt-bag-plugins/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-bag-plugins/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-rqt-bag-plugins/recipe.yaml b/recipes/ros-jazzy-rqt-bag-plugins/recipe.yaml
new file mode 100644
index 00000000..002b3469
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-bag-plugins/recipe.yaml
@@ -0,0 +1,96 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rqt-bag-plugins
+  version: 1.5.4
+source:
+  git: https://github.com/ros2-gbp/rqt_bag-release.git
+  tag: release/jazzy/rqt_bag_plugins/1.5.4-1
+  target_directory: ros-jazzy-rqt-bag-plugins/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - pillow
+    - pycairo
+    - python
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2
+    - ros-jazzy-rqt-bag
+    - ros-jazzy-rqt-gui
+    - ros-jazzy-rqt-gui-py
+    - ros-jazzy-rqt-plot
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rqt-bag/bld_ament_python.bat b/recipes/ros-jazzy-rqt-bag/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-bag/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rqt-bag/build_ament_python.sh b/recipes/ros-jazzy-rqt-bag/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-bag/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-rqt-bag/recipe.yaml b/recipes/ros-jazzy-rqt-bag/recipe.yaml
new file mode 100644
index 00000000..759824c9
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-bag/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rqt-bag
+  version: 1.5.4
+source:
+  git: https://github.com/ros2-gbp/rqt_bag-release.git
+  tag: release/jazzy/rqt_bag/1.5.4-1
+  target_directory: ros-jazzy-rqt-bag/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-python-qt-binding
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosbag2-py
+    - ros-jazzy-rqt-gui
+    - ros-jazzy-rqt-gui-py
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rqt-common-plugins/bld_ament_cmake.bat b/recipes/ros-jazzy-rqt-common-plugins/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-common-plugins/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rqt-common-plugins/build_ament_cmake.sh b/recipes/ros-jazzy-rqt-common-plugins/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-common-plugins/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rqt-common-plugins/recipe.yaml b/recipes/ros-jazzy-rqt-common-plugins/recipe.yaml
new file mode 100644
index 00000000..bac7fe52
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-common-plugins/recipe.yaml
@@ -0,0 +1,100 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rqt-common-plugins
+  version: 1.2.0
+source:
+  git: https://github.com/ros2-gbp/rqt_common_plugins-release.git
+  tag: release/jazzy/rqt_common_plugins/1.2.0-4
+  target_directory: ros-jazzy-rqt-common-plugins/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rqt-action
+    - ros-jazzy-rqt-bag
+    - ros-jazzy-rqt-bag-plugins
+    - ros-jazzy-rqt-console
+    - ros-jazzy-rqt-graph
+    - ros-jazzy-rqt-image-view
+    - ros-jazzy-rqt-msg
+    - ros-jazzy-rqt-plot
+    - ros-jazzy-rqt-publisher
+    - ros-jazzy-rqt-py-common
+    - ros-jazzy-rqt-py-console
+    - ros-jazzy-rqt-reconfigure
+    - ros-jazzy-rqt-service-caller
+    - ros-jazzy-rqt-shell
+    - ros-jazzy-rqt-srv
+    - ros-jazzy-rqt-topic
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rqt-console/bld_ament_python.bat b/recipes/ros-jazzy-rqt-console/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-console/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rqt-console/build_ament_python.sh b/recipes/ros-jazzy-rqt-console/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-console/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-rqt-console/recipe.yaml b/recipes/ros-jazzy-rqt-console/recipe.yaml
new file mode 100644
index 00000000..27d1f874
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-console/recipe.yaml
@@ -0,0 +1,92 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rqt-console
+  version: 2.2.1
+source:
+  git: https://github.com/ros2-gbp/rqt_console-release.git
+  tag: release/jazzy/rqt_console/2.2.1-3
+  target_directory: ros-jazzy-rqt-console/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-python-qt-binding
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rqt-gui
+    - ros-jazzy-rqt-gui-py
+    - ros-jazzy-rqt-py-common
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rqt-graph/bld_ament_python.bat b/recipes/ros-jazzy-rqt-graph/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-graph/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rqt-graph/build_ament_python.sh b/recipes/ros-jazzy-rqt-graph/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-graph/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-rqt-graph/recipe.yaml b/recipes/ros-jazzy-rqt-graph/recipe.yaml
new file mode 100644
index 00000000..f9bcd48a
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-graph/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rqt-graph
+  version: 1.5.4
+source:
+  git: https://github.com/ros2-gbp/rqt_graph-release.git
+  tag: release/jazzy/rqt_graph/1.5.4-1
+  target_directory: ros-jazzy-rqt-graph/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-python-qt-binding
+    - ros-jazzy-qt-dotgraph
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rqt-gui
+    - ros-jazzy-rqt-gui-py
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rqt-gui-cpp/bld_ament_cmake.bat b/recipes/ros-jazzy-rqt-gui-cpp/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-gui-cpp/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rqt-gui-cpp/build_ament_cmake.sh b/recipes/ros-jazzy-rqt-gui-cpp/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-gui-cpp/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rqt-gui-cpp/recipe.yaml b/recipes/ros-jazzy-rqt-gui-cpp/recipe.yaml
new file mode 100644
index 00000000..ec089c45
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-gui-cpp/recipe.yaml
@@ -0,0 +1,102 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rqt-gui-cpp
+  version: 1.6.0
+source:
+  git: https://github.com/ros2-gbp/rqt-release.git
+  tag: release/jazzy/rqt_gui_cpp/1.6.0-2
+  target_directory: ros-jazzy-rqt-gui-cpp/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - qt-main
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-pluginlib
+    - ros-jazzy-qt-gui-cpp
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - python
+    - ros-jazzy-pluginlib
+    - ros-jazzy-qt-gui-cpp
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-rqt-gui-py/bld_ament_python.bat b/recipes/ros-jazzy-rqt-gui-py/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-gui-py/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rqt-gui-py/build_ament_python.sh b/recipes/ros-jazzy-rqt-gui-py/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-gui-py/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-rqt-gui-py/recipe.yaml b/recipes/ros-jazzy-rqt-gui-py/recipe.yaml
new file mode 100644
index 00000000..aa9b4986
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-gui-py/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rqt-gui-py
+  version: 1.6.0
+source:
+  git: https://github.com/ros2-gbp/rqt-release.git
+  tag: release/jazzy/rqt_gui_py/1.6.0-2
+  target_directory: ros-jazzy-rqt-gui-py/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-qt-gui
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rqt-gui
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-qt-gui
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rqt-gui
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rqt-gui/bld_ament_python.bat b/recipes/ros-jazzy-rqt-gui/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-gui/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rqt-gui/build_ament_python.sh b/recipes/ros-jazzy-rqt-gui/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-gui/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-rqt-gui/recipe.yaml b/recipes/ros-jazzy-rqt-gui/recipe.yaml
new file mode 100644
index 00000000..98b47a7d
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-gui/recipe.yaml
@@ -0,0 +1,92 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rqt-gui
+  version: 1.6.0
+source:
+  git: https://github.com/ros2-gbp/rqt-release.git
+  tag: release/jazzy/rqt_gui/1.6.0-2
+  target_directory: ros-jazzy-rqt-gui/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-qt-gui
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - catkin_pkg
+    - python
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-python-qt-binding
+    - ros-jazzy-qt-gui
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rqt-image-view/bld_ament_cmake.bat b/recipes/ros-jazzy-rqt-image-view/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-image-view/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rqt-image-view/build_ament_cmake.sh b/recipes/ros-jazzy-rqt-image-view/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-image-view/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rqt-image-view/recipe.yaml b/recipes/ros-jazzy-rqt-image-view/recipe.yaml
new file mode 100644
index 00000000..76538f92
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-image-view/recipe.yaml
@@ -0,0 +1,112 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rqt-image-view
+  version: 1.3.0
+source:
+  git: https://github.com/ros2-gbp/rqt_image_view-release.git
+  tag: release/jazzy/rqt_image_view/1.3.0-2
+  target_directory: ros-jazzy-rqt-image-view/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - qt-main
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-cv-bridge
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-image-transport
+    - ros-jazzy-qt-gui-cpp
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rqt-gui
+    - ros-jazzy-rqt-gui-cpp
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - python
+    - ros-jazzy-cv-bridge
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-image-transport
+    - ros-jazzy-qt-gui-cpp
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rqt-gui
+    - ros-jazzy-rqt-gui-cpp
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-rqt-msg/bld_ament_python.bat b/recipes/ros-jazzy-rqt-msg/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-msg/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rqt-msg/build_ament_python.sh b/recipes/ros-jazzy-rqt-msg/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-msg/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-rqt-msg/recipe.yaml b/recipes/ros-jazzy-rqt-msg/recipe.yaml
new file mode 100644
index 00000000..5bd448e7
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-msg/recipe.yaml
@@ -0,0 +1,95 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rqt-msg
+  version: 1.5.1
+source:
+  git: https://github.com/ros2-gbp/rqt_msg-release.git
+  tag: release/jazzy/rqt_msg/1.5.1-3
+  target_directory: ros-jazzy-rqt-msg/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-xmllint
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-python-qt-binding
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-py
+    - ros-jazzy-rqt-console
+    - ros-jazzy-rqt-gui
+    - ros-jazzy-rqt-gui-py
+    - ros-jazzy-rqt-py-common
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rqt-plot/bld_ament_python.bat b/recipes/ros-jazzy-rqt-plot/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-plot/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rqt-plot/build_ament_python.sh b/recipes/ros-jazzy-rqt-plot/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-plot/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-rqt-plot/recipe.yaml b/recipes/ros-jazzy-rqt-plot/recipe.yaml
new file mode 100644
index 00000000..5c818887
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-plot/recipe.yaml
@@ -0,0 +1,96 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rqt-plot
+  version: 1.4.0
+source:
+  git: https://github.com/ros2-gbp/rqt_plot-release.git
+  tag: release/jazzy/rqt_plot/1.4.0-2
+  target_directory: ros-jazzy-rqt-plot/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - catkin_pkg
+    - matplotlib-base
+    - numpy
+    - python
+    - ros-jazzy-python-qt-binding
+    - ros-jazzy-qt-gui-py-common
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rqt-gui
+    - ros-jazzy-rqt-gui-py
+    - ros-jazzy-rqt-py-common
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rqt-publisher/bld_ament_python.bat b/recipes/ros-jazzy-rqt-publisher/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-publisher/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rqt-publisher/build_ament_python.sh b/recipes/ros-jazzy-rqt-publisher/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-publisher/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-rqt-publisher/recipe.yaml b/recipes/ros-jazzy-rqt-publisher/recipe.yaml
new file mode 100644
index 00000000..79516cb2
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-publisher/recipe.yaml
@@ -0,0 +1,94 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rqt-publisher
+  version: 1.7.2
+source:
+  git: https://github.com/ros2-gbp/rqt_publisher-release.git
+  tag: release/jazzy/rqt_publisher/1.7.2-2
+  target_directory: ros-jazzy-rqt-publisher/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - numpy
+    - python
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-python-qt-binding
+    - ros-jazzy-qt-gui-py-common
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-py
+    - ros-jazzy-rqt-gui
+    - ros-jazzy-rqt-gui-py
+    - ros-jazzy-rqt-py-common
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rqt-py-common/bld_ament_cmake.bat b/recipes/ros-jazzy-rqt-py-common/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-py-common/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rqt-py-common/build_ament_cmake.sh b/recipes/ros-jazzy-rqt-py-common/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-py-common/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rqt-py-common/recipe.yaml b/recipes/ros-jazzy-rqt-py-common/recipe.yaml
new file mode 100644
index 00000000..5797e0d0
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-py-common/recipe.yaml
@@ -0,0 +1,105 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rqt-py-common
+  version: 1.6.0
+source:
+  git: https://github.com/ros2-gbp/rqt-release.git
+  tag: release/jazzy/rqt_py_common/1.6.0-2
+  target_directory: ros-jazzy-rqt-py-common/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - qt-main
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-python-cmake-module
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-rosidl-default-runtime
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - python
+    - qt-main
+    - ros-jazzy-python-qt-binding
+    - ros-jazzy-qt-gui
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-rqt-py-console/bld_ament_python.bat b/recipes/ros-jazzy-rqt-py-console/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-py-console/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rqt-py-console/build_ament_python.sh b/recipes/ros-jazzy-rqt-py-console/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-py-console/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-rqt-py-console/recipe.yaml b/recipes/ros-jazzy-rqt-py-console/recipe.yaml
new file mode 100644
index 00000000..5978fe1e
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-py-console/recipe.yaml
@@ -0,0 +1,92 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rqt-py-console
+  version: 1.2.2
+source:
+  git: https://github.com/ros2-gbp/rqt_py_console-release.git
+  tag: release/jazzy/rqt_py_console/1.2.2-3
+  target_directory: ros-jazzy-rqt-py-console/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-python-qt-binding
+    - ros-jazzy-qt-gui
+    - ros-jazzy-qt-gui-py-common
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rqt-gui
+    - ros-jazzy-rqt-gui-py
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rqt-reconfigure/bld_ament_python.bat b/recipes/ros-jazzy-rqt-reconfigure/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-reconfigure/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rqt-reconfigure/build_ament_python.sh b/recipes/ros-jazzy-rqt-reconfigure/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-reconfigure/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-rqt-reconfigure/recipe.yaml b/recipes/ros-jazzy-rqt-reconfigure/recipe.yaml
new file mode 100644
index 00000000..269ee9ad
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-reconfigure/recipe.yaml
@@ -0,0 +1,97 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rqt-reconfigure
+  version: 1.6.2
+source:
+  git: https://github.com/ros2-gbp/rqt_reconfigure-release.git
+  tag: release/jazzy/rqt_reconfigure/1.6.2-3
+  target_directory: ros-jazzy-rqt-reconfigure/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-xmllint
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - pyyaml
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-python-qt-binding
+    - ros-jazzy-qt-gui-py-common
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rqt-console
+    - ros-jazzy-rqt-gui
+    - ros-jazzy-rqt-gui-py
+    - ros-jazzy-rqt-py-common
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rqt-service-caller/bld_ament_python.bat b/recipes/ros-jazzy-rqt-service-caller/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-service-caller/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rqt-service-caller/build_ament_python.sh b/recipes/ros-jazzy-rqt-service-caller/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-service-caller/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-rqt-service-caller/recipe.yaml b/recipes/ros-jazzy-rqt-service-caller/recipe.yaml
new file mode 100644
index 00000000..556f934b
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-service-caller/recipe.yaml
@@ -0,0 +1,88 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rqt-service-caller
+  version: 1.2.1
+source:
+  git: https://github.com/ros2-gbp/rqt_service_caller-release.git
+  tag: release/jazzy/rqt_service_caller/1.2.1-3
+  target_directory: ros-jazzy-rqt-service-caller/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rqt-gui
+    - ros-jazzy-rqt-gui-py
+    - ros-jazzy-rqt-py-common
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rqt-shell/bld_ament_python.bat b/recipes/ros-jazzy-rqt-shell/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-shell/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rqt-shell/build_ament_python.sh b/recipes/ros-jazzy-rqt-shell/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-shell/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-rqt-shell/recipe.yaml b/recipes/ros-jazzy-rqt-shell/recipe.yaml
new file mode 100644
index 00000000..d3156f7a
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-shell/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rqt-shell
+  version: 1.2.2
+source:
+  git: https://github.com/ros2-gbp/rqt_shell-release.git
+  tag: release/jazzy/rqt_shell/1.2.2-2
+  target_directory: ros-jazzy-rqt-shell/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - catkin_pkg
+    - python
+    - ros-jazzy-python-qt-binding
+    - ros-jazzy-qt-gui
+    - ros-jazzy-qt-gui-py-common
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rqt-gui
+    - ros-jazzy-rqt-gui-py
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rqt-srv/bld_ament_python.bat b/recipes/ros-jazzy-rqt-srv/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-srv/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rqt-srv/build_ament_python.sh b/recipes/ros-jazzy-rqt-srv/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-srv/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-rqt-srv/recipe.yaml b/recipes/ros-jazzy-rqt-srv/recipe.yaml
new file mode 100644
index 00000000..3de09ffb
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-srv/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rqt-srv
+  version: 1.2.2
+source:
+  git: https://github.com/ros2-gbp/rqt_srv-release.git
+  tag: release/jazzy/rqt_srv/1.2.2-3
+  target_directory: ros-jazzy-rqt-srv/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-xmllint
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rqt-gui
+    - ros-jazzy-rqt-gui-py
+    - ros-jazzy-rqt-msg
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rqt-topic/bld_ament_python.bat b/recipes/ros-jazzy-rqt-topic/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-topic/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rqt-topic/build_ament_python.sh b/recipes/ros-jazzy-rqt-topic/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-topic/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-rqt-topic/recipe.yaml b/recipes/ros-jazzy-rqt-topic/recipe.yaml
new file mode 100644
index 00000000..40124537
--- /dev/null
+++ b/recipes/ros-jazzy-rqt-topic/recipe.yaml
@@ -0,0 +1,93 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rqt-topic
+  version: 1.7.3
+source:
+  git: https://github.com/ros2-gbp/rqt_topic-release.git
+  tag: release/jazzy/rqt_topic/1.7.3-1
+  target_directory: ros-jazzy-rqt-topic/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-xmllint
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-python-qt-binding
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2topic
+    - ros-jazzy-rqt-gui
+    - ros-jazzy-rqt-gui-py
+    - ros-jazzy-rqt-py-common
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rti-connext-dds-cmake-module/bld_ament_cmake.bat b/recipes/ros-jazzy-rti-connext-dds-cmake-module/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rti-connext-dds-cmake-module/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rti-connext-dds-cmake-module/build_ament_cmake.sh b/recipes/ros-jazzy-rti-connext-dds-cmake-module/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rti-connext-dds-cmake-module/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rti-connext-dds-cmake-module/recipe.yaml b/recipes/ros-jazzy-rti-connext-dds-cmake-module/recipe.yaml
new file mode 100644
index 00000000..fd61a8af
--- /dev/null
+++ b/recipes/ros-jazzy-rti-connext-dds-cmake-module/recipe.yaml
@@ -0,0 +1,87 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rti-connext-dds-cmake-module
+  version: 0.22.0
+source:
+  git: https://github.com/ros2-gbp/rmw_connextdds-release.git
+  tag: release/jazzy/rti_connext_dds_cmake_module/0.22.0-2
+  target_directory: ros-jazzy-rti-connext-dds-cmake-module/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rviz-assimp-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-rviz-assimp-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-assimp-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rviz-assimp-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-rviz-assimp-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-assimp-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rviz-assimp-vendor/recipe.yaml b/recipes/ros-jazzy-rviz-assimp-vendor/recipe.yaml
new file mode 100644
index 00000000..09f07721
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-assimp-vendor/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rviz-assimp-vendor
+  version: 14.1.6
+source:
+  git: https://github.com/ros2-gbp/rviz-release.git
+  tag: release/jazzy/rviz_assimp_vendor/14.1.6-1
+  target_directory: ros-jazzy-rviz-assimp-vendor/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - assimp
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - assimp
+    - python
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-rviz-common/bld_ament_cmake.bat b/recipes/ros-jazzy-rviz-common/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-common/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rviz-common/build_ament_cmake.sh b/recipes/ros-jazzy-rviz-common/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-common/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rviz-common/recipe.yaml b/recipes/ros-jazzy-rviz-common/recipe.yaml
new file mode 100644
index 00000000..48c223e5
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-common/recipe.yaml
@@ -0,0 +1,135 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rviz-common
+  version: 14.1.6
+source:
+  git: https://github.com/ros2-gbp/rviz-release.git
+  tag: release/jazzy/rviz_common/14.1.6-1
+  target_directory: ros-jazzy-rviz-common/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - qt-main
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-cppcheck
+    - ros-jazzy-ament-cmake-cpplint
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-uncrustify
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-message-filters
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rclcpp
+    - ros-jazzy-resource-retriever
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rviz-ogre-vendor
+    - ros-jazzy-rviz-rendering
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros-jazzy-std-srvs
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-ros
+    - ros-jazzy-tinyxml2-vendor
+    - ros-jazzy-urdf
+    - ros-jazzy-yaml-cpp-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - python
+    - qt-main
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-message-filters
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rclcpp
+    - ros-jazzy-resource-retriever
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rviz-ogre-vendor
+    - ros-jazzy-rviz-rendering
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros-jazzy-std-srvs
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-ros
+    - ros-jazzy-tinyxml2-vendor
+    - ros-jazzy-urdf
+    - ros-jazzy-yaml-cpp-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-rviz-default-plugins/bld_ament_cmake.bat b/recipes/ros-jazzy-rviz-default-plugins/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-default-plugins/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rviz-default-plugins/build_ament_cmake.sh b/recipes/ros-jazzy-rviz-default-plugins/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-default-plugins/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rviz-default-plugins/recipe.yaml b/recipes/ros-jazzy-rviz-default-plugins/recipe.yaml
new file mode 100644
index 00000000..ff6b7184
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-default-plugins/recipe.yaml
@@ -0,0 +1,146 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rviz-default-plugins
+  version: 14.1.6
+source:
+  git: https://github.com/ros2-gbp/rviz-release.git
+  tag: release/jazzy/rviz_default_plugins/14.1.6-1
+  target_directory: ros-jazzy-rviz-default-plugins/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - qt-main
+    - ros-jazzy-ament-cmake-cppcheck
+    - ros-jazzy-ament-cmake-cpplint
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-cmake-uncrustify
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-image-transport
+    - ros-jazzy-interactive-markers
+    - ros-jazzy-laser-geometry
+    - ros-jazzy-map-msgs
+    - ros-jazzy-nav-msgs
+    - ros-jazzy-pluginlib
+    - ros-jazzy-point-cloud-transport
+    - ros-jazzy-rclcpp
+    - ros-jazzy-resource-retriever
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rviz-common
+    - ros-jazzy-rviz-ogre-vendor
+    - ros-jazzy-rviz-rendering
+    - ros-jazzy-rviz-rendering-tests
+    - ros-jazzy-rviz-visual-testing-framework
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-geometry-msgs
+    - ros-jazzy-tf2-ros
+    - ros-jazzy-urdf
+    - ros-jazzy-visualization-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - python
+    - qt-main
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-image-transport
+    - ros-jazzy-interactive-markers
+    - ros-jazzy-laser-geometry
+    - ros-jazzy-map-msgs
+    - ros-jazzy-nav-msgs
+    - ros-jazzy-pluginlib
+    - ros-jazzy-point-cloud-transport
+    - ros-jazzy-rclcpp
+    - ros-jazzy-resource-retriever
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rviz-common
+    - ros-jazzy-rviz-ogre-vendor
+    - ros-jazzy-rviz-rendering
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-geometry-msgs
+    - ros-jazzy-tf2-ros
+    - ros-jazzy-urdf
+    - ros-jazzy-visualization-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-rviz-ogre-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-rviz-ogre-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-ogre-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rviz-ogre-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-rviz-ogre-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-ogre-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rviz-ogre-vendor/patch/ros-jazzy-rviz-ogre-vendor.patch b/recipes/ros-jazzy-rviz-ogre-vendor/patch/ros-jazzy-rviz-ogre-vendor.patch
new file mode 100644
index 00000000..7bf3031b
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-ogre-vendor/patch/ros-jazzy-rviz-ogre-vendor.patch
@@ -0,0 +1,61 @@
+diff --git a/rviz_ogre_vendor/CMakeLists.txt b/rviz_ogre_vendor/CMakeLists.txt
+index 8d23a299a..5154e4477 100644
+--- a/rviz_ogre_vendor/CMakeLists.txt
++++ b/rviz_ogre_vendor/CMakeLists.txt
+@@ -76,7 +76,7 @@ endif()
+ 
+ if(APPLE)
+   list(APPEND OGRE_CMAKE_ARGS -DOGRE_ENABLE_PRECOMPILED_HEADERS:BOOL=OFF)
+-  list(APPEND OGRE_CMAKE_ARGS -DCMAKE_OSX_ARCHITECTURES=arm64;x86_64)
++  # list(APPEND OGRE_CMAKE_ARGS -DCMAKE_OSX_ARCHITECTURES=arm64;x86_64)
+ endif()
+ 
+ ament_vendor(ogre_vendor
+diff --git a/patches/0005-fix-macos-arm64.patch b/patches/0005-fix-macos-arm64.patch
+new file mode 100644
+index 000000000..9494cc9ae
+--- /dev/null
++++ b/patches/0005-fix-macos-arm64.patch
+@@ -0,0 +1,19 @@
++diff --git a/CMakeLists.txt b/CMakeLists.txt
++index f4d8fd4..ffae9c8 100644
++--- a/CMakeLists.txt
+++++ b/CMakeLists.txt
++@@ -270,14 +270,6 @@ elseif(EMSCRIPTEN)
++   set(OGRE_CONFIG_THREADS "0" CACHE STRING "Threading is unstable on Emscripten" FORCE)
++ elseif (APPLE AND NOT APPLE_IOS)
++ 
++-  set(XCODE_ATTRIBUTE_SDKROOT macosx)
++-  if(CMAKE_GENERATOR STREQUAL "Unix Makefiles")
++-    execute_process(COMMAND xcodebuild -version -sdk "${XCODE_ATTRIBUTE_SDKROOT}" Path | head -n 1 OUTPUT_VARIABLE CMAKE_OSX_SYSROOT)
++-    string(REGEX REPLACE "(\r?\n)+$" "" CMAKE_OSX_SYSROOT "${CMAKE_OSX_SYSROOT}")
++-  else()
++-    set(CMAKE_OSX_SYSROOT macosx)
++-  endif()
++-
++   # Make sure that the OpenGL render system is selected for non-iOS Apple builds
++   set(OGRE_BUILD_RENDERSYSTEM_GLES2 FALSE)
++ endif ()
+diff --git a/patches/0006-fix-char16.patch b/patches/0006-fix-char16.patch
+new file mode 100644
+index 000000000..dfc080bb9
+--- /dev/null
++++ b/patches/0006-fix-char16.patch
+@@ -0,0 +1,17 @@
++diff --git a/Components/Overlay/include/OgreUTFString.h b/Components/Overlay/include/OgreUTFString.h
++index 4b29f9d..bb55630 100644
++--- a/Components/Overlay/include/OgreUTFString.h
+++++ b/Components/Overlay/include/OgreUTFString.h
++@@ -183,10 +183,10 @@ namespace Ogre {
++         static const size_type npos = static_cast<size_type>(~0);
++ 
++         //! a single 32-bit Unicode character
++-        typedef uint32 unicode_char;
+++        typedef char32_t unicode_char;
++ 
++         //! a single UTF-16 code point
++-        typedef uint16 code_point;
+++        typedef char16_t code_point;
++ 
++         //! value type typedef for use in iterators
++         typedef code_point value_type;
diff --git a/recipes/ros-jazzy-rviz-ogre-vendor/recipe.yaml b/recipes/ros-jazzy-rviz-ogre-vendor/recipe.yaml
new file mode 100644
index 00000000..68d24e9c
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-ogre-vendor/recipe.yaml
@@ -0,0 +1,119 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rviz-ogre-vendor
+  version: 14.1.6
+source:
+  git: https://github.com/ros2-gbp/rviz-release.git
+  tag: release/jazzy/rviz_ogre_vendor/14.1.6-1
+  target_directory: ros-jazzy-rviz-ogre-vendor/src/work
+  patches:
+    - patch/ros-jazzy-rviz-ogre-vendor.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+    - vcstool
+    - patch
+  host:
+    - ${{ 'libglu' if linux }}
+    - assimp
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - freeimage
+    - freetype
+    - numpy
+    - pip
+    - pugixml
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - xorg-libx11
+    - xorg-libxaw
+    - xorg-libxrandr
+    - xorg-xorgproto
+    - zlib
+    - zziplib
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - assimp
+    - freetype
+    - python
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - xorg-libx11
+    - xorg-libxaw
+    - xorg-libxrandr
+    - xorg-xorgproto
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-rviz-rendering-tests/bld_ament_cmake.bat b/recipes/ros-jazzy-rviz-rendering-tests/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-rendering-tests/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rviz-rendering-tests/build_ament_cmake.sh b/recipes/ros-jazzy-rviz-rendering-tests/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-rendering-tests/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rviz-rendering-tests/recipe.yaml b/recipes/ros-jazzy-rviz-rendering-tests/recipe.yaml
new file mode 100644
index 00000000..d7908c89
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-rendering-tests/recipe.yaml
@@ -0,0 +1,109 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rviz-rendering-tests
+  version: 14.1.6
+source:
+  git: https://github.com/ros2-gbp/rviz-release.git
+  tag: release/jazzy/rviz_rendering_tests/14.1.6-1
+  target_directory: ros-jazzy-rviz-rendering-tests/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - qt-main
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-cppcheck
+    - ros-jazzy-ament-cmake-cpplint
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-uncrustify
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-resource-retriever
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rviz-rendering
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - python
+    - ros-jazzy-resource-retriever
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rviz-rendering
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-rviz-rendering/bld_ament_cmake.bat b/recipes/ros-jazzy-rviz-rendering/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-rendering/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rviz-rendering/build_ament_cmake.sh b/recipes/ros-jazzy-rviz-rendering/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-rendering/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rviz-rendering/recipe.yaml b/recipes/ros-jazzy-rviz-rendering/recipe.yaml
new file mode 100644
index 00000000..fdae0f76
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-rendering/recipe.yaml
@@ -0,0 +1,118 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rviz-rendering
+  version: 14.1.6
+source:
+  git: https://github.com/ros2-gbp/rviz-release.git
+  tag: release/jazzy/rviz_rendering/14.1.6-1
+  target_directory: ros-jazzy-rviz-rendering/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - eigen
+    - glew
+    - numpy
+    - pip
+    - python
+    - qt-main
+    - ros-jazzy-ament-cmake-cppcheck
+    - ros-jazzy-ament-cmake-cpplint
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-cmake-uncrustify
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-eigen3-cmake-module
+    - ros-jazzy-resource-retriever
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rviz-assimp-vendor
+    - ros-jazzy-rviz-ogre-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - eigen
+    - python
+    - qt-main
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-eigen3-cmake-module
+    - ros-jazzy-resource-retriever
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rviz-assimp-vendor
+    - ros-jazzy-rviz-ogre-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-rviz-visual-testing-framework/bld_ament_cmake.bat b/recipes/ros-jazzy-rviz-visual-testing-framework/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-visual-testing-framework/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rviz-visual-testing-framework/build_ament_cmake.sh b/recipes/ros-jazzy-rviz-visual-testing-framework/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-visual-testing-framework/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rviz-visual-testing-framework/recipe.yaml b/recipes/ros-jazzy-rviz-visual-testing-framework/recipe.yaml
new file mode 100644
index 00000000..41ac3593
--- /dev/null
+++ b/recipes/ros-jazzy-rviz-visual-testing-framework/recipe.yaml
@@ -0,0 +1,123 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rviz-visual-testing-framework
+  version: 14.1.6
+source:
+  git: https://github.com/ros2-gbp/rviz-release.git
+  tag: release/jazzy/rviz_visual_testing_framework/14.1.6-1
+  target_directory: ros-jazzy-rviz-visual-testing-framework/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - qt-main
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-cppcheck
+    - ros-jazzy-ament-cmake-cpplint
+    - ros-jazzy-ament-cmake-gmock
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-uncrustify
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rviz-common
+    - ros-jazzy-rviz-ogre-vendor
+    - ros-jazzy-rviz-rendering
+    - ros-jazzy-std-msgs
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-ros
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - python
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rviz-common
+    - ros-jazzy-rviz-ogre-vendor
+    - ros-jazzy-rviz-rendering
+    - ros-jazzy-std-msgs
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-ros
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-rviz2/bld_ament_cmake.bat b/recipes/ros-jazzy-rviz2/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-rviz2/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-rviz2/build_ament_cmake.sh b/recipes/ros-jazzy-rviz2/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-rviz2/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-rviz2/recipe.yaml b/recipes/ros-jazzy-rviz2/recipe.yaml
new file mode 100644
index 00000000..9e705dc7
--- /dev/null
+++ b/recipes/ros-jazzy-rviz2/recipe.yaml
@@ -0,0 +1,112 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-rviz2
+  version: 14.1.6
+source:
+  git: https://github.com/ros2-gbp/rviz-release.git
+  tag: release/jazzy/rviz2/14.1.6-1
+  target_directory: ros-jazzy-rviz2/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - pyyaml
+    - qt-main
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-cppcheck
+    - ros-jazzy-ament-cmake-cpplint
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-cmake-uncrustify
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rviz-common
+    - ros-jazzy-rviz-ogre-vendor
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rviz-common
+    - ros-jazzy-rviz-default-plugins
+    - ros-jazzy-rviz-ogre-vendor
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-sdformat-urdf/bld_ament_cmake.bat b/recipes/ros-jazzy-sdformat-urdf/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-sdformat-urdf/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-sdformat-urdf/build_ament_cmake.sh b/recipes/ros-jazzy-sdformat-urdf/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-sdformat-urdf/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-sdformat-urdf/recipe.yaml b/recipes/ros-jazzy-sdformat-urdf/recipe.yaml
new file mode 100644
index 00000000..a939984c
--- /dev/null
+++ b/recipes/ros-jazzy-sdformat-urdf/recipe.yaml
@@ -0,0 +1,103 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-sdformat-urdf
+  version: 1.0.2
+source:
+  git: https://github.com/ros2-gbp/sdformat_urdf-release.git
+  tag: release/jazzy/sdformat_urdf/1.0.2-1
+  target_directory: ros-jazzy-sdformat-urdf/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sdformat-test-files
+    - ros-jazzy-sdformat-vendor
+    - ros-jazzy-tinyxml2-vendor
+    - ros-jazzy-urdf
+    - ros-jazzy-urdf-parser-plugin
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - urdfdom_headers
+  run:
+    - python
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sdformat-vendor
+    - ros-jazzy-tinyxml2-vendor
+    - ros-jazzy-urdf
+    - ros-jazzy-urdf-parser-plugin
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - urdfdom_headers
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-sdformat-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-sdformat-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-sdformat-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-sdformat-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-sdformat-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-sdformat-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-sdformat-vendor/patch/ros-jazzy-sdformat-vendor.patch b/recipes/ros-jazzy-sdformat-vendor/patch/ros-jazzy-sdformat-vendor.patch
new file mode 100644
index 00000000..afae280c
--- /dev/null
+++ b/recipes/ros-jazzy-sdformat-vendor/patch/ros-jazzy-sdformat-vendor.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 723d6a6..08a726c 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -38,7 +38,7 @@ if(NOT $ENV{GZ_RELAX_VERSION_MATCH} STREQUAL "")
+   set(VERSION_MATCH "")
+ endif()
+ 
+-find_package(${LIB_NAME_FULL} ${VERSION_MATCH} ${LIB_VER} COMPONENTS all QUIET)
++find_package(${LIB_NAME_FULL} COMPONENTS all QUIET)
+ 
+ ament_vendor(${LIB_NAME_UNDERSCORE}_vendor
+   SATISFIED ${${LIB_NAME_FULL}_FOUND}
diff --git a/recipes/ros-jazzy-sdformat-vendor/recipe.yaml b/recipes/ros-jazzy-sdformat-vendor/recipe.yaml
new file mode 100644
index 00000000..6b4d79f9
--- /dev/null
+++ b/recipes/ros-jazzy-sdformat-vendor/recipe.yaml
@@ -0,0 +1,113 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-sdformat-vendor
+  version: 0.0.8
+source:
+  git: https://github.com/ros2-gbp/sdformat_vendor-release.git
+  tag: release/jazzy/sdformat_vendor/0.0.8-1
+  target_directory: ros-jazzy-sdformat-vendor/src/work
+  patches:
+    - patch/ros-jazzy-sdformat-vendor.patch
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+    - if: build_platform != target_platform
+      then:
+        - pybind11
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - libxml2
+    - numpy
+    - pip
+    - psutil
+    - pybind11
+    - pytest
+    - python
+    - ros-jazzy-ament-cmake-copyright
+    - ros-jazzy-ament-cmake-core
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-test
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-tools-vendor
+    - ros-jazzy-gz-utils-vendor
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-urdfdom
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - sdformat14
+    - tinyxml2
+  run:
+    - pybind11
+    - python
+    - ros-jazzy-gz-cmake-vendor
+    - ros-jazzy-gz-math-vendor
+    - ros-jazzy-gz-tools-vendor
+    - ros-jazzy-gz-utils-vendor
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-urdfdom
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - sdformat14
+    - tinyxml2
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-sensor-msgs-py/bld_ament_python.bat b/recipes/ros-jazzy-sensor-msgs-py/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-sensor-msgs-py/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-sensor-msgs-py/build_ament_python.sh b/recipes/ros-jazzy-sensor-msgs-py/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-sensor-msgs-py/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-sensor-msgs-py/recipe.yaml b/recipes/ros-jazzy-sensor-msgs-py/recipe.yaml
new file mode 100644
index 00000000..dc5d0525
--- /dev/null
+++ b/recipes/ros-jazzy-sensor-msgs-py/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-sensor-msgs-py
+  version: 5.3.5
+source:
+  git: https://github.com/ros2-gbp/common_interfaces-release.git
+  tag: release/jazzy/sensor_msgs_py/5.3.5-1
+  target_directory: ros-jazzy-sensor-msgs-py/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - numpy
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-sensor-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-sensor-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-sensor-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-sensor-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-sensor-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-sensor-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-sensor-msgs/recipe.yaml b/recipes/ros-jazzy-sensor-msgs/recipe.yaml
new file mode 100644
index 00000000..79bdff76
--- /dev/null
+++ b/recipes/ros-jazzy-sensor-msgs/recipe.yaml
@@ -0,0 +1,96 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-sensor-msgs
+  version: 5.3.5
+source:
+  git: https://github.com/ros2-gbp/common_interfaces-release.git
+  tag: release/jazzy/sensor_msgs/5.3.5-1
+  target_directory: ros-jazzy-sensor-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-cmake
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-service-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-service-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-service-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-service-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-service-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-service-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-service-msgs/recipe.yaml b/recipes/ros-jazzy-service-msgs/recipe.yaml
new file mode 100644
index 00000000..ce0aa2b7
--- /dev/null
+++ b/recipes/ros-jazzy-service-msgs/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-service-msgs
+  version: 2.0.2
+source:
+  git: https://github.com/ros2-gbp/rcl_interfaces-release.git
+  tag: release/jazzy/service_msgs/2.0.2-2
+  target_directory: ros-jazzy-service-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-core-generators
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-core-runtime
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-shape-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-shape-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-shape-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-shape-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-shape-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-shape-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-shape-msgs/recipe.yaml b/recipes/ros-jazzy-shape-msgs/recipe.yaml
new file mode 100644
index 00000000..96ca952c
--- /dev/null
+++ b/recipes/ros-jazzy-shape-msgs/recipe.yaml
@@ -0,0 +1,89 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-shape-msgs
+  version: 5.3.5
+source:
+  git: https://github.com/ros2-gbp/common_interfaces-release.git
+  tag: release/jazzy/shape_msgs/5.3.5-1
+  target_directory: ros-jazzy-shape-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-spdlog-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-spdlog-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-spdlog-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-spdlog-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-spdlog-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-spdlog-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-spdlog-vendor/recipe.yaml b/recipes/ros-jazzy-spdlog-vendor/recipe.yaml
new file mode 100644
index 00000000..28a97849
--- /dev/null
+++ b/recipes/ros-jazzy-spdlog-vendor/recipe.yaml
@@ -0,0 +1,89 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-spdlog-vendor
+  version: 1.6.1
+source:
+  git: https://github.com/ros2-gbp/spdlog_vendor-release.git
+  tag: release/jazzy/spdlog_vendor/1.6.1-1
+  target_directory: ros-jazzy-spdlog-vendor/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-vendor-package
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - spdlog
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - spdlog
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-sros2-cmake/bld_ament_cmake.bat b/recipes/ros-jazzy-sros2-cmake/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-sros2-cmake/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-sros2-cmake/build_ament_cmake.sh b/recipes/ros-jazzy-sros2-cmake/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-sros2-cmake/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-sros2-cmake/recipe.yaml b/recipes/ros-jazzy-sros2-cmake/recipe.yaml
new file mode 100644
index 00000000..99ee7ba8
--- /dev/null
+++ b/recipes/ros-jazzy-sros2-cmake/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-sros2-cmake
+  version: 0.13.2
+source:
+  git: https://github.com/ros2-gbp/sros2-release.git
+  tag: release/jazzy/sros2_cmake/0.13.2-1
+  target_directory: ros-jazzy-sros2-cmake/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-test
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli
+    - ros-jazzy-sros2
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli
+    - ros-jazzy-sros2
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-sros2/bld_ament_python.bat b/recipes/ros-jazzy-sros2/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-sros2/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-sros2/build_ament_python.sh b/recipes/ros-jazzy-sros2/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-sros2/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-sros2/recipe.yaml b/recipes/ros-jazzy-sros2/recipe.yaml
new file mode 100644
index 00000000..3d32f32f
--- /dev/null
+++ b/recipes/ros-jazzy-sros2/recipe.yaml
@@ -0,0 +1,98 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-sros2
+  version: 0.13.2
+source:
+  git: https://github.com/ros2-gbp/sros2-release.git
+  tag: release/jazzy/sros2/0.13.2-1
+  target_directory: ros-jazzy-sros2/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-mypy
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-testing
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-test-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - argcomplete
+    - cryptography
+    - importlib_resources
+    - lxml
+    - python
+    - ros-jazzy-ament-index-python
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-ros2cli
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-statistics-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-statistics-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-statistics-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-statistics-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-statistics-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-statistics-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-statistics-msgs/recipe.yaml b/recipes/ros-jazzy-statistics-msgs/recipe.yaml
new file mode 100644
index 00000000..cf788666
--- /dev/null
+++ b/recipes/ros-jazzy-statistics-msgs/recipe.yaml
@@ -0,0 +1,89 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-statistics-msgs
+  version: 2.0.2
+source:
+  git: https://github.com/ros2-gbp/rcl_interfaces-release.git
+  tag: release/jazzy/statistics_msgs/2.0.2-2
+  target_directory: ros-jazzy-statistics-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-std-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-std-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-std-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-std-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-std-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-std-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-std-msgs/recipe.yaml b/recipes/ros-jazzy-std-msgs/recipe.yaml
new file mode 100644
index 00000000..7694990b
--- /dev/null
+++ b/recipes/ros-jazzy-std-msgs/recipe.yaml
@@ -0,0 +1,89 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-std-msgs
+  version: 5.3.5
+source:
+  git: https://github.com/ros2-gbp/common_interfaces-release.git
+  tag: release/jazzy/std_msgs/5.3.5-1
+  target_directory: ros-jazzy-std-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-std-srvs/bld_ament_cmake.bat b/recipes/ros-jazzy-std-srvs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-std-srvs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-std-srvs/build_ament_cmake.sh b/recipes/ros-jazzy-std-srvs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-std-srvs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-std-srvs/recipe.yaml b/recipes/ros-jazzy-std-srvs/recipe.yaml
new file mode 100644
index 00000000..d3bd123a
--- /dev/null
+++ b/recipes/ros-jazzy-std-srvs/recipe.yaml
@@ -0,0 +1,87 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-std-srvs
+  version: 5.3.5
+source:
+  git: https://github.com/ros2-gbp/common_interfaces-release.git
+  tag: release/jazzy/std_srvs/5.3.5-1
+  target_directory: ros-jazzy-std-srvs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-stereo-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-stereo-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-stereo-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-stereo-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-stereo-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-stereo-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-stereo-msgs/recipe.yaml b/recipes/ros-jazzy-stereo-msgs/recipe.yaml
new file mode 100644
index 00000000..c6f78758
--- /dev/null
+++ b/recipes/ros-jazzy-stereo-msgs/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-stereo-msgs
+  version: 5.3.5
+source:
+  git: https://github.com/ros2-gbp/common_interfaces-release.git
+  tag: release/jazzy/stereo_msgs/5.3.5-1
+  target_directory: ros-jazzy-stereo-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-tango-icons-vendor/bld_ament_cmake.bat b/recipes/ros-jazzy-tango-icons-vendor/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-tango-icons-vendor/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-tango-icons-vendor/build_ament_cmake.sh b/recipes/ros-jazzy-tango-icons-vendor/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-tango-icons-vendor/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-tango-icons-vendor/recipe.yaml b/recipes/ros-jazzy-tango-icons-vendor/recipe.yaml
new file mode 100644
index 00000000..af77ce1b
--- /dev/null
+++ b/recipes/ros-jazzy-tango-icons-vendor/recipe.yaml
@@ -0,0 +1,86 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-tango-icons-vendor
+  version: 0.3.0
+source:
+  git: https://github.com/ros2-gbp/tango_icons_vendor-release.git
+  tag: release/jazzy/tango_icons_vendor/0.3.0-3
+  target_directory: ros-jazzy-tango-icons-vendor/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-teleop-twist-joy/bld_ament_cmake.bat b/recipes/ros-jazzy-teleop-twist-joy/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-teleop-twist-joy/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-teleop-twist-joy/build_ament_cmake.sh b/recipes/ros-jazzy-teleop-twist-joy/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-teleop-twist-joy/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-teleop-twist-joy/recipe.yaml b/recipes/ros-jazzy-teleop-twist-joy/recipe.yaml
new file mode 100644
index 00000000..aa615497
--- /dev/null
+++ b/recipes/ros-jazzy-teleop-twist-joy/recipe.yaml
@@ -0,0 +1,98 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-teleop-twist-joy
+  version: 2.6.2
+source:
+  git: https://github.com/ros2-gbp/teleop_twist_joy-release.git
+  tag: release/jazzy/teleop_twist_joy/2.6.2-1
+  target_directory: ros-jazzy-teleop-twist-joy/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-launch-ros
+    - ros-jazzy-launch-testing-ament-cmake
+    - ros-jazzy-launch-testing-ros
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-joy
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-teleop-twist-keyboard/bld_ament_python.bat b/recipes/ros-jazzy-teleop-twist-keyboard/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-teleop-twist-keyboard/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-teleop-twist-keyboard/build_ament_python.sh b/recipes/ros-jazzy-teleop-twist-keyboard/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-teleop-twist-keyboard/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-teleop-twist-keyboard/recipe.yaml b/recipes/ros-jazzy-teleop-twist-keyboard/recipe.yaml
new file mode 100644
index 00000000..e8fdb0d1
--- /dev/null
+++ b/recipes/ros-jazzy-teleop-twist-keyboard/recipe.yaml
@@ -0,0 +1,89 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-teleop-twist-keyboard
+  version: 2.4.0
+source:
+  git: https://github.com/ros2-gbp/teleop_twist_keyboard-release.git
+  tag: release/jazzy/teleop_twist_keyboard/2.4.0-2
+  target_directory: ros-jazzy-teleop-twist-keyboard/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-test-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-test-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-test-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-test-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-test-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-test-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-test-msgs/recipe.yaml b/recipes/ros-jazzy-test-msgs/recipe.yaml
new file mode 100644
index 00000000..f39a0932
--- /dev/null
+++ b/recipes/ros-jazzy-test-msgs/recipe.yaml
@@ -0,0 +1,92 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-test-msgs
+  version: 2.0.2
+source:
+  git: https://github.com/ros2-gbp/rcl_interfaces-release.git
+  tag: release/jazzy/test_msgs/2.0.2-2
+  target_directory: ros-jazzy-test-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-test-interface-files
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-tf2-bullet/bld_ament_cmake.bat b/recipes/ros-jazzy-tf2-bullet/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-bullet/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-tf2-bullet/build_ament_cmake.sh b/recipes/ros-jazzy-tf2-bullet/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-bullet/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-tf2-bullet/recipe.yaml b/recipes/ros-jazzy-tf2-bullet/recipe.yaml
new file mode 100644
index 00000000..b5bd3aaa
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-bullet/recipe.yaml
@@ -0,0 +1,95 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-tf2-bullet
+  version: 0.36.7
+source:
+  git: https://github.com/ros2-gbp/geometry2-release.git
+  tag: release/jazzy/tf2_bullet/0.36.7-1
+  target_directory: ros-jazzy-tf2-bullet/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - bullet
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-ros
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - bullet
+    - python
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-ros
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-tf2-eigen-kdl/bld_ament_cmake.bat b/recipes/ros-jazzy-tf2-eigen-kdl/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-eigen-kdl/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-tf2-eigen-kdl/build_ament_cmake.sh b/recipes/ros-jazzy-tf2-eigen-kdl/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-eigen-kdl/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-tf2-eigen-kdl/recipe.yaml b/recipes/ros-jazzy-tf2-eigen-kdl/recipe.yaml
new file mode 100644
index 00000000..c4cf8072
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-eigen-kdl/recipe.yaml
@@ -0,0 +1,93 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-tf2-eigen-kdl
+  version: 0.36.7
+source:
+  git: https://github.com/ros2-gbp/geometry2-release.git
+  tag: release/jazzy/tf2_eigen_kdl/0.36.7-1
+  target_directory: ros-jazzy-tf2-eigen-kdl/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - eigen
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-orocos-kdl-vendor
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tf2
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - eigen
+    - python
+    - ros-jazzy-orocos-kdl-vendor
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tf2
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-tf2-eigen/bld_ament_cmake.bat b/recipes/ros-jazzy-tf2-eigen/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-eigen/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-tf2-eigen/build_ament_cmake.sh b/recipes/ros-jazzy-tf2-eigen/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-eigen/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-tf2-eigen/recipe.yaml b/recipes/ros-jazzy-tf2-eigen/recipe.yaml
new file mode 100644
index 00000000..f3224aad
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-eigen/recipe.yaml
@@ -0,0 +1,95 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-tf2-eigen
+  version: 0.36.7
+source:
+  git: https://github.com/ros2-gbp/geometry2-release.git
+  tag: release/jazzy/tf2_eigen/0.36.7-1
+  target_directory: ros-jazzy-tf2-eigen/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - eigen
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-ros
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - eigen
+    - python
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-ros
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-tf2-geometry-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-tf2-geometry-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-geometry-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-tf2-geometry-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-tf2-geometry-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-geometry-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-tf2-geometry-msgs/recipe.yaml b/recipes/ros-jazzy-tf2-geometry-msgs/recipe.yaml
new file mode 100644
index 00000000..8da23e20
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-geometry-msgs/recipe.yaml
@@ -0,0 +1,100 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-tf2-geometry-msgs
+  version: 0.36.7
+source:
+  git: https://github.com/ros2-gbp/geometry2-release.git
+  tag: release/jazzy/tf2_geometry_msgs/0.36.7-1
+  target_directory: ros-jazzy-tf2-geometry-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-orocos-kdl-vendor
+    - ros-jazzy-python-cmake-module
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-ros
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - numpy
+    - python
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-orocos-kdl-vendor
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-ros
+    - ros-jazzy-tf2-ros-py
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-tf2-kdl/bld_ament_cmake.bat b/recipes/ros-jazzy-tf2-kdl/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-kdl/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-tf2-kdl/build_ament_cmake.sh b/recipes/ros-jazzy-tf2-kdl/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-kdl/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-tf2-kdl/recipe.yaml b/recipes/ros-jazzy-tf2-kdl/recipe.yaml
new file mode 100644
index 00000000..ede57954
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-kdl/recipe.yaml
@@ -0,0 +1,98 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-tf2-kdl
+  version: 0.36.7
+source:
+  git: https://github.com/ros2-gbp/geometry2-release.git
+  tag: release/jazzy/tf2_kdl/0.36.7-1
+  target_directory: ros-jazzy-tf2-kdl/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-orocos-kdl-vendor
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-msgs
+    - ros-jazzy-tf2-ros
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-orocos-kdl-vendor
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-ros
+    - ros-jazzy-tf2-ros-py
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-tf2-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-tf2-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-tf2-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-tf2-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-tf2-msgs/recipe.yaml b/recipes/ros-jazzy-tf2-msgs/recipe.yaml
new file mode 100644
index 00000000..516eff48
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-msgs/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-tf2-msgs
+  version: 0.36.7
+source:
+  git: https://github.com/ros2-gbp/geometry2-release.git
+  tag: release/jazzy/tf2_msgs/0.36.7-1
+  target_directory: ros-jazzy-tf2-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-tf2-py/bld_ament_cmake.bat b/recipes/ros-jazzy-tf2-py/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-py/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-tf2-py/build_ament_cmake.sh b/recipes/ros-jazzy-tf2-py/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-py/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-tf2-py/recipe.yaml b/recipes/ros-jazzy-tf2-py/recipe.yaml
new file mode 100644
index 00000000..f579496f
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-py/recipe.yaml
@@ -0,0 +1,95 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-tf2-py
+  version: 0.36.7
+source:
+  git: https://github.com/ros2-gbp/geometry2-release.git
+  tag: release/jazzy/tf2_py/0.36.7-1
+  target_directory: ros-jazzy-tf2-py/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-python-cmake-module
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tf2
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rpyutils
+    - ros-jazzy-tf2
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-tf2-ros-py/bld_ament_python.bat b/recipes/ros-jazzy-tf2-ros-py/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-ros-py/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-tf2-ros-py/build_ament_python.sh b/recipes/ros-jazzy-tf2-ros-py/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-ros-py/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-tf2-ros-py/recipe.yaml b/recipes/ros-jazzy-tf2-ros-py/recipe.yaml
new file mode 100644
index 00000000..3730c562
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-ros-py/recipe.yaml
@@ -0,0 +1,93 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-tf2-ros-py
+  version: 0.36.7
+source:
+  git: https://github.com/ros2-gbp/geometry2-release.git
+  tag: release/jazzy/tf2_ros_py/0.36.7-1
+  target_directory: ros-jazzy-tf2-ros-py/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros-jazzy-tf2-msgs
+    - ros-jazzy-tf2-py
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-tf2-ros/bld_ament_cmake.bat b/recipes/ros-jazzy-tf2-ros/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-ros/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-tf2-ros/build_ament_cmake.sh b/recipes/ros-jazzy-tf2-ros/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-ros/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-tf2-ros/recipe.yaml b/recipes/ros-jazzy-tf2-ros/recipe.yaml
new file mode 100644
index 00000000..5738340a
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-ros/recipe.yaml
@@ -0,0 +1,106 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-tf2-ros
+  version: 0.36.7
+source:
+  git: https://github.com/ros2-gbp/geometry2-release.git
+  tag: release/jazzy/tf2_ros/0.36.7-1
+  target_directory: ros-jazzy-tf2-ros/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-message-filters
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-action
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosgraph-msgs
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-message-filters
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-action
+    - ros-jazzy-rclcpp-components
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-tf2-sensor-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-tf2-sensor-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-sensor-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-tf2-sensor-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-tf2-sensor-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-sensor-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-tf2-sensor-msgs/recipe.yaml b/recipes/ros-jazzy-tf2-sensor-msgs/recipe.yaml
new file mode 100644
index 00000000..5cd1cc91
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-sensor-msgs/recipe.yaml
@@ -0,0 +1,106 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-tf2-sensor-msgs
+  version: 0.36.7
+source:
+  git: https://github.com/ros2-gbp/geometry2-release.git
+  tag: release/jazzy/tf2_sensor_msgs/0.36.7-1
+  target_directory: ros-jazzy-tf2-sensor-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - eigen
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-pytest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-eigen3-cmake-module
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-python-cmake-module
+    - ros-jazzy-rclcpp
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-ros
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - eigen
+    - numpy
+    - python
+    - ros-jazzy-eigen3-cmake-module
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-sensor-msgs-py
+    - ros-jazzy-std-msgs
+    - ros-jazzy-tf2
+    - ros-jazzy-tf2-ros
+    - ros-jazzy-tf2-ros-py
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-tf2-tools/bld_ament_python.bat b/recipes/ros-jazzy-tf2-tools/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-tools/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-tf2-tools/build_ament_python.sh b/recipes/ros-jazzy-tf2-tools/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-tools/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-tf2-tools/recipe.yaml b/recipes/ros-jazzy-tf2-tools/recipe.yaml
new file mode 100644
index 00000000..73b7db6c
--- /dev/null
+++ b/recipes/ros-jazzy-tf2-tools/recipe.yaml
@@ -0,0 +1,94 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-tf2-tools
+  version: 0.36.7
+source:
+  git: https://github.com/ros2-gbp/geometry2-release.git
+  tag: release/jazzy/tf2_tools/0.36.7-1
+  target_directory: ros-jazzy-tf2-tools/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-copyright
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - graphviz
+    - python
+    - pyyaml
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tf2-msgs
+    - ros-jazzy-tf2-py
+    - ros-jazzy-tf2-ros-py
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-tf2/bld_ament_cmake.bat b/recipes/ros-jazzy-tf2/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-tf2/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-tf2/build_ament_cmake.sh b/recipes/ros-jazzy-tf2/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-tf2/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-tf2/recipe.yaml b/recipes/ros-jazzy-tf2/recipe.yaml
new file mode 100644
index 00000000..db473ed9
--- /dev/null
+++ b/recipes/ros-jazzy-tf2/recipe.yaml
@@ -0,0 +1,101 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-tf2
+  version: 0.36.7
+source:
+  git: https://github.com/ros2-gbp/geometry2-release.git
+  tag: release/jazzy/tf2/0.36.7-1
+  target_directory: ros-jazzy-tf2/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-copyright
+    - ros-jazzy-ament-cmake-cppcheck
+    - ros-jazzy-ament-cmake-cpplint
+    - ros-jazzy-ament-cmake-google-benchmark
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-lint-cmake
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-cmake-uncrustify
+    - ros-jazzy-ament-cmake-xmllint
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-runtime-cpp
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-theora-image-transport/bld_ament_cmake.bat b/recipes/ros-jazzy-theora-image-transport/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-theora-image-transport/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-theora-image-transport/build_ament_cmake.sh b/recipes/ros-jazzy-theora-image-transport/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-theora-image-transport/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-theora-image-transport/recipe.yaml b/recipes/ros-jazzy-theora-image-transport/recipe.yaml
new file mode 100644
index 00000000..1b2725da
--- /dev/null
+++ b/recipes/ros-jazzy-theora-image-transport/recipe.yaml
@@ -0,0 +1,122 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-theora-image-transport
+  version: 4.0.3
+source:
+  git: https://github.com/ros2-gbp/image_transport_plugins-release.git
+  tag: release/jazzy/theora_image_transport/4.0.3-1
+  target_directory: ros-jazzy-theora-image-transport/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - libogg
+    - libopencv
+    - libtheora
+    - numpy
+    - pip
+    - pkg-config
+    - py-opencv
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-cv-bridge
+    - ros-jazzy-image-transport
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - libogg
+    - libopencv
+    - libtheora
+    - py-opencv
+    - python
+    - ros-jazzy-cv-bridge
+    - ros-jazzy-image-transport
+    - ros-jazzy-pluginlib
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rcutils
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-topic-monitor/bld_ament_python.bat b/recipes/ros-jazzy-topic-monitor/bld_ament_python.bat
new file mode 100755
index 00000000..902db09b
--- /dev/null
+++ b/recipes/ros-jazzy-topic-monitor/bld_ament_python.bat
@@ -0,0 +1,25 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+pushd %SRC_DIR%\%PKG_NAME%\src\work
+set "PKG_NAME_SHORT=%PKG_NAME:*ros-jazzy-=%"
+set "PKG_NAME_SHORT=%PKG_NAME_SHORT:-=_%"
+
+:: If there is a setup.cfg that contains install-scripts then use pip to install
+findstr install[-_]scripts setup.cfg
+if "%errorlevel%" == "0" (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+         --install-scripts=%LIBRARY_PREFIX%\lib\%PKG_NAME_SHORT%
+) else (
+    %PYTHON% setup.py install --single-version-externally-managed --record=files.txt ^
+        --prefix=%LIBRARY_PREFIX% ^
+        --install-lib=%SP_DIR% ^
+        --install-scripts=%LIBRARY_PREFIX%\bin
+)
+
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-topic-monitor/build_ament_python.sh b/recipes/ros-jazzy-topic-monitor/build_ament_python.sh
new file mode 100755
index 00000000..e95680de
--- /dev/null
+++ b/recipes/ros-jazzy-topic-monitor/build_ament_python.sh
@@ -0,0 +1,19 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+pushd $SRC_DIR/$PKG_NAME/src/work
+
+# If there is a setup.cfg that contains install-scripts then we should not set it here
+if [ -f setup.cfg ] && grep -q "install[-_]scripts" setup.cfg; then
+  # Remove e.g. ros-humble- from PKG_NAME
+  PKG_NAME_SHORT=${PKG_NAME#*ros-jazzy-}
+  # Substitute "-" with "_"
+  PKG_NAME_SHORT=${PKG_NAME_SHORT//-/_}
+  INSTALL_SCRIPTS_ARG="--install-scripts=$PREFIX/lib/$PKG_NAME_SHORT"
+  echo "WARNING: setup.cfg not set, will set INSTALL_SCRIPTS_ARG to: $INSTALL_SCRIPTS_ARG"
+  $PYTHON setup.py install --prefix="$PREFIX" --install-lib="$SP_DIR" $INSTALL_SCRIPTS_ARG --single-version-externally-managed --record=files.txt
+else
+  $PYTHON -m pip install . --no-deps -vvv
+fi
diff --git a/recipes/ros-jazzy-topic-monitor/recipe.yaml b/recipes/ros-jazzy-topic-monitor/recipe.yaml
new file mode 100644
index 00000000..cd408faf
--- /dev/null
+++ b/recipes/ros-jazzy-topic-monitor/recipe.yaml
@@ -0,0 +1,92 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-topic-monitor
+  version: 0.33.5
+source:
+  git: https://github.com/ros2-gbp/demos-release.git
+  tag: release/jazzy/topic_monitor/0.33.5-1
+  target_directory: ros-jazzy-topic-monitor/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_python.sh' if unix else '%RECIPE_DIR%\\bld_ament_python.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pytest
+    - python
+    - ros-jazzy-ament-flake8
+    - ros-jazzy-ament-pep257
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - setuptools
+  run:
+    - python
+    - ros-jazzy-launch
+    - ros-jazzy-launch-ros
+    - ros-jazzy-rclpy
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-tracetools/bld_ament_cmake.bat b/recipes/ros-jazzy-tracetools/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-tracetools/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-tracetools/build_ament_cmake.sh b/recipes/ros-jazzy-tracetools/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-tracetools/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-tracetools/recipe.yaml b/recipes/ros-jazzy-tracetools/recipe.yaml
new file mode 100644
index 00000000..40e1060d
--- /dev/null
+++ b/recipes/ros-jazzy-tracetools/recipe.yaml
@@ -0,0 +1,91 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-tracetools
+  version: 8.2.3
+source:
+  git: https://github.com/ros2-gbp/ros2_tracing-release.git
+  tag: release/jazzy/tracetools/8.2.3-1
+  target_directory: ros-jazzy-tracetools/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - ${{ "lttng-ust" if linux }}
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - pkg-config
+    - python
+    - ros-jazzy-ament-cmake-gen-version-h
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - ${{ "lttng-ust" if linux }}
+    - python
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-trajectory-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-trajectory-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-trajectory-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-trajectory-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-trajectory-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-trajectory-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-trajectory-msgs/recipe.yaml b/recipes/ros-jazzy-trajectory-msgs/recipe.yaml
new file mode 100644
index 00000000..c478e459
--- /dev/null
+++ b/recipes/ros-jazzy-trajectory-msgs/recipe.yaml
@@ -0,0 +1,93 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-trajectory-msgs
+  version: 5.3.5
+source:
+  git: https://github.com/ros2-gbp/common_interfaces-release.git
+  tag: release/jazzy/trajectory_msgs/5.3.5-1
+  target_directory: ros-jazzy-trajectory-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-turtlesim/bld_ament_cmake.bat b/recipes/ros-jazzy-turtlesim/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-turtlesim/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-turtlesim/build_ament_cmake.sh b/recipes/ros-jazzy-turtlesim/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-turtlesim/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-turtlesim/recipe.yaml b/recipes/ros-jazzy-turtlesim/recipe.yaml
new file mode 100644
index 00000000..0990c709
--- /dev/null
+++ b/recipes/ros-jazzy-turtlesim/recipe.yaml
@@ -0,0 +1,115 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-turtlesim
+  version: 1.8.3
+source:
+  git: https://github.com/ros2-gbp/ros_tutorials-release.git
+  tag: release/jazzy/turtlesim/1.8.3-1
+  target_directory: ros-jazzy-turtlesim/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - qt-main
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-action
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-std-msgs
+    - ros-jazzy-std-srvs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: linux
+      then:
+        - libgl-devel
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
+  run:
+    - python
+    - qt-main
+    - ros-jazzy-ament-index-cpp
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-rcl-interfaces
+    - ros-jazzy-rclcpp
+    - ros-jazzy-rclcpp-action
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros-jazzy-std-msgs
+    - ros-jazzy-std-srvs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
+    - if: unix
+      then:
+        - xorg-libx11
+        - xorg-libxext
diff --git a/recipes/ros-jazzy-type-description-interfaces/bld_ament_cmake.bat b/recipes/ros-jazzy-type-description-interfaces/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-type-description-interfaces/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-type-description-interfaces/build_ament_cmake.sh b/recipes/ros-jazzy-type-description-interfaces/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-type-description-interfaces/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-type-description-interfaces/recipe.yaml b/recipes/ros-jazzy-type-description-interfaces/recipe.yaml
new file mode 100644
index 00000000..97e27b35
--- /dev/null
+++ b/recipes/ros-jazzy-type-description-interfaces/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-type-description-interfaces
+  version: 2.0.2
+source:
+  git: https://github.com/ros2-gbp/rcl_interfaces-release.git
+  tag: release/jazzy/type_description_interfaces/2.0.2-2
+  target_directory: ros-jazzy-type-description-interfaces/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-core-generators
+    - ros-jazzy-service-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-core-runtime
+    - ros-jazzy-service-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-unique-identifier-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-unique-identifier-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-unique-identifier-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-unique-identifier-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-unique-identifier-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-unique-identifier-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-unique-identifier-msgs/recipe.yaml b/recipes/ros-jazzy-unique-identifier-msgs/recipe.yaml
new file mode 100644
index 00000000..ff22b7b3
--- /dev/null
+++ b/recipes/ros-jazzy-unique-identifier-msgs/recipe.yaml
@@ -0,0 +1,88 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-unique-identifier-msgs
+  version: 2.5.0
+source:
+  git: https://github.com/ros2-gbp/unique_identifier_msgs-release.git
+  tag: release/jazzy/unique_identifier_msgs/2.5.0-3
+  target_directory: ros-jazzy-unique-identifier-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-core-generators
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-core-runtime
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-urdf-parser-plugin/bld_ament_cmake.bat b/recipes/ros-jazzy-urdf-parser-plugin/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-urdf-parser-plugin/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-urdf-parser-plugin/build_ament_cmake.sh b/recipes/ros-jazzy-urdf-parser-plugin/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-urdf-parser-plugin/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-urdf-parser-plugin/recipe.yaml b/recipes/ros-jazzy-urdf-parser-plugin/recipe.yaml
new file mode 100644
index 00000000..26a028b1
--- /dev/null
+++ b/recipes/ros-jazzy-urdf-parser-plugin/recipe.yaml
@@ -0,0 +1,88 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-urdf-parser-plugin
+  version: 2.10.0
+source:
+  git: https://github.com/ros2-gbp/urdf-release.git
+  tag: release/jazzy/urdf_parser_plugin/2.10.0-3
+  target_directory: ros-jazzy-urdf-parser-plugin/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-urdfdom-headers
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-urdfdom-headers
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-urdf/bld_ament_cmake.bat b/recipes/ros-jazzy-urdf/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-urdf/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-urdf/build_ament_cmake.sh b/recipes/ros-jazzy-urdf/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-urdf/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-urdf/recipe.yaml b/recipes/ros-jazzy-urdf/recipe.yaml
new file mode 100644
index 00000000..9fbf3a21
--- /dev/null
+++ b/recipes/ros-jazzy-urdf/recipe.yaml
@@ -0,0 +1,97 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-urdf
+  version: 2.10.0
+source:
+  git: https://github.com/ros2-gbp/urdf-release.git
+  tag: release/jazzy/urdf/2.10.0-3
+  target_directory: ros-jazzy-urdf/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake-google-benchmark
+    - ros-jazzy-ament-cmake-ros
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-pluginlib
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tinyxml2-vendor
+    - ros-jazzy-urdf-parser-plugin
+    - ros-jazzy-urdfdom
+    - ros-jazzy-urdfdom-headers
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-pluginlib
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-tinyxml2-vendor
+    - ros-jazzy-urdf-parser-plugin
+    - ros-jazzy-urdfdom
+    - ros-jazzy-urdfdom-headers
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-urdfdom-headers/recipe.yaml b/recipes/ros-jazzy-urdfdom-headers/recipe.yaml
new file mode 100644
index 00000000..9d803884
--- /dev/null
+++ b/recipes/ros-jazzy-urdfdom-headers/recipe.yaml
@@ -0,0 +1,20 @@
+package:
+  name: ros-jazzy-urdfdom-headers
+  version: "1.1.2"
+
+build:
+  number: 0
+
+requirements:
+  run:
+    - urdfdom_headers ==1.1.2
+    - python 3.11.* *_cpython
+
+about:
+  homepage: https://github.com/conda-forge/urdfdom_headers-feedstock
+  license: BSD-3-Clause
+  summary: |
+    Headers for URDF parsers
+extra:
+  recipe-maintainers:
+    - ros-forge
diff --git a/recipes/ros-jazzy-urdfdom-py/recipe.yaml b/recipes/ros-jazzy-urdfdom-py/recipe.yaml
new file mode 100644
index 00000000..fbb6a3ff
--- /dev/null
+++ b/recipes/ros-jazzy-urdfdom-py/recipe.yaml
@@ -0,0 +1,20 @@
+package:
+  name: ros-jazzy-urdfdom-py
+  version: "1.2.1"
+
+build:
+  number: 0
+
+requirements:
+  run:
+    - urdfdom-py 1.2.1.*
+    - python 3.11.* *_cpython
+
+about:
+  homepage: https://github.com/ros/urdf_parser_py
+  license: BSD-3-Clause
+  summary: |
+    Standalone URDF parser for Python.
+extra:
+  recipe-maintainers:
+    - ros-forge
\ No newline at end of file
diff --git a/recipes/ros-jazzy-urdfdom/recipe.yaml b/recipes/ros-jazzy-urdfdom/recipe.yaml
new file mode 100644
index 00000000..af152596
--- /dev/null
+++ b/recipes/ros-jazzy-urdfdom/recipe.yaml
@@ -0,0 +1,20 @@
+package:
+  name: ros-jazzy-urdfdom
+  version: "4.0.1"
+
+build:
+  number: 0
+
+requirements:
+  run:
+    - urdfdom ==4.0.1
+    - python 3.11.* *_cpython
+
+about:
+  homepage: https://github.com/conda-forge/urdfdom-feedstock
+  license: BSD-3-Clause
+  summary: |
+    URDF parser
+extra:
+  recipe-maintainers:
+    - ros-forge
diff --git a/recipes/ros-jazzy-vision-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-vision-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-vision-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-vision-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-vision-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-vision-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-vision-msgs/recipe.yaml b/recipes/ros-jazzy-vision-msgs/recipe.yaml
new file mode 100644
index 00000000..6c575d14
--- /dev/null
+++ b/recipes/ros-jazzy-vision-msgs/recipe.yaml
@@ -0,0 +1,93 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-vision-msgs
+  version: 4.1.1
+source:
+  git: https://github.com/ros2-gbp/vision_msgs-release.git
+  tag: release/jazzy/vision_msgs/4.1.1-3
+  target_directory: ros-jazzy-vision-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-cmake-gtest
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-visualization-msgs/bld_ament_cmake.bat b/recipes/ros-jazzy-visualization-msgs/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-visualization-msgs/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-visualization-msgs/build_ament_cmake.sh b/recipes/ros-jazzy-visualization-msgs/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-visualization-msgs/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-visualization-msgs/recipe.yaml b/recipes/ros-jazzy-visualization-msgs/recipe.yaml
new file mode 100644
index 00000000..d1711799
--- /dev/null
+++ b/recipes/ros-jazzy-visualization-msgs/recipe.yaml
@@ -0,0 +1,95 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-visualization-msgs
+  version: 5.3.5
+source:
+  git: https://github.com/ros2-gbp/common_interfaces-release.git
+  tag: release/jazzy/visualization_msgs/5.3.5-1
+  target_directory: ros-jazzy-visualization-msgs/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-generators
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+  run:
+    - python
+    - ros-jazzy-builtin-interfaces
+    - ros-jazzy-geometry-msgs
+    - ros-jazzy-ros-workspace
+    - ros-jazzy-rosidl-default-runtime
+    - ros-jazzy-sensor-msgs
+    - ros-jazzy-std-msgs
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros-jazzy-zstd-image-transport/bld_ament_cmake.bat b/recipes/ros-jazzy-zstd-image-transport/bld_ament_cmake.bat
new file mode 100755
index 00000000..823afff1
--- /dev/null
+++ b/recipes/ros-jazzy-zstd-image-transport/bld_ament_cmake.bat
@@ -0,0 +1,52 @@
+:: Generated by vinca http://github.com/RoboStack/vinca.
+:: DO NOT EDIT!
+setlocal EnableDelayedExpansion
+
+set "PYTHONPATH=%LIBRARY_PREFIX%\lib\site-packages;%SP_DIR%"
+
+:: MSVC is preferred.
+set CC=cl.exe
+set CXX=cl.exe
+
+rd /s /q build
+mkdir build
+pushd build
+
+:: set "CMAKE_GENERATOR=Ninja"
+:: We use the Visual Studio generator as a workaround for
+:: problems in Ninja when using long paths, see https://github.com/RoboStack/ros-humble/pull/229#issuecomment-2564856467
+:: Once those are solved, we can switch back to use Ninja
+set "CMAKE_GENERATOR=Visual Studio %VS_MAJOR% %VS_YEAR%"
+
+:: PYTHON_INSTALL_DIR should be a relative path, see
+:: https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+:: So we compute the relative path of %SP_DIR% w.r.t. to LIBRARY_PREFIX,
+:: but it is not trivial to do this in Command Prompt scripting, so let's do it via
+:: python
+
+:: This line is scary, but it basically assigns the output of the command inside (` and `)
+:: to the variable specified after DO SET
+:: The equivalent in bash is PYTHON_INSTALL_DIR=`python -c ...`
+FOR /F "tokens=* USEBACKQ" %%i IN (`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['LIBRARY_PREFIX']).replace('\\','/'))"`) DO SET PYTHON_INSTALL_DIR=%%i
+
+cmake ^
+    -G "%CMAKE_GENERATOR%" ^
+    -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
+    -DCMAKE_BUILD_TYPE=Release ^
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True ^
+    -DPYTHON_EXECUTABLE=%PYTHON% ^
+    -DPython_EXECUTABLE=%PYTHON% ^
+    -DPython3_EXECUTABLE=%PYTHON% ^
+    -DSETUPTOOLS_DEB_LAYOUT=OFF ^
+    -DBUILD_SHARED_LIBS=ON ^
+    -DBUILD_TESTING=OFF ^
+    -DCMAKE_OBJECT_PATH_MAX=255 ^
+    --compile-no-warning-as-error ^
+    -DPYTHON_INSTALL_DIR=%PYTHON_INSTALL_DIR% ^
+    %SRC_DIR%\%PKG_NAME%\src\work
+if errorlevel 1 exit 1
+
+:: We explicitly pass %CPU_COUNT% to cmake --build as we are not using Ninja,
+:: see the comment before setting the CMAKE_GENERATOR env variable
+cmake --build . --config Release --parallel %CPU_COUNT% --target install
+if errorlevel 1 exit 1
diff --git a/recipes/ros-jazzy-zstd-image-transport/build_ament_cmake.sh b/recipes/ros-jazzy-zstd-image-transport/build_ament_cmake.sh
new file mode 100755
index 00000000..34df1a72
--- /dev/null
+++ b/recipes/ros-jazzy-zstd-image-transport/build_ament_cmake.sh
@@ -0,0 +1,84 @@
+# Generated by vinca http://github.com/RoboStack/vinca.
+# DO NOT EDIT!
+
+set -eo pipefail
+
+rm -rf build
+mkdir build
+cd build
+
+# necessary for correctly linking SIP files (from python_qt_bindings)
+export LINK=$CXX
+
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" != "1" ]]; then
+  PYTHON_EXECUTABLE=$PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="10.15"
+else
+  PYTHON_EXECUTABLE=$BUILD_PREFIX/bin/python
+  PKG_CONFIG_EXECUTABLE=$BUILD_PREFIX/bin/pkg-config
+  OSX_DEPLOYMENT_TARGET="11.0"
+fi
+
+if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" == "1" ]]; then
+  export QT_HOST_PATH="$BUILD_PREFIX"
+else
+  export QT_HOST_PATH="$PREFIX"
+fi
+
+echo "USING PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
+echo "USING PKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}"
+
+export ROS_PYTHON_VERSION=`$PYTHON_EXECUTABLE -c "import sys; print('%i.%i' % (sys.version_info[0:2]))"`
+echo "Using Python ${ROS_PYTHON_VERSION}"
+
+# see https://github.com/conda-forge/cross-python-feedstock/issues/24
+if [[ "$CONDA_BUILD_CROSS_COMPILATION" == "1" ]]; then
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~$PREFIX/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/share/rosidl* -type f -exec sed -i "s~\${_IMPORT_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~${BUILD_PREFIX}/lib/python${ROS_PYTHON_VERSION}/site-packages~g" {} + || true
+  find $PREFIX/lib/cmake -type f -exec sed -i "s~message(FATAL_ERROR \"The imported target~message(WARNING \"The imported target~g" {} + || true
+fi
+
+if [[ $target_platform =~ linux.* ]]; then
+    export CFLAGS="${CFLAGS} -D__STDC_FORMAT_MACROS=1"
+    export CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS=1"
+fi;
+
+# Needed for qt-gui-cpp ..
+if [[ $target_platform =~ linux.* ]]; then
+  ln -s $GCC ${BUILD_PREFIX}/bin/gcc
+  ln -s $GXX ${BUILD_PREFIX}/bin/g++
+fi;
+
+# PYTHON_INSTALL_DIR should be a relative path, see
+# https://github.com/ament/ament_cmake/blob/2.3.2/ament_cmake_python/README.md
+# So we compute the relative path of $SP_DIR w.r.t. to $PREFIX,
+# but it is not trivial to do this in bash scripting, so let's do it via python
+export PYTHON_INSTALL_DIR=`python -c "import os;print(os.path.relpath(os.environ['SP_DIR'],os.environ['PREFIX']))"`
+echo "Using site_packages: $PYTHON_INSTALL_DIR"
+
+cmake \
+    -G "Ninja" \
+    -DCMAKE_INSTALL_PREFIX=$PREFIX \
+    -DCMAKE_PREFIX_PATH=$PREFIX \
+    -DAMENT_PREFIX_PATH=$PREFIX \
+    -DCMAKE_INSTALL_LIBDIR=lib \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_EXECUTABLE=$PYTHON_EXECUTABLE \
+    -DPython3_FIND_STRATEGY=LOCATION \
+    -DPKG_CONFIG_EXECUTABLE=$PKG_CONFIG_EXECUTABLE \
+    -DPYTHON_INSTALL_DIR=$PYTHON_INSTALL_DIR \
+    -DSETUPTOOLS_DEB_LAYOUT=OFF \
+    -DCATKIN_SKIP_TESTING=$SKIP_TESTING \
+    -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=True \
+    -DBUILD_SHARED_LIBS=ON  \
+    -DBUILD_TESTING=OFF \
+    -DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew;/usr/local/homebrew" \
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_DEPLOYMENT_TARGET \
+    --compile-no-warning-as-error \
+    $SRC_DIR/$PKG_NAME/src/work
+
+cmake --build . --config Release --target install
diff --git a/recipes/ros-jazzy-zstd-image-transport/recipe.yaml b/recipes/ros-jazzy-zstd-image-transport/recipe.yaml
new file mode 100644
index 00000000..1aead7db
--- /dev/null
+++ b/recipes/ros-jazzy-zstd-image-transport/recipe.yaml
@@ -0,0 +1,90 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json
+
+package:
+  name: ros-jazzy-zstd-image-transport
+  version: 4.0.3
+source:
+  git: https://github.com/ros2-gbp/image_transport_plugins-release.git
+  tag: release/jazzy/zstd_image_transport/4.0.3-1
+  target_directory: ros-jazzy-zstd-image-transport/src/work
+
+build:
+  script: ${{ '$RECIPE_DIR/build_ament_cmake.sh' if unix else '%RECIPE_DIR%\\bld_ament_cmake.bat' }}
+  number: 1
+  post_process:
+    - files:
+        - '*.pc'
+      regex: (?:-L|-I)?"?([^;\s]+/sysroot/)
+      replacement: $$(CONDA_BUILD_SYSROOT_S)
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/sysroot)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+    - files:
+        - '*.cmake'
+      regex: ([^;\s"]+/MacOSX\d*\.?\d*\.sdk)
+      replacement: $$ENV{CONDA_BUILD_SYSROOT}
+about:
+  homepage: https://www.ros.org/
+  license: BSD-3-Clause
+  summary: |
+    Robot Operating System
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
+requirements:
+  build:
+    - ${{ compiler('cxx') }}
+    - ${{ compiler('c') }}
+    - ${{ stdlib('c') }}
+    - ninja
+    - python
+    - setuptools
+    - git
+    - if: unix
+      then:
+        - patch
+        - make
+        - coreutils
+    - if: win
+      then:
+        - m2-patch
+    - if: osx
+      then:
+        - tapi
+    - if: build_platform != target_platform
+      then:
+        - pkg-config
+    - cmake
+    - cython
+    - if: build_platform != target_platform
+      then:
+        - python
+        - cross-python_${{ target_platform }}
+        - numpy
+  host:
+    - if: build_platform == target_platform
+      then:
+        - pkg-config
+    - numpy
+    - pip
+    - python
+    - ros-jazzy-ament-cmake
+    - ros-jazzy-ament-lint-auto
+    - ros-jazzy-ament-lint-common
+    - ros-jazzy-image-transport
+    - ros-jazzy-ros-environment
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - zlib
+  run:
+    - python
+    - ros-jazzy-image-transport
+    - ros-jazzy-ros-workspace
+    - ros2-distro-mutex 0.6.* jazzy_*
+    - zlib
+    - if: osx and x86_64
+      then:
+        - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }}
diff --git a/recipes/ros2-distro-mutex/recipe.yaml b/recipes/ros2-distro-mutex/recipe.yaml
new file mode 100644
index 00000000..9f35c219
--- /dev/null
+++ b/recipes/ros2-distro-mutex/recipe.yaml
@@ -0,0 +1,52 @@
+package:
+  name: ros2-distro-mutex
+  version: 0.6.0
+
+build:
+  number: 0
+  # Note: keep in sync with build number
+  # Cannot be done automatically, see https://github.com/mamba-org/boa/issues/278
+  string: jazzy_0
+
+requirements:
+  # NOTE:
+  # The idea with automatically adding versions to run_exports doesn't
+  # work since we don't want all these dependencies as run deps of all ROS
+  # packages. Therefore I am currently manually adding them to run_constrained.
+  # This has to be synchronized with our current conda_build_config all the time :(
+  # host:
+  #   # values here should 
+  #   - log4cxx
+  #   - poco
+  #   - pcl
+  #   - opencv
+  #   - gazebo
+  #   - ogre
+  #   - qt
+  # run:
+  # values here should be applied from run_exports!
+  # if the upstream package does not have run_exports
+  # please change it in the conda_build_config.yaml!
+  run_constraints:
+    - libboost 1.86.*
+    - libboost-devel 1.86.*
+    - pcl 1.14.1.*
+    - gazebo 11.*
+    - libprotobuf 5.28.2.*
+
+  run_exports:
+    weak:
+      - ${{ pin_subpackage('ros2-distro-mutex', upper_bound='x.x') }}
+
+
+about:
+  homepage: https://github.com/robostack/ros-jazzy
+  license: BSD-3-Clause
+  summary: |
+    The ROS2 distro mutex. To switch between ROS2 versions, you need to change the mutex.
+    E.g. mamba install ros2-distro-mutex=*=jazzy to switch to jazzy.
+
+extra:
+  recipe-maintainers:
+    - ros-forge
+
diff --git a/vinca.yaml b/vinca.yaml
new file mode 100644
index 00000000..479e51c4
--- /dev/null
+++ b/vinca.yaml
@@ -0,0 +1,47 @@
+ros_distro: jazzy
+
+# mapping for package keys
+conda_index:
+  - robostack.yaml
+  - packages-ignore.yaml
+
+build_number: 1
+
+mutex_package: ros2-distro-mutex 0.6.* jazzy_*
+
+skip_all_deps: false
+
+# If full rebuild, the build number of the existing package has
+# to match the selected build number for skipping
+full_rebuild: true
+
+packages_skip_by_deps:
+  - cartographer
+  - urdfdom
+  - urdfdom_py
+  - urdfdom_headers
+  - pendulum_control
+  - rttest
+  - tlsf
+  - tlsf_cpp
+
+packages_remove_from_deps:
+  - cartographer
+  - pendulum_control
+  - rttest
+  - tlsf
+  - tlsf_cpp
+
+skip_existing:
+  # - output
+  - https://conda.anaconda.org/robostack-jazzy/
+
+packages_select_by_deps:
+  - ament_cmake_core
+  - desktop
+  - ros_base
+  - ros_environment
+  - ros_gz
+  - ros_workspace
+
+patch_dir: patch
diff --git a/vinca_ec4ef9dfb4.json b/vinca_ec4ef9dfb4.json
new file mode 100644
index 00000000..1022c315
--- /dev/null
+++ b/vinca_ec4ef9dfb4.json
@@ -0,0 +1 @@
+{"packages":{},"packages.conda":{"ros-humble-octomap-1.9.8-h0dc7051_2.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"h0dc7051_2","build_number":2,"depends":["octomap 1.9.*"],"license":"BSD-3-Clause","platform":"osx","timestamp":1719166513413,"md5":"7d4875506c0b4178659f53aa3f065ad3","name":"ros-humble-octomap","requires":[],"size":1664,"version":"1.9.8","binstar":{"package_id":"6674a0848c7b2f8b2ca7ce6a","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"424b597839c72cdeffcb1031d53003cb11b0df19af642a09de04b5eeb0ab4518"},"ros-humble-urdfdom-py-1.2.0-h0dc7051_2.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"h0dc7051_2","build_number":2,"depends":["urdfdom-py ==1.2.0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1719166513614,"md5":"1ac333a8f42e7c4720cff199a286aa44","name":"ros-humble-urdfdom-py","requires":[],"size":1659,"version":"1.2.0","binstar":{"package_id":"6674a08584d8e3c9b344de6f","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"78dec0c16443df771e417524595d9547bb7d4ce4f72ac9bb380986586920a297"},"ros-jazzy-ament-package-0.16.3-np126py312hb082980_0.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py312hb082980_0","build_number":0,"depends":["importlib-metadata","importlib_resources","python 3.12.* *_cpython","ros2-distro-mutex ==0.5 jazzy","setuptools","__osx >=10.14","libcxx >=17","python_abi 3.12.* *_cp312","ros2-distro-mutex >=0.5.0,<0.6.0a0","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1719140494613,"md5":"8d0335acc147b73c79a6c37f6d732630","name":"ros-jazzy-ament-package","requires":[],"size":41334,"version":"0.16.3","binstar":{"package_id":"6674a0880ec0a9de7a21416c","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"6c2e2b0450f05fa6c45c81a08a647d7e42fed792cd592e887b703b35ad571f3f"},"ros-jazzy-ament-package-0.16.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["importlib-metadata","importlib_resources","python","ros2-distro-mutex 0.6.* jazzy_*","setuptools","__osx >=10.14","libcxx >=19","__osx >=10.14","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735901806758,"md5":"6c44ba9b7ee7ed4310822474474cca77","name":"ros-jazzy-ament-package","requires":[],"size":43024,"version":"0.16.3","binstar":{"package_id":"6674a0880ec0a9de7a21416c","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"8773cf34d5266300f32cf3f2d37bdd5c804451cce19b2a11faaab37ddfc039c5"},"ros2-distro-mutex-0.5.0-jazzy.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"jazzy","build_number":0,"constrains":["libboost 1.84.*","libboost-devel 1.84.*","pcl 1.14.1.*","gazebo 11.*","libpqxx 7.*"],"license":"BSD-3-Clause","platform":"osx","timestamp":1719166513147,"md5":"ffc5e0ebae3b5458d88a79e036d9e7e6","name":"ros2-distro-mutex","requires":[],"depends":[],"size":2163,"version":"0.5.0","binstar":{"package_id":"6674a08a15fc1c937921416b","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"2c6d5f8eaa9735a86b8d8f0377b6a39027818668ea2c4cb352d1d595feefae4a"},"ros2-distro-mutex-0.6.0-jazzy_0.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"jazzy_0","build_number":0,"constrains":["libboost 1.86.*","libboost-devel 1.86.*","pcl 1.14.1.*","gazebo 11.*","libprotobuf 5.28.2.*"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735932355851,"md5":"25d4d2a8548c777aae6ff988d9fe0289","name":"ros2-distro-mutex","requires":[],"depends":[],"size":2401,"version":"0.6.0","binstar":{"package_id":"6674a08a15fc1c937921416b","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"bdbd0dd830a82b57170040abb9882f43f11337ba7100ede7e9d027bed91b1c25"},"ros-jazzy-ament-cmake-core-2.5.0-np126py312hb082980_0.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py312hb082980_0","build_number":0,"depends":["catkin_pkg","cmake","python 3.12.* *_cpython","ros-jazzy-ament-package","ros2-distro-mutex ==0.5 jazzy","__osx >=10.14","libcxx >=17","__osx >=10.14","python_abi 3.12.* *_cp312","ros2-distro-mutex >=0.5.0,<0.6.0a0","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1719140571742,"md5":"da8b777e2718a2a60cba39d896275057","name":"ros-jazzy-ament-cmake-core","requires":[],"size":42097,"version":"2.5.0","binstar":{"package_id":"6674a0d7b557d1c73d6af053","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"ddc54619a255a6cd642628f5131037cd798b3f8468bb2c84af441d0e81383520"},"ros-jazzy-ament-cmake-core-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["catkin_pkg","cmake","python","ros-jazzy-ament-package","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735901853148,"md5":"a483e81eac497e7318a226e4ec783040","name":"ros-jazzy-ament-cmake-core","requires":[],"size":43799,"version":"2.5.3","binstar":{"package_id":"6674a0d7b557d1c73d6af053","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"7ee167f814618213f456b0cec19e089063eae44b8d9e38b112944bc9ec8cf262"},"ros-jazzy-ros-environment-4.2.1-np126py312hb082980_0.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py312hb082980_0","build_number":0,"depends":["python 3.12.* *_cpython","ros2-distro-mutex ==0.5 jazzy","__osx >=10.14","libcxx >=17","__osx >=10.14","numpy >=1.26.4,<2.0a0","python_abi 3.12.* *_cp312","ros2-distro-mutex >=0.5.0,<0.6.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1719140642009,"md5":"4b65331e682fc07d8a8c11ceb50f6133","name":"ros-jazzy-ros-environment","requires":[],"size":18607,"version":"4.2.1","binstar":{"package_id":"6674a0d952b92cb4069dbd24","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"99969c6ded2b8f4600b72b577a4684fbce6623a551488dd1cf5226a169a7dba6"},"ros-jazzy-ros-environment-4.2.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735901909049,"md5":"d8f17bfb07c68032c0c657b88633ac0a","name":"ros-jazzy-ros-environment","requires":[],"size":19837,"version":"4.2.1","binstar":{"package_id":"6674a0d952b92cb4069dbd24","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"b6303e3c748ee5e51035cb7bfce4a78cdda8a526b35242d5e940ae1e7f9344c8"},"ros-jazzy-ros-workspace-1.0.3-np126py312hb082980_0.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py312hb082980_0","build_number":0,"depends":["python 3.12.* *_cpython","ros2-distro-mutex ==0.5 jazzy","__osx >=10.14","libcxx >=17","__osx >=10.14","numpy >=1.26.4,<2.0a0","python_abi 3.12.* *_cp312","ros2-distro-mutex >=0.5.0,<0.6.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1719140610312,"md5":"68b2431ea483d12e75c6bc246390b197","name":"ros-jazzy-ros-workspace","requires":[],"size":32877,"version":"1.0.3","binstar":{"package_id":"6674a0dbdd9abcfdfb9dbd24","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"ec0fd5379c0638572a817d9d3e1f6d7abe4f46e264806075e4fff62e8b531a0e"},"ros-jazzy-ros-workspace-1.0.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735901881854,"md5":"8137931c9b3d1fc7889e1fc7371f72d8","name":"ros-jazzy-ros-workspace","requires":[],"size":34521,"version":"1.0.3","binstar":{"package_id":"6674a0dbdd9abcfdfb9dbd24","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"2e6b3366a82ee426bd97981892a72bcff595f8260b89afbe5a7ffbaa3c1b661f"},"ros-jazzy-iceoryx-hoofs-2.0.6-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735902666169,"md5":"44b1c45050e08a479fb6e3723d4d02a4","name":"ros-jazzy-iceoryx-hoofs","requires":[],"size":261996,"version":"2.0.6","binstar":{"package_id":"6674a1224ef4ab0e17883dd8","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"f51215146c67caddd8cf57a939152649bd84292f3531b197f182434a61c516a3"},"ros-jazzy-urdfdom-headers-1.1.2-h0dc7051_0.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"h0dc7051_0","build_number":0,"depends":["urdfdom_headers ==1.1.2","python 3.11.* *_cpython"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735932356535,"md5":"f98d3e30b5bb77f47bb4fe12aa571355","name":"ros-jazzy-urdfdom-headers","requires":[],"size":1859,"version":"1.1.2","binstar":{"package_id":"6674a123ff4752325d57944d","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"5761304ec7d946e3b258eef668a8b1e32341bf2ee7d87a1529d5789a51ff5a20"},"ros-jazzy-ament-cmake-include-directories-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-core","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735902528231,"md5":"feb61cbe2a658fd005eca1a7ecf9a10b","name":"ros-jazzy-ament-cmake-include-directories","requires":[],"size":20372,"version":"2.5.3","binstar":{"package_id":"6674a1307aab843f03579449","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"3ab027a54f17a8e699b33dca66854e35841427b744432d1fd83951c9730147d4"},"ros-jazzy-ament-cmake-export-definitions-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-core","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735903041124,"md5":"67bbb63dad2c410cc2dfd062d294a09b","name":"ros-jazzy-ament-cmake-export-definitions","requires":[],"size":20510,"version":"2.5.3","binstar":{"package_id":"6674a13266b718689c44de6f","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"4a86f0135388a335404033aee6c37e9f1e881b153dace95508140548403fb851"},"ros-jazzy-ament-cmake-libraries-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-core","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735902516765,"md5":"3dec875c965f02df3ec48d48abff1163","name":"ros-jazzy-ament-cmake-libraries","requires":[],"size":20059,"version":"2.5.3","binstar":{"package_id":"6674a133bf586e21d26af053","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"11857b4b2abe0ea82300d6dc8fa170909e5e9d817442df856147fb9f519956bd"},"ros-jazzy-ament-cmake-export-include-directories-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-core","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735903021397,"md5":"28b3c9a8a81fd3bdd85ed40a7faadd2c","name":"ros-jazzy-ament-cmake-export-include-directories","requires":[],"size":20920,"version":"2.5.3","binstar":{"package_id":"6674a1348eba59d71d44de6f","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"46e8972e890d69b0da64b31d4217eb38f4150591c118543ac7d1145e109cd390"},"ros-jazzy-ament-cmake-python-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-core","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735902482637,"md5":"28241f38a63d0fd69b722cb75d0571ae","name":"ros-jazzy-ament-cmake-python","requires":[],"size":22643,"version":"2.5.3","binstar":{"package_id":"6674a134fda12eef0045c4f3","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"0f6e85bc27a48921e493ff3ea568727fc701abdea9272c9e54978ac71904e69c"},"ros-jazzy-ament-cmake-export-libraries-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-core","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735902940799,"md5":"e3cbf62fa17af1ff98dd2a6045ce1ac5","name":"ros-jazzy-ament-cmake-export-libraries","requires":[],"size":22456,"version":"2.5.3","binstar":{"package_id":"6674a135751ba5b24b21416e","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"eff505c9bbf987d74dc677d7f38d48d110e42e74277075910f97f1f71a42eb8c"},"ros-jazzy-ament-lint-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735902435772,"md5":"8dccf86a468c47b720a02a0df11cef39","name":"ros-jazzy-ament-lint","requires":[],"size":16848,"version":"0.17.1","binstar":{"package_id":"6674a1357f5cc3d27f45c4f6","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"a9743b9c554c28656a788c1ebf13d69244ab7f79ef5b56ffaab60c1c23f3872d"},"ros-jazzy-gtest-vendor-1.14.9000-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735902502815,"md5":"49f2a544dc925871c73e59c2f8156f94","name":"ros-jazzy-gtest-vendor","requires":[],"size":207986,"version":"1.14.9000","binstar":{"package_id":"6674a136b5589307ae1922bf","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"671628ba00422d673cc2d39bca8b9b23f0b833a81e0e244f5d7c0d07d0e2b473"},"ros-jazzy-ament-cmake-export-link-flags-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-core","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735903002364,"md5":"d73fbfe9e4418768c0dade332b288ab4","name":"ros-jazzy-ament-cmake-export-link-flags","requires":[],"size":20452,"version":"2.5.3","binstar":{"package_id":"6674a137a34cc3f166a7ce6b","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"8d2add4441cf677a777549e4010c7db2251f95b741b74d9f6d73120e371b1ad5"},"ros-jazzy-ament-cmake-version-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-core","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735902983053,"md5":"b6c459d243c8c3cea2f0cd60bc37fd41","name":"ros-jazzy-ament-cmake-version","requires":[],"size":20247,"version":"2.5.3","binstar":{"package_id":"6674a13adbc9a5ddb5579449","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"971106bd30500fc24f54799348e7f56e6568eae7d6adf824ee6f87ff143dfaf9"},"ros-jazzy-ament-pycodestyle-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["pycodestyle","python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735902278860,"md5":"72fb1a4c88e06b551aaf15c232c29457","name":"ros-jazzy-ament-pycodestyle","requires":[],"size":22237,"version":"0.17.1","binstar":{"package_id":"6674a143f1e91f8ddc6af055","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"cf5d2dabeefed060ec2d62f66f613a1b8e1bb6478e33ed1196829d82d10bdb76"},"ros-jazzy-google-benchmark-vendor-0.5.0-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["benchmark","python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735902323382,"md5":"b5dd3658c5781f39fcb34c52dfd098a6","name":"ros-jazzy-google-benchmark-vendor","requires":[],"size":15359,"version":"0.5.0","binstar":{"package_id":"6674a145d25c322a2e1922bf","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"5af1d1224afc8ef10f614417474c0691a59b724532b9c4e0556b47f2b0f4db56"},"ros-jazzy-osrf-pycommon-2.1.5-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["importlib-metadata","python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735902310489,"md5":"3673f1c952c65a9c5336f0073f278c00","name":"ros-jazzy-osrf-pycommon","requires":[],"size":65166,"version":"2.1.5","binstar":{"package_id":"6674a14ad8010e9cee1922bf","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"2209af33240e4232880b08b1f2fb569eaceea6f811bcf07abd2d71e7d41db08e"},"ros-jazzy-osrf-testing-tools-cpp-2.0.0-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735902337927,"md5":"b37d1e782bd21c982b6e326c8e7e0a36","name":"ros-jazzy-osrf-testing-tools-cpp","requires":[],"size":5122998,"version":"2.0.0","binstar":{"package_id":"6674a14c1aea3d65a045c4f5","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"3d7b48e77b205296b80fb205c24bc756697b02838e4b17b2d3e2af44b9362f36"},"ros-jazzy-test-interface-files-0.11.0-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735902377034,"md5":"ae163fc8acc2ff704f801bb436738454","name":"ros-jazzy-test-interface-files","requires":[],"size":22337,"version":"0.11.0","binstar":{"package_id":"6674a14e3ca8a6ae9e883dd8","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"9aa8592dd47ccda698a4b70b9a20d529d6db5a806d125fc87276f56ac5d6f569"},"ros-jazzy-ament-cmake-export-dependencies-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-core","ros-jazzy-ament-cmake-libraries","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735903548269,"md5":"089f524ee007a7cd5c07f0986a102800","name":"ros-jazzy-ament-cmake-export-dependencies","requires":[],"size":21434,"version":"2.5.3","binstar":{"package_id":"6674a1a7d6a022a9b921416b","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"d8218084c5d03318cb8acae395e46bec01c5e11757d22ad38b9505306cf8d5ab"},"ros-jazzy-ament-cmake-export-targets-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-core","ros-jazzy-ament-cmake-export-libraries","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735903575767,"md5":"39a9ce509d1e32888f274dbe308f0d37","name":"ros-jazzy-ament-cmake-export-targets","requires":[],"size":21268,"version":"2.5.3","binstar":{"package_id":"6674a1a8c42c2ed11157944c","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"dc58a3092faed3dd46f41438b97c5950c7a2e52e4535da3911c799049cbc9ed9"},"ros-jazzy-ament-cmake-target-dependencies-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-core","ros-jazzy-ament-cmake-include-directories","ros-jazzy-ament-cmake-libraries","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735903561380,"md5":"05342bd1f27a4c3a5a279cd427ea6888","name":"ros-jazzy-ament-cmake-target-dependencies","requires":[],"size":22084,"version":"2.5.3","binstar":{"package_id":"6674a1a9b557d1c73d6af055","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"29938bc343ae249243c7616ffaa21f692d58501d89fac3b54eb9b18b6784f44f"},"ros-jazzy-ament-cmake-test-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-core","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735903530347,"md5":"b3774e68d6ab43b1556da7022023fc49","name":"ros-jazzy-ament-cmake-test","requires":[],"size":35292,"version":"2.5.3","binstar":{"package_id":"6674a1aa83e518de36a7ce6c","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"374c7e088f76ac820c620822d91212362ab7e78b379d455414c00421c78c4368"},"ros-jazzy-ament-flake8-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["flake8","flake8-builtins","flake8-comprehensions","flake8-docstrings","flake8-import-order","flake8-quotes","python","ros-jazzy-ament-lint","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735903496240,"md5":"b0184b485570e5af9a916f485031eda0","name":"ros-jazzy-ament-flake8","requires":[],"size":28320,"version":"0.17.1","binstar":{"package_id":"6674a1ac189b62b6cff4ab97","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"272de76b07313d9f4d9b90eb7fc1c97133e3ac044e5ad37cea32edb3c2968a6c"},"ros-jazzy-ament-cmake-export-interfaces-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-core","ros-jazzy-ament-cmake-export-libraries","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735903174219,"md5":"b1fa1b2cdff031d20261c4739db7285e","name":"ros-jazzy-ament-cmake-export-interfaces","requires":[],"size":21127,"version":"2.5.3","binstar":{"package_id":"6674a1c372cb57ea62f4ab97","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"1dca14364e06a56059226a1ffd108920c4c468fede6fa826a32c823c018c51cb"},"ros-jazzy-gmock-vendor-1.14.9000-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-gtest-vendor","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735903221160,"md5":"f9e4daeed29b88df477fe88c83b98029","name":"ros-jazzy-gmock-vendor","requires":[],"size":121641,"version":"1.14.9000","binstar":{"package_id":"6674a1c589a9c37693883dd8","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"b71346efd25af72737ac471d08a073e2bf26025dffdf64dec92fe81c33aa1523"},"ros-jazzy-iceoryx-posh-2.0.6-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-iceoryx-hoofs","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735903236777,"md5":"6dc583649affb9dc8bf0bba2ca2cca37","name":"ros-jazzy-iceoryx-posh","requires":[],"size":455218,"version":"2.0.6","binstar":{"package_id":"6674a1c772ad0f0ae5a7ce6f","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"c61dad61fad34fdebce8ce88f5cee61e55e9f15c69dca5b75ce7466bfde0f0c3"},"ros-jazzy-ament-cmake-google-benchmark-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-test","ros-jazzy-google-benchmark-vendor","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904016736,"md5":"a45267f8d1bfe52e265fa6853fc3bb79","name":"ros-jazzy-ament-cmake-google-benchmark","requires":[],"size":30309,"version":"2.5.3","binstar":{"package_id":"6674a213aba19321c6f4ab96","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"b9f5a66b7f30b8f787cdba6d12ff6788a1d296576350804234988c4ffa93c9d2"},"ros-jazzy-ament-cmake-pytest-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["pytest","python","ros-jazzy-ament-cmake-core","ros-jazzy-ament-cmake-test","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735903983023,"md5":"b86395878f6577f8f69539639b22b2e2","name":"ros-jazzy-ament-cmake-pytest","requires":[],"size":23123,"version":"2.5.3","binstar":{"package_id":"6674a21417bbcfe6d5579449","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"9678f58d9cc9d1a062d35a43048c02359b5c763cf7abe972ab1c2a6ae8739155"},"ros-jazzy-iceoryx-binding-c-2.0.6-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904029141,"md5":"1fab43dec94e4d8dae9701f5bb295b8c","name":"ros-jazzy-iceoryx-binding-c","requires":[],"size":80674,"version":"2.0.6","binstar":{"package_id":"6674a21572cb57ea62f4ab99","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"76e7129b023f2f4f4ccb9685848df4d2a322498bf4b42238ccce9a87c4cf3cca"},"ros-jazzy-ament-cmake-gtest-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["gtest","python","ros-jazzy-ament-cmake-test","ros-jazzy-gtest-vendor","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","numpy >=1.26.4,<2.0a0","gtest >=1.15.2,<1.15.3.0a0","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735903968063,"md5":"d8a7fb57764be89d03ded4c3f1baf737","name":"ros-jazzy-ament-cmake-gtest","requires":[],"size":23103,"version":"2.5.3","binstar":{"package_id":"6674a21d86c5f0ddff44de71","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"2f5b5608d345f63243271c79ca2541caf3562c38c71177462c29a1d834ef5b13"},"ros-jazzy-ament-cmake-vendor-package-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["git","python","ros-jazzy-ament-cmake-core","ros-jazzy-ament-cmake-export-dependencies","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","vcstool","__osx >=10.14","libcxx >=19","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735903985995,"md5":"6f5c242baaa5e71ec61d636cb2991c52","name":"ros-jazzy-ament-cmake-vendor-package","requires":[],"size":26418,"version":"2.5.3","binstar":{"package_id":"6674a21ede26c9d519883dd8","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"fba9249b5fbd4259691c318a6c92efff6075ed1e00f6543000de2a226775aad9"},"ros-jazzy-ament-lint-auto-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-core","ros-jazzy-ament-cmake-test","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904017253,"md5":"33001569be29f95c1bbd838203756cdd","name":"ros-jazzy-ament-lint-auto","requires":[],"size":20465,"version":"0.17.1","binstar":{"package_id":"6674a21f52b92cb4069dbd2a","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"7494f90c78062000a0649710cf8502cadcd8b6794defe3d10328af48b663a5da"},"ros-jazzy-ament-mypy-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["mypy","python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904002949,"md5":"a4cc2fb04f4cab659d77f6cd45a06684","name":"ros-jazzy-ament-mypy","requires":[],"size":26592,"version":"0.17.1","binstar":{"package_id":"6674a2204161a5e24dc62372","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"24f146a8f61893bdc93a1db500b02ecace34802ce647062942bdfcf6bc15f840"},"ros-jazzy-ament-pep257-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["pydocstyle","python","ros-jazzy-ament-lint","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735903932101,"md5":"1fe7237a586c898c7a8612416bd52826","name":"ros-jazzy-ament-pep257","requires":[],"size":26593,"version":"0.17.1","binstar":{"package_id":"6674a221de26c9d519883dda","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"31b421819703869c3ed2a3d2720a9928fe351d0c8e302ffbd2d67d2120479b80"},"ros-jazzy-ament-cmake-gen-version-h-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-core","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904256602,"md5":"1ea6647951edf90db04d06328f06b074","name":"ros-jazzy-ament-cmake-gen-version-h","requires":[],"size":23234,"version":"2.5.3","binstar":{"package_id":"6674a28d7eb3630506c62372","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"47670af27cfeb804e6acedb453f8a9d67c62af1ea38ccbf716f04f5c6302f3b3"},"ros-jazzy-ament-cmake-gmock-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["gmock","python","ros-jazzy-ament-cmake-gtest","ros-jazzy-ament-cmake-test","ros-jazzy-gmock-vendor","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904279616,"md5":"1884add5942494d20b17c1fa88b396b7","name":"ros-jazzy-ament-cmake-gmock","requires":[],"size":23374,"version":"2.5.3","binstar":{"package_id":"6674a290c650598af657944a","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"29620c84fa56ac741d6b631e6ad4a7d6c53d1be3eff91bbf8b0415c3a76634b1"},"ros-jazzy-ament-copyright-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["importlib-metadata","python","ros-jazzy-ament-lint","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904213905,"md5":"b91e214f41e393566f7436da00feab9a","name":"ros-jazzy-ament-copyright","requires":[],"size":67249,"version":"0.17.1","binstar":{"package_id":"6674a291a2d10e383ff4ab9d","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"75cebb4af385a9e1a3b458e928b5bd30a4df47c23016b173b79ea756a22e4624"},"ros-jazzy-cyclonedds-0.10.5-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["openssl","python","ros-jazzy-iceoryx-binding-c","ros-jazzy-iceoryx-hoofs","ros-jazzy-iceoryx-posh","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0","openssl >=3.4.0,<4.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904294151,"md5":"c9f8885524c9da62e6cddf1301b26793","name":"ros-jazzy-cyclonedds","requires":[],"size":1129025,"version":"0.10.5","binstar":{"package_id":"6674a293cc5a7c2475f4ab97","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"a3f0825b04feac6aa593df15d20ae74b1ef22693d601da1dcf43c0fdfd4cac72"},"ros-jazzy-ament-clang-format-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["clang-format","python","pyyaml","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904427479,"md5":"1146600cf44392416b3d53c7105742a2","name":"ros-jazzy-ament-clang-format","requires":[],"size":30260,"version":"0.17.1","binstar":{"package_id":"6674a2dcee500a2b2d1922bf","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"c6f1c03a506ca2726f9c8619f24dc74a416496c768023938e5155feacee3511a"},"ros-jazzy-ament-index-python-1.8.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904384952,"md5":"33aed84763a82641638afa946c38729e","name":"ros-jazzy-ament-index-python","requires":[],"size":29351,"version":"1.8.1","binstar":{"package_id":"6674a2de3ebd9bb417c12e4b","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"31755c21ffff88a1c614c2ec0e9563e320717e59d7c016cf7d8de1ce7b2c72dc"},"ros-jazzy-domain-coordinator-0.12.0-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904414625,"md5":"45824f8de62ac1ebf1727c91961ce93d","name":"ros-jazzy-domain-coordinator","requires":[],"size":20360,"version":"0.12.0","binstar":{"package_id":"6674a2df1940d61b8344de70","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"d0152300d0547649817184e71cde52ea5a7822aee4c5d6cd79744819aa6751a0"},"ros-jazzy-ament-cmake-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["cmake","python","ros-jazzy-ament-cmake-core","ros-jazzy-ament-cmake-export-definitions","ros-jazzy-ament-cmake-export-dependencies","ros-jazzy-ament-cmake-export-include-directories","ros-jazzy-ament-cmake-export-interfaces","ros-jazzy-ament-cmake-export-libraries","ros-jazzy-ament-cmake-export-link-flags","ros-jazzy-ament-cmake-export-targets","ros-jazzy-ament-cmake-gen-version-h","ros-jazzy-ament-cmake-libraries","ros-jazzy-ament-cmake-python","ros-jazzy-ament-cmake-target-dependencies","ros-jazzy-ament-cmake-test","ros-jazzy-ament-cmake-version","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904413545,"md5":"f3967bb66d23d72bda63df3b39a7e9b2","name":"ros-jazzy-ament-cmake","requires":[],"size":21647,"version":"2.5.3","binstar":{"package_id":"6674a2eda2d10e383ff4ab9f","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"879800be58bd6b9d1fe9e84eb67b3bb0ff80e5d0f66097c61c3ad719c079b9b1"},"ros-jazzy-ament-cppcheck-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["cppcheck","python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904453956,"md5":"ccd02f76b244f3ebb219025aa80aa8fd","name":"ros-jazzy-ament-cppcheck","requires":[],"size":29603,"version":"0.17.1","binstar":{"package_id":"6674a2ee7aab843f03579451","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"872c74495b2f64463e4048cf5e4acaebcdfec5fbbbda6d26c4ae15d9a4cc6f45"},"ros-jazzy-ament-cpplint-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904441623,"md5":"e4f052a60ee8e49e969ef003e313e7b5","name":"ros-jazzy-ament-cpplint","requires":[],"size":175937,"version":"0.17.1","binstar":{"package_id":"6674a2eff3b3829c06f4ab96","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"bef8aea6db7343b4f095ac9bc155654f03ea14112327dd9a0dc568dee7447dc6"},"ros-jazzy-ament-lint-cmake-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904382887,"md5":"8c88265f085a3c6dee467e8ed355cc7f","name":"ros-jazzy-ament-lint-cmake","requires":[],"size":39911,"version":"0.17.1","binstar":{"package_id":"6674a2f1e9156fea239d9855","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"7d155b412e7baf6f47858d37cee1f2a82a86d757f60a5e0e53bf2b72e3b12bcc"},"ros-jazzy-ament-xmllint-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["libxml2","python","ros-jazzy-ament-lint","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904429253,"md5":"821afb338b19207849c04a31ea79ae43","name":"ros-jazzy-ament-xmllint","requires":[],"size":27739,"version":"0.17.1","binstar":{"package_id":"6674a2f2c88619e4bd9d9855","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"e3f05c279291605cfebdd9fcf4f2bba63f931df30df6084cf2475df5d5deb6f2"},"ros-jazzy-pybind11-vendor-3.1.2-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["pybind11","python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904636647,"md5":"22f5d57c24e2c44ed7433aeb9ad1a00a","name":"ros-jazzy-pybind11-vendor","requires":[],"size":21544,"version":"3.1.2","binstar":{"package_id":"6674a343ea2199b4dff4ab97","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"c39479bc207e13376b9a89f5bb5e179b43aaa21e42c49bf17d5367ee9b07532f"},"ros-jazzy-rpyutils-0.4.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904605599,"md5":"1edea5cb5f6b19731b306664581b5de5","name":"ros-jazzy-rpyutils","requires":[],"size":25405,"version":"0.4.1","binstar":{"package_id":"6674a3449d4c1e9d4f44de6f","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"73f43e92b4faa2d4a47c9a0de4d0cceb1a5811f21ec3ec36c5d91b5d0b994b9f"},"ros-jazzy-tinyxml2-vendor-0.9.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","tinyxml2","__osx >=10.14","libcxx >=19","__osx >=10.14","numpy >=1.26.4,<2.0a0","tinyxml2 >=10.0.0,<11.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904654370,"md5":"c2c141c7211bf9210e494d4b52519ac2","name":"ros-jazzy-tinyxml2-vendor","requires":[],"size":22362,"version":"0.9.1","binstar":{"package_id":"6674a349598bb36cab57944c","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"a083cf589fcd08ef9c1186441ae9b9c43e9467cb0fa41a81d37a94740ca73cf2"},"ros-jazzy-ament-cmake-auto-2.5.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake","ros-jazzy-ament-cmake-gmock","ros-jazzy-ament-cmake-gtest","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735905057732,"md5":"1019bfcd18921242bdb0992b690879ba","name":"ros-jazzy-ament-cmake-auto","requires":[],"size":25496,"version":"2.5.3","binstar":{"package_id":"6674a34992c307f5a7a7ce6f","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"7b5533a18d82ef4f8be2aed5e065ba3bdd3ef43ae5ab9ffdfca322f87dd83c1a"},"ros-jazzy-yaml-cpp-vendor-9.0.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","yaml-cpp","__osx >=10.14","libcxx >=19","yaml-cpp >=0.8.0,<0.9.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904669561,"md5":"86e1de61f86aeb574ab2476925ecbb53","name":"ros-jazzy-yaml-cpp-vendor","requires":[],"size":21440,"version":"9.0.1","binstar":{"package_id":"6674a34abfe0729017c62374","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"9fdeb39caa1e53399eb77fe1dced14dc1a7df46c8c57f4d5fbca6600aabc0659"},"ros-jazzy-liblz4-vendor-0.26.6-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["lz4","python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904774628,"md5":"ae7936ef64022f0373561fc7b8a6605a","name":"ros-jazzy-liblz4-vendor","requires":[],"size":22412,"version":"0.26.6","binstar":{"package_id":"6674a34bb60870276744de75","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"b3e44d3bddbbe33816e0ea251bb179b10131b6048352d702f5759893a07c5ce1"},"ros-jazzy-zstd-vendor-0.26.6-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","zstd","__osx >=10.14","libcxx >=19","__osx >=10.14","ros2-distro-mutex >=0.6.0,<0.7.0a0","zstd >=1.5.6,<1.6.0a0","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904684917,"md5":"47ef702a02907b0a45bfc4123b4b2851","name":"ros-jazzy-zstd-vendor","requires":[],"size":22297,"version":"0.26.6","binstar":{"package_id":"6674a34dc42c2ed11157944f","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"e4b4435bea9d13cc28bc5c7e8a68b1cb3085d9509f76b97407293eb1dac421e2"},"ros-jazzy-sqlite3-vendor-0.26.6-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","sqlite","__osx >=10.14","libcxx >=19","__osx >=10.14","python_abi 3.11.* *_cp311","libsqlite >=3.47.2,<4.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904824578,"md5":"dd4ddc6de48d1e0b84b16e2d66c44c80","name":"ros-jazzy-sqlite3-vendor","requires":[],"size":22845,"version":"0.26.6","binstar":{"package_id":"6674a34ffce8b5e8a96af057","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"8909eb891aa3c0d8e13b358c7f638dda610053f6c9f7c5260565b9220e3df36b"},"ros-jazzy-ament-cmake-lint-cmake-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-test","ros-jazzy-ament-lint-cmake","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904494669,"md5":"d6fbe098ed73a7087b196d88a5add0f0","name":"ros-jazzy-ament-cmake-lint-cmake","requires":[],"size":20825,"version":"0.17.1","binstar":{"package_id":"6674a379b5589307ae1922c7","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"d5b44820b31c85d649313b12b2f115d9e21e81539f25bf61dd9e4615cc35ac20"},"ros-jazzy-fastcdr-2.2.5-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904710062,"md5":"9003935ecbd0d45236acb9176012ff86","name":"ros-jazzy-fastcdr","requires":[],"size":80140,"version":"2.2.5","binstar":{"package_id":"6674a37cbedcf6d9e79d9859","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"49da0af889c918ac4e944cf8c83837ddc6e11a9b3ca49bf65b1420000ae224ab"},"ros-jazzy-launch-3.4.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["importlib-metadata","lark-parser","python","pyyaml","ros-jazzy-ament-index-python","ros-jazzy-osrf-pycommon","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904669458,"md5":"d667eb750ab96fedbe552c46608e2250","name":"ros-jazzy-launch","requires":[],"size":238734,"version":"3.4.3","binstar":{"package_id":"6674a37ff1e91f8ddc6af059","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"c0e77af996ce8490c086c0eb110945454e5498a1a1d46d86a2e9819c7e5ba59a"},"ros-jazzy-rosidl-cli-4.6.5-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["argcomplete","importlib-metadata","python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904693018,"md5":"b2964ae1b4f5f72c654a3348bc24c59c","name":"ros-jazzy-rosidl-cli","requires":[],"size":38665,"version":"4.6.5","binstar":{"package_id":"6674a38184d8e3c9b344de79","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"8a6dfcba38931bb37c93c6f6fdb1a5f0bc0dbada74205aaff623f76b1749fbfc"},"ros-jazzy-uncrustify-vendor-3.0.0-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","uncrustify","__osx >=10.14","libcxx >=19","uncrustify >=0.74.0,<0.75.0a0","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904539712,"md5":"bd1a47c606607c6623c8d608fb559c5a","name":"ros-jazzy-uncrustify-vendor","requires":[],"size":566616,"version":"3.0.0","binstar":{"package_id":"6674a38358ad9e4bfa9d9857","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"57135663cf7e9481382f51c1bec999877543c0728483e5ce131326dc1f03f095"},"ros-jazzy-ament-cmake-copyright-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-test","ros-jazzy-ament-copyright","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735907636376,"md5":"95fb674ea69ba5c218659f7c48c7f71d","name":"ros-jazzy-ament-cmake-copyright","requires":[],"size":21130,"version":"0.17.1","binstar":{"package_id":"6674a3f11940d61b8344de72","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"24737e685aa56107177ee3c096664816f5e595a80aca02fff615c22ea5730bdd"},"ros-jazzy-ament-uncrustify-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ros-workspace","ros-jazzy-uncrustify-vendor","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735907691992,"md5":"9f98f87a471fe9a481bfe42f665bbb0f","name":"ros-jazzy-ament-uncrustify","requires":[],"size":68466,"version":"0.17.1","binstar":{"package_id":"6674a3f2b5589307ae1922c9","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"dc69a3a67e7bac767959918408305aab992259d8230a658f7b5885cdc1fd7fba"},"ros-jazzy-launch-xml-3.4.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-launch","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735907730879,"md5":"8fda292664fdf4dc94f3bdcb8c153e1e","name":"ros-jazzy-launch-xml","requires":[],"size":25554,"version":"3.4.3","binstar":{"package_id":"6674a3f4bcb5ffd4511922bf","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"a5b11f527df1f1da833fdee04ba8ad49abf99c5ba3ca9531001de1d7ed9a17a0"},"ros-jazzy-launch-yaml-3.4.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-launch","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735907711449,"md5":"9822dd95fa80a5dd0bff7be069e5a0ec","name":"ros-jazzy-launch-yaml","requires":[],"size":26173,"version":"3.4.3","binstar":{"package_id":"6674a3f58eba59d71d44de71","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"aa84ce5a1eccb85e735061cb0e2dc0bb234b064c37143584165fc42853b989bf"},"ros-jazzy-mcap-vendor-0.26.6-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-liblz4-vendor","ros-jazzy-ros-workspace","ros-jazzy-zstd-vendor","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735907750349,"md5":"81d6fa81b9ec1fdb6de2484665074489","name":"ros-jazzy-mcap-vendor","requires":[],"size":171703,"version":"0.26.6","binstar":{"package_id":"6674a3f7b4d9bfd6ec579457","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"edff7a4d571a38a03f68aae6c56834878a7e3a0f3e9c9eb76b1f4eb06f8f6d23"},"ros-jazzy-ament-cmake-clang-format-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-clang-format","ros-jazzy-ament-cmake-test","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735908110984,"md5":"a791c7317885866ea606c10c12172242","name":"ros-jazzy-ament-cmake-clang-format","requires":[],"size":21821,"version":"0.17.1","binstar":{"package_id":"6674a446c88619e4bd9d985a","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"dc25dd72e162974f1facf3d53713f7df8a07bf18433d523d45332651b1223b3f"},"ros-jazzy-ament-cmake-cppcheck-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-core","ros-jazzy-ament-cmake-test","ros-jazzy-ament-cppcheck","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735908040768,"md5":"f51f5d0ba4e1496e93bdaed21c82ea37","name":"ros-jazzy-ament-cmake-cppcheck","requires":[],"size":22746,"version":"0.17.1","binstar":{"package_id":"6674a447c168245e946af059","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"c3aa2349bfdece6ae9a3db9f184af18ceb3669e12a6ced7f5fda39a336240e66"},"ros-jazzy-eigen3-cmake-module-0.3.0-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735908093460,"md5":"4b3a46313c1a4b3507287fbbdcaae9ec","name":"ros-jazzy-eigen3-cmake-module","requires":[],"size":21966,"version":"0.3.0","binstar":{"package_id":"6674a4489005ffd21cc62370","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"184bc4b6a25ece04e830e22db32a06e424d8d7e9068ba5a6db4b0812e1abd38e"},"ros-jazzy-launch-testing-3.4.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["pytest","python","ros-jazzy-ament-index-python","ros-jazzy-launch","ros-jazzy-launch-xml","ros-jazzy-launch-yaml","ros-jazzy-osrf-pycommon","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735908076943,"md5":"c1cba4b08a46424e1afb93c627829bfd","name":"ros-jazzy-launch-testing","requires":[],"size":119300,"version":"3.4.3","binstar":{"package_id":"6674a44a8c7b2f8b2ca7ce72","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"31823b246a979df1d8e11d8a8fcf10a1d3f7560ee3900deead4068ee23a740f4"},"ros-jazzy-ament-cmake-cpplint-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-test","ros-jazzy-ament-cpplint","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735907997390,"md5":"a3422936655917db82e2e55def43ad21","name":"ros-jazzy-ament-cmake-cpplint","requires":[],"size":21758,"version":"0.17.1","binstar":{"package_id":"6674a44d526ed064dbc62376","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"1e403e615331605305797b5c4acd1a7954c15161a6469ca262ac2ef9635123b8"},"ros-jazzy-ament-cmake-flake8-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-test","ros-jazzy-ament-flake8","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735907984268,"md5":"8878d72a61035546d0f9c6cfa93392cd","name":"ros-jazzy-ament-cmake-flake8","requires":[],"size":22783,"version":"0.17.1","binstar":{"package_id":"6674a44fe339ff3360579449","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"d8e972377c5cce3865dd221430e6126615a7864e3643ee42ade2a2c560d9aa38"},"ros-jazzy-ament-cmake-pep257-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-test","ros-jazzy-ament-pep257","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735907965289,"md5":"52381956aca2880bdd541403a9a86617","name":"ros-jazzy-ament-cmake-pep257","requires":[],"size":21549,"version":"0.17.1","binstar":{"package_id":"6674a450cc5a7c2475f4ab99","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"6727cdd33c9fd03b2e93d612f7ee27871ec6a6a2e96faeafe8901011719d7cf7"},"ros-jazzy-ament-cmake-uncrustify-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-test","ros-jazzy-ament-uncrustify","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735907947856,"md5":"9dd2d227766f4026303e89f7cd2e6a76","name":"ros-jazzy-ament-cmake-uncrustify","requires":[],"size":22143,"version":"0.17.1","binstar":{"package_id":"6674a451dbc9a5ddb557944c","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"4433450b2ae9cb3fe6c6eab408ccae12119c35d8a09e6ee95ce0968175306499"},"ros-jazzy-ament-cmake-xmllint-0.17.1-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake-test","ros-jazzy-ament-xmllint","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735907913065,"md5":"7d6a385d4830fd1cff6a4624ae3800a4","name":"ros-jazzy-ament-cmake-xmllint","requires":[],"size":21309,"version":"0.17.1","binstar":{"package_id":"6674a452bb59b798ed1922c1","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"2d39ba95727673a1d04a8a448e205b52da92ef52fcdcc6da8b888984e68e6cd5"},"ros-jazzy-urdfdom-4.0.1-h0dc7051_0.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"h0dc7051_0","build_number":0,"depends":["urdfdom ==4.0.1","python 3.11.* *_cpython"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735932357219,"md5":"fa828ad11f537c3df328f1f0df0fb891","name":"ros-jazzy-urdfdom","requires":[],"size":1815,"version":"4.0.1","binstar":{"package_id":"66755349942fb586b6f7dda3","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"9357dcdc2407591372018c60a92361f3d75f5ce08958ec119ded28b4e88c687e"},"ros-jazzy-sdl2-vendor-3.3.0-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","sdl2","__osx >=10.14","libcxx >=19","__osx >=10.14","ros2-distro-mutex >=0.6.0,<0.7.0a0","sdl2 >=2.30.10,<3.0a0","numpy >=1.26.4,<2.0a0","python_abi 3.11.* *_cp311"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735905097506,"md5":"7c45ef91d0b76c18fe5e8286e5aaf614","name":"ros-jazzy-sdl2-vendor","requires":[],"size":21429,"version":"3.3.0","binstar":{"package_id":"66756e06073efbe82e2c5d5c","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"390b51deb2163a5adf5189df752f8a1ef69eec45b0822be2ccaba9be71e42c64"},"ros-jazzy-urdfdom-py-1.2.1-h0dc7051_0.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"h0dc7051_0","build_number":0,"depends":["urdfdom-py 1.2.1.*","python 3.11.* *_cpython"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735932358105,"md5":"086fead10450aabe0e18a88e86ad9377","name":"ros-jazzy-urdfdom-py","requires":[],"size":1841,"version":"1.2.1","binstar":{"package_id":"6777b8a04d249915aae62866","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"c2bc5ae9a7d465edf9bc1c645f4ba33b4e2b82daf2e680d26abe0de29c7a86be"},"ros-jazzy-sdformat-test-files-1.0.2-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["cmake","python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735902818238,"md5":"ff87e9def0e237c598acb53c5b9777a9","name":"ros-jazzy-sdformat-test-files","requires":[],"size":102854,"version":"1.0.2","binstar":{"package_id":"6777be01c6e1dff6c53bfa4e","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"e28186dedb7f6a63f0b65731d00d473a2084c6ea1f347f2c7c5b046fecf2ee4c"},"ros-jazzy-angles-1.16.0-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","ros-jazzy-ament-cmake","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","python_abi 3.11.* *_cp311","ros2-distro-mutex >=0.6.0,<0.7.0a0","numpy >=1.26.4,<2.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904886190,"md5":"41cb2679f9f5a1a57789655e093a42f4","name":"ros-jazzy-angles","requires":[],"size":31116,"version":"1.16.0","binstar":{"package_id":"6777bfe512934ced4901b109","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"b068cd0a58737baf53371ee72a1b1254e44833a0e9120d76616399eaf9878086"},"ros-jazzy-libcurl-vendor-3.4.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["libcurl","pkg-config","python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0","python_abi 3.11.* *_cp311","libcurl >=8.11.1,<9.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904843064,"md5":"05e3ad3947520cc9600259e141933e28","name":"ros-jazzy-libcurl-vendor","requires":[],"size":22150,"version":"3.4.3","binstar":{"package_id":"6777bfed080f624e0c3bfa58","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"724cb80b2855affc1d830a2cd4bf9146292470805018f786b4e0003cd38846a9"},"ros-jazzy-xacro-2.0.11-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["python","pyyaml","ros-jazzy-ament-index-python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","__osx >=10.14","libcxx >=19","__osx >=10.14","python_abi 3.11.* *_cp311","numpy >=1.26.4,<2.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735904864680,"md5":"8cab7edb725feef2b44bfcbd82de8345","name":"ros-jazzy-xacro","requires":[],"size":76315,"version":"2.0.11","binstar":{"package_id":"6777bff40fdc98202abbe846","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"ef2f48bf24a6eae597c70dc255fd7e40c3d57e00a026eab89c6ccd4c8c9f1c71"},"ros-jazzy-gz-dartsim-vendor-0.0.3-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["assimp","bullet","dartsim-cpp","eigen","fcl","fmt","libboost-devel","libccd-double","lz4","python","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","tinyxml2","urdfdom","__osx >=10.14","libcxx >=19","libboost >=1.86.0,<1.87.0a0","tinyxml2 >=10.0.0,<11.0a0","python_abi 3.11.* *_cp311","dartsim-cpp >=6.15.0,<6.16.0a0","urdfdom >=4.0.1,<4.1.0a0","libccd-double >=2.1,<2.2.0a0","numpy >=1.26.4,<2.0a0","fcl >=0.7.0,<0.8.0a0","fmt >=11.0.2,<12.0a0","ros2-distro-mutex >=0.6.0,<0.7.0a0","assimp >=5.4.3,<5.4.4.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735908714936,"md5":"b594b52725611724738d536c832ba5dc","name":"ros-jazzy-gz-dartsim-vendor","requires":[],"size":30219,"version":"0.0.3","binstar":{"package_id":"6777c15c1d825a17294fb946","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"03377263cc316210120392b899e50f9aea61bd7b15ac7c3ba50f06e730bcc753"},"ros-jazzy-gz-ogre-next-vendor-0.0.5-np126py311h2dc9425_1.conda":{"operatingsystem":"darwin","machine":"x86_64","target-triplet":"x86_64-any-darwin","has_prefix":false,"subdir":"osx-64","arch":"x86_64","build":"np126py311h2dc9425_1","build_number":1,"depends":["freeimage","freetype","glslang","libboost-devel","ogre-next","poco","python","rapidjson","ros-jazzy-ros-workspace","ros2-distro-mutex 0.6.* jazzy_*","sdl2","shaderc","tbb","tbb-devel","tinyxml2","xorg-libx11","xorg-libxaw","xorg-libxrandr","xorg-xorgproto","zziplib","__osx >=10.14","xorg-libx11","xorg-libxext","libcxx >=19","__osx >=10.14","ros2-distro-mutex >=0.6.0,<0.7.0a0","poco >=1.14.0,<1.14.1.0a0","glslang >=12,<13.0a0","xorg-libxrandr >=1.5.4,<2.0a0","freetype >=2.12.1,<3.0a0","xorg-libxext >=1.3.6,<2.0a0","tbb >=2022.0.0","sdl2 >=2.30.10,<3.0a0","numpy >=1.26.4,<2.0a0","ogre-next >=2.3.3,<2.3.4.0a0","xorg-libx11 >=1.8.10,<2.0a0","python_abi 3.11.* *_cp311","zziplib >=0.13.69,<0.14.0a0","freeimage >=3.18.0,<3.19.0a0","libboost >=1.86.0,<1.87.0a0","shaderc >=2023.6,<2023.7.0a0","tinyxml2 >=10.0.0,<11.0a0"],"license":"BSD-3-Clause","platform":"osx","timestamp":1735908632758,"md5":"57f30607bab082054167ef2b9e35b48f","name":"ros-jazzy-gz-ogre-next-vendor","requires":[],"size":32104,"version":"0.0.5","binstar":{"package_id":"6777c160726ad61dcbbbe834","owner_id":"667486a72acfb986e6e822d4","channel":"main"},"sha256":"6ddbb8750755c93ea6f278a232863231328c596272da66c9417e3f76573cf99b"}},"info":{"default_numpy_version":"1.7","default_python_version":"2.7","platform":"osx","arch":"x86_64","subdir":"osx-64"}}
\ No newline at end of file