
**colcon** (from *collective construction*) is the official **meta-build tool** of the ROS 2 ecosystem, developed by the Open Source Robotics Foundation (OSRF) and maintained since 2017 as the direct successor to two earlier tools: **catkin_make** / **catkin tools** (ROS 1) and **ament_tools** (early ROS 2). The first ROS 2 distro to fully use colcon was **ROS 2 Bouncy Bolson** (July 2018) — from that point on, colcon has been the standard build tool in every subsequent distribution (Crystal, Dashing, Foxy, Galactic, Humble, Iron, Jazzy, Kilted, Rolling).
## Architecture
colcon is a **modular Python-based command-line platform built around plugins**. The core package is `colcon-core`, surrounded by a dozen-plus official plugins distributed via PyPI: `colcon-common-extensions` (the umbrella meta-package), `colcon-cmake` (build CMake / ament_cmake packages), `colcon-python-setup-py` (ament_python-style Python packages), `colcon-ros` (understands `package.xml` semantics), `colcon-cd` (shell helper), `colcon-mixin` (predefined build option sets), `colcon-defaults`, `colcon-bash` / `colcon-zsh` (autocomplete), and many more.
## Key features
- **Package discovery** — automatically finds all packages in a tree (`package.xml`, `setup.py`, plain `CMakeLists.txt`) and builds the dependency graph.
- **Topological sort** — builds packages in the correct order (build_depend / exec_depend from `package.xml`).
- **Parallel build** — `--parallel-workers N`, isolated build environments (`--symlink-install`).
- **Selective building** — `--packages-select`, `--packages-up-to`, `--packages-above`, `--packages-skip`.
- **Testing** — `colcon test` + `colcon test-result` aggregating gtest / pytest / launch_test results.
- **CI integration** — first-class GitHub Actions support (`ros-tooling/setup-ros`, `ros-tooling/action-ros-ci`) and Jenkins (jenkins.ros.org).
- **Mixins** — `colcon build --mixin release` (predefined presets for Release / Debug / coverage / asan).
## Developer workflow
Typical cycle: `colcon build --symlink-install` → `source install/setup.bash` → `colcon test` → `colcon test-result --verbose`. For a single package during iteration: `colcon build --packages-select my_pkg --symlink-install`.
## Status and maintenance
colcon is **actively maintained** by OSRF and the ROS 2 community (Dirk Thomas — original author, now an Open Robotics team plus external contributors). License: Apache 2.0. All repositories live under the GitHub `colcon/` organization. Distribution: PyPI (`pip install -U colcon-common-extensions`) and apt packages from the ROS 2 buildfarm (`ros-<distro>-ros2cli` pulls colcon as a dependency).
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.
**Every ROS 2 distribution since Bouncy Bolson (2018)** — colcon is the standard build tool in Crystal, Dashing, Eloquent, Foxy, Galactic, Humble, Iron, Jazzy, Kilted, and Rolling. **NVIDIA Isaac ROS** — uses colcon to build all packages in `~/workspaces/isaac_ros-dev/`. **MoveIt 2** — the MoveIt 2 workspace builds via `colcon build --mixin release`. **Nav2** — full ROS 2 navigation builds with colcon. **ROS 2 CI farm (jenkins.ros.org)** — every pull request to `ros2/ros2` triggers a colcon build on 4 platforms (Ubuntu 22.04, 24.04, Windows 11, RHEL 9). **GitHub Actions** — `ros-tooling/action-ros-ci@v0.3` ships colcon as the default builder for over 2,000 public ROS 2 repositories.
The colcon ecosystem on GitHub: the `colcon/` organization comprises ~35 repositories (colcon-core, colcon-cmake, colcon-python-setup-py, colcon-ros, colcon-mixin, etc.), totaling ~3,200 stars, ~600 forks, and ~50 active contributors in 2025. The `colcon-common-extensions` PyPI package gets ~280,000 downloads per month (2025). ROS Discourse forum — the 'colcon' category contains ~1,500 threads and ~12,000 posts. answers.ros.org — ~6,000 questions tagged `colcon`.
A ROS 2 Humble desktop workspace build can consume 8-15 GB of disk space (build/install/log).
License family: Permissive
Current series with fixes for ROS 2 Kilted Kaiju. Better warning reporting from CMake 3.28+, parsing of `colcon.pkg` files in Python 3.13.
Python 3.12 support (Ubuntu 24.04 / ROS 2 Jazzy). Plugin API stabilization, deprecation of legacy entry points.
Python 3.10 support (Ubuntu 22.04 / ROS 2 Humble). Argument parser refactor, improved diagnostics.
Added mixin system: predefined build option presets (release, debug, coverage, asan).
Umbrella package bundling colcon-cmake, colcon-python-setup-py, colcon-ros, colcon-output. Standard install for ROS 2 Bouncy.
First public release on PyPI. Core command-line framework with plugin system.