[Documentation] [TitleIndex] [WordIndex


The manifest (manifest.xml) is a minimal specification about your package and supports a wide variety of ROS tools, from compilation to documentation to distribution. In addition to providing a minimal specification of metadata about your package, an important role of manifests is to declare dependencies in a language-neutral and operating-system-neutral manner. The presence of a manifest.xml file in a directory is significant: any directory within your ROS package path that contains a manifest.xml file is considered to be a package [1].

The bare minimum manifest file is much like a readme file, stating who wrote your package and what license it is under. The license is important as packages are means by which ROS code is distributed. The most common manifest files also include <depend> and <export> tags, which help manage the installation and use of a package.

The <depend> tag points to another ROS package that must be installed. It can have a variety of meanings depending on the contents of the package is it pointing to. For example, for rospy code, a depend declares that the other package should be added to the PYTHONPATH. For roslaunch files, a depend may indicate that this package includes roslaunch files from the other package.

The <export> tag describes language-specific build and runtime flags that should be used by any package that depends on your package. For a package containing roscpp code, an export tag may declare header files and libraries that should be picked by any package that depends on it.

[1]: Packages cannot contain packages.

XML Reference

Please see the manifest.xml tags reference.


  <description brief="one line of text">
    long description goes here, 
    <em>XHTML is allowed</em>
  <author>Alice/alice@somewhere.bar, Bob/bob@nowhere.foo</author>

  <depend package="pkgname"/>
  <depend package="common"/>
  <rosdep name="python" />
  <versioncontrol type="svn" url="https://playerstage.svn.sourceforge.net/svnroot/playerstage/code/player/trunk"/>
    <cpp cflags="-I${prefix}/include" lflags="-L${prefix}/lib -lros"/>
    <cpp os="osx" cflags="-I${prefix}/include" lflags="-L${prefix}/lib -Wl,-rpath,-L${prefix}lib -lrosthread -framework CoreServices"/>


Types of Dependencies

The most common type of dependency that is expressed by a manifest is a dependency on another package, which is expressed by the <depend> tag. As explained earlier, the exact meaning of this dependency depends on the code involved and may either mean a compile-time dependency or runtime dependency.

A manifest can also declare dependencies on thirdparty software provided by the operating system, which is expressed by the <rosdep> tag. For example, your package may need boost:

<rosdep name="boost" />

By declaring this, users can now use the rosdep tool to install boost. rosdep will examine their operating system, find the appropriate package manager and package name, and install it.

A third type of dependency that a manifest can declare is on a version-control system, which is expressed by the <versioncontrol> tag. This option is less common, but occurs in packages that wrap thirdparty code in ROS. This information is primarily used by nightly build tools to streamline the process of authenticating to these external repositories.


rospack parses and retrieves information from manifest.xml files. For example, rospack depends package-name will tell you all of the dependencies of package-name (use depends1 to retrieve the direct dependencies).

Client Library Support

In Python, you can use the roslib.manifest module in the roslib package to retrieve information from manifests. For example:

2011-11-19 12:15