Every robotics team I know has the same “starter project” repo — a copy-paste graveyard. It’s stale, half-migrated to Humble and half to Jazzy, launches have quirky names, and CI exists on exactly one project. Onboarding a new member means a 20-minute tour of “here’s how we do it in this repo.”
ros2 pkg create only gives you a single empty package. Nobody’s starter is a single package.
What it does
One command turns a blank directory into a complete, opinionated, ready-to-build ROS 2 project:
cargo install ros2-project-gen
ros2-project-gen init my_robot --template minimal_ros2
cd my_robot/ros2_ws && colcon build # ✅ builds on day one

Why it’s different
- Full projects, not packages — workspace + multiple packages + launch files + GitHub Actions CI + docs + tests.
- Multi-language in one workspace —
rclcpp,rclpy, andrclrscompiling side-by-side. Theminimal_ros2template proves it: onecolcon buildruns a C++, a Python, and a Rust talker on topics that cross language boundaries. - Perception-friendly — the
ai_perceptiontemplate ships a Rust YOLOv8 inference node (ONNX Runtime), no Python glue required. - Won’t let you break your environment —
doctorchecks rustc, cargo, cmake, colcon, and ROS 2 before you start;listshows what’s available.
Six templates so far: minimal, perception, minimal_ros2, ai_perception, matlab_bridge, visualization.
Try it
cargo install ros2-project-gen
ros2-project-gen init test_bot
It’s brand new
This is v0.1.0 — there’s a lot left on the roadmap (more templates, Windows runners for the generated CI, template authoring docs, and probably UX feedback I haven’t imagined).
What’s the first thing that breaks when your team’s starter repo goes stale?