
**bloom** is the official **release management tool** for the ROS and ROS 2 ecosystem, created by Willow Garage and currently maintained by Open Robotics / OSRF. Its role is to automate the process of publishing ROS packages to the **ROS buildfarm** (jenkins.ros.org / build.ros2.org), which then builds binary `.deb` (Debian/Ubuntu) and `.rpm` (RHEL/Fedora) packages and publishes them in the official apt/yum repositories (`packages.ros.org`).
## Release workflow
Every ROS package maintainer who wants their package to appear in the official `apt install ros-humble-my-package` must go through the bloom process:
1. **Tag a release** — e.g. `git tag 1.2.3 && git push --tags` in the source package repo.
2. **bloom-release** — `bloom-release --rosdistro humble --track humble my_package` — bloom clones the release repo (`my_package-release.git`), pulls the source tag, generates `debian/control`, `debian/rules`, `debian/changelog` from `package.xml`, creates a `debian/humble/my_package` branch, and pushes to GitHub.
3. **Pull request to ros/rosdistro** — bloom automatically opens a PR to [`ros/rosdistro`](https://github.com/ros/rosdistro) with a new `version: 1.2.3` entry in `humble/distribution.yaml`.
4. **Code review + merge** — the Open Robotics team merges the PR.
5. **Buildfarm** — jenkins.ros.org detects the change in `distribution.yaml`, builds packages for every supported platform (Ubuntu Jammy amd64 / arm64, RHEL 9, etc.) and pushes them to `packages.ros.org`.
## Key commands
- `bloom-release` — end-to-end release flow (tag → debianize → PR).
- `git-bloom-config` — configure tracking branches (release repo).
- `git-bloom-import-upstream` — import a new upstream version into the release repo.
- `git-bloom-generate` — generate `debian/` or `rpm/` artifacts for a specific platform.
- `git-bloom-release` — publish the release branches.
## Architecture
bloom is written in Python, uses **GitPython** for operations on the release repo, **rosdistro** for validating distribution.yaml entries, and **catkin_pkg** for parsing `package.xml`. Package generators: `bloom.generators.debian` (dpkg) and `bloom.generators.rpm` (rpmbuild). Supports both ROS 1 and ROS 2 simultaneously — one bloom handles every distribution from Indigo (ROS 1) to Rolling (ROS 2).
## Status and maintenance
bloom is **actively maintained** by OSRF and Open Robotics, though in 'mature / stable' mode — the feature set has been stable since ~2019, with changes mainly tracking new OS support (Ubuntu Noble, RHEL 10) and new ROS distros. License: BSD 3-clause. Repository: [`ros-infrastructure/bloom`](https://github.com/ros-infrastructure/bloom). Distribution: PyPI (`pip install -U bloom`) and apt (`python3-bloom`).
A Developer Tool is software designed to support the development workflow, including configuration, debugging, testing, monitoring, validation, and integration of robotic and embedded systems. Examples include IDE plugins, visual debuggers, log analysers, hardware-in-the-loop (HIL) test harnesses, and code-generation utilities specific to robotics platforms.
A CLI Tool (Command-Line Interface Tool) is a program run from a terminal or shell, used for administration, integration, configuration, testing, and diagnostics of robotic devices and software systems. CLI tools are common in robotics workflows for flashing firmware, configuring network settings, running diagnostics, launching processes, and automating repetitive tasks in CI/CD pipelines.
A set of official command-line tools supporting the ROS / ROS 2 developer workflow: building multi-package workspaces, resolving system dependencies, and packaging for binary distribution. Includes colcon, rosdep, bloom, and others.
**~3,500 ROS packages** in `packages.ros.org` (every one of them was at some point released by bloom). **Every week** Open Robotics merges ~30-50 bloom-generated PRs into `ros/rosdistro`. **NVIDIA Isaac ROS** — every Isaac ROS binary package (`isaac_ros_*`) is released to `packages.ros.org` via bloom. **MoveIt 2**, **Nav2**, **ros2_control**, **rmw_*** implementations, **rclcpp**, **rclpy** — all core ROS 2 packages are released through bloom. **Robotis OP3**, **Clearpath Husky/Jackal**, **Franka Robotics** — examples of companies using bloom for their official ROS packages.
Repository ros-infrastructure/bloom: ~200 stars, ~190 forks, ~80 contributors (2025). PyPI `bloom`: ~25,000 downloads per month. ros/rosdistro: ~700 stars, ~1,100 forks, ~700 unique contributors (every ROS package maintainer must open a PR to rosdistro via bloom). ROS Discourse: ~400 threads tagged `bloom` / `release`. ROS REP-141 (the release process) and REP-149 (`package.xml` format 3) define the semantics used by bloom.
A release repo (e.g. my_package-release.git) typically occupies 2-10 MB. The local working copy is kept in `/tmp/bloom-*` during the release.
License family: Permissive
Current series with fixes for ROS 2 Kilted Kaiju. Better error reporting for rosdistro PRs.
Ubuntu Noble 24.04 (ROS 2 Jazzy) support. Better semantic-version tag handling.
Ubuntu Jammy 22.04 (ROS 2 Humble) support. Minor logging improvements.
ROS 2 support (Foxy, Eloquent). Bloom handles ROS 1 and ROS 2 in parallel — single binary, two code paths.
ROS Kinetic support. RPM generator (Fedora / CentOS). API stabilization.
Refactor for ROS Indigo, introduction of tracks (tracking multiple upstream versions in parallel), pull-request workflow to rosdistro.
First version created at Willow Garage. Debian-only (dpkg-buildpackage) support for ROS Fuerte.