Skip to main content

How to Name Everything

Package naming

Open Robotics (ROS developers) maintains a set of standards called REPs (Robotics Enhancement Proposals), defining many of the conventions that make the ROS ecosystem consistent and usable at scale.

REP-144

There is a standard for package naming in REP-144, please refer to it for more details.

In short REP-144 defines ROS package naming rules to maintain a flat, global OS-level namespace that remains readable and collision-free as the ecosystem grows:

Required rules:

  • Use only lowercase letters (a-z), digits (0-9), and single underscores
  • Start with a letter
  • Avoid consecutive underscores
  • Minimum 2 characters (recommend longer for clarity)

Recommended guidelines:

  • Choose specific, descriptive names (avoid vague terms like utils)
  • Don't include ros in the name unless it's a core package or upstream binding (e.g., opencv3_ros)
  • Check that the name isn't already taken
  • Prefer prefixes when specialized for a project, hardware, robot, or organization (these can be dropped later if the package becomes canonical)

Common suffixes:

  • *_driver – hardware drivers
  • *_msgs – message/service/action definitions
  • *_<library>_plugins – plugins for a specific library
  • *_description – URDF and mesh files
  • *_bringup – robot startup launch files
  • *_launch – general launch file collections
  • *_tests – test-only packages
  • *_tutorials – tutorial content
  • *_demos – demonstration packages

Repository naming

While REP-144 governs package names strictly (used in package.xml), repository names have more flexibility since they're Git metadata rather than OS-level identifiers.

  • Repository names can use hyphens (wavefront-planner) for better readability on GitHub/GitLab
  • Repositories may contain multiple packages, so a 1:1 name match isn't always possible.
Best Practices
  • Repository names can match package names when you have a 1:1 relationship (one package per repo), but it's not mandatory.
  • Use project/organization prefixes to avoid ambiguity:
    • Example: Generic names like mission_core appear global (all-company repository) and can cause confusion; instead use iroc_mission_core to clearly indicate it's a project-specific repository.