Package manifest XML tags reference

Manifests always have the filename manifest.xml.

Manifests must use valid XML syntax, including escaping special characters such as <, >, and & when they are used inside strings (use &lt;, &gt;, and &amp;, respectively).

Required Tags

The required set of tags in a manifest.xml file is very minimal and only provides the most basic metadata about your package, including what it is, who wrote it, and who can use it.

Optional Tags

The most common optional tags are <depend> and <url>. We strongly recommend the use of the <url> tag to point users to a website where they can find out more information about your stack. This website is most commonly a wiki page on



Description of your package. It may be multi-line and include XHTML.


brief="brief text" (optional)
One-line summary of your Package. Useful for UI displays where the package name isn’t sufficiently descriptive.


<description brief="ROS for Python">
   Python implementation of the ROS master/node APIs and client library.



Name of license for this package, e.g. BSD, GPL, LGPL. In order to assist machine readability, only include the license name in this tag. For any explanatory text about licensing caveats, please use the <description> tag.

Most common open-source licenses are described on the OSI website.

Commonly used license strings:

  • Apache 2.0
  • BSD
  • Boost Software License
  • GPLv2
  • GPLv3
  • LGPLv2.1
  • LGPLv3
  • MIT
  • Mozilla Public License Version 1.1
  • ZLib
  • wxWindows


url="license url" (optional)
For lesser-known licenses, it is helpful to add this attribute with a link to the text of the license.





Name and contact information for the package. If there are multiple authors, use a comma-separated list in a single author tag.


<author>Alyssa P. Hacker/, Norman Contributor/</author>


Declare a ROS package that this package depends on.


Name of ROS package dependency.


<depend package="pkgname"/>


Declare an external dependency that this package requires and can be installed via rosdep. These external dependencies are generally libraries that can be installed by OS package managers, like apt.


Name of rosdep dependency.


<rosdep name="boost"/>

<url> tag


Web site for your package. This is important for guiding users to your online documentation.




The <export> ... </export> portion of the manifest declares various flags and settings that a package wishes to export to support tools, such as CMake. This section is extensible by individual tools and these properties can be extracted from the command-line using the rospack tool.


You are free to add your own XML elements to the <export> section of a manifest. This is used by a variety of packages for functionality such as plugins. Tags currently used include:

export: <cpp>

Export flags to the make compiler. These flags are made available to users of this package, not the package itself. This is not the place to put flags that you’ll need in building your package. Instead, encode those needs in the [[CMakeLists|CMakeLists.txt]] file, using standard CMake macros, such as include_directories() and target_link_libraries().


cflags export value.
lflags export value.
Restricts settings to a particular OS.


<cpp cflags="-I${prefix}/include" lflags="-L${prefix}/lib -Wl,-rpath,${prefix}/lib -lros"/>
<cpp os="osx" cflags="-I${prefix}/include" lflags="-L${prefix}/lib -Wl,-rpath,${prefix}/lib -lrosthread -framework CoreServices"/>

Note the use of -Wl,-rpath,${prefix}/lib. This tells the linker to look in ${prefix}/lib for shared libraries when running an executable. This flag is necessary to allow the use of shared libraries that reside in a variety of directories, without requiring the user to modify LD_LIBRARY_PATH. Every time you add a -Lfoo option to your exported lflags, add a matching -Wl,-rpath,foo option. The -Wl options can be chained together, e.g.: -Wl,-rpath,foo,-rpath,bar.

export: <python>

Export a path other than the default ${prefix}/src to the PYTHONPATH.


Path to append to PYTHONPATH.


<python path="${prefix}/different_dir"/>

export: <rosdoc>

Override settings in the rosdoc documentation generator. Currently this is used to disable auto-generated code documentation on the package. This is common for thirdparty packages, which have their own documentation. This tag enables packages to link to this external documentation.


external="http://link" (optional)
URL to external documentation. rosdoc will not run a documentation tool (e.g. Doxygen) on this package.
config="rosdoc.yaml" (optional)
Name of rosdoc configuration file.


External API documentation:

<rosdoc external="http://external/documentation.html"/>

Using an external config file:

<rosdoc config="rosdoc.yaml"/>


excludes="build" (optional)
Path to exclude (see Doxygen documentation on EXCLUDES).
file-patterns="*.c *.cpp *.dox" (optional)
Patterns for files to include (see Doxygen documentation on FILE_PATTERNS).

export: <roslang>

This tag should only be used by ROS client libraries, such as roscpp and rospy.

The <roslang> export specifies a CMake file that should be exported to the rosbuild system. The CMake rules will be exported to every ROS package, which is necessary for functionality such as message and service generation.


CMake file.


<roslang cmake="${prefix}/cmake/rospy.cmake"/>

export: <roswtf>

Declare a roswtf plugin.


Python modulename to export as a [[roswtf]] plugin.


<roswtf plugin="tf.tfwtf" />


Status of the package in the review process (Design, API, and Code review). See QAProcess. Packages that have not yet been reviewed should be marked as “experimental”.


<review status="experimental" notes="reviewed on 3/14/09" />


See list of valid review statuses.
notes="notes on review status" (optional)
Notes on review status, such as date of last review.