# Repository structure

## Overview

> [!NOTE]
>
> **`repositories/*.repos` files**
>
> Visit for more information: [Working with .repos files](<../repos-files/index.md>)

Autoware has the following repository structure defined by the [`autoware.repos`](<https://github.com/autowarefoundation/autoware/blob/main/repositories/autoware.repos>) file:

An arrow points from a group of repositories to the repositories that build on it.

> [!NOTE]
>
> The diagram shows the repositories of Autoware 2.0.0. It leaves out some external packages of Universe, for example vendor packages of third-party libraries.

## Important repositories

Here is an overview of the most important repositories:

### `autoware_core`

- Contains high-quality, well-tested packages essential for self-driving.
- It has sensing, perception, localization, planning, control packages.
- Maintained by the Autoware Foundation.

### `autoware_universe`

- Contains experimental, cutting-edge packages useful for self-driving.
- It has sensing, perception, localization, planning, control packages.
- Maintained by the Autoware Foundation and the community.

  - Hosted under autowarefoundation organization. But through the `CODEOWNERS` mechanism, the community can also maintain the repository.

### `autoware_msgs`

- Contains the message definitions for **inter-component** communication. (for example, perception to planning)
- Can also be used by simulation software to communicate with Autoware.

### `autoware_internal_msgs`

- Contains the message definitions for **intra-component** communication. (for example, within perception)

### `autoware_adapi_msgs`

- Contains the message definitions for **external API communication** between Autoware and **outside systems**  
  (for example, vehicle HMI, remote operators, fleet management systems, simulators, or user applications)

### `autoware_launch`

- Contains launch files for Autoware.
- Able to launch multiple configurations of Autoware such as planning simulation, end-to-end simulation, rosbag-replay simulation, etc.

### `autoware_tools`

- Contains many useful tools for Autoware development.
- These are not expected to run during self-driving. Although some tools are helpful for diagnostics and debugging.
- Pulled by the [`repositories/tools.repos`](<https://github.com/autowarefoundation/autoware/blob/main/repositories/tools.repos>).

### `autoware_utils`

- Contains many sub-packages for common utilities such as `autoware_utils_math`, `autoware_utils_geometry`, `autoware_utils_system`, etc.

### `autoware_simple_planning_simulator`

- Contains the packages for planning simulation: the simple planning simulator, the dummy perception publisher, and a learning-based vehicle model.
- These packages came from Autoware Universe. They give a standalone simulation environment for testing and development.

### `autoware_system_designer`

- Contains a toolset to describe an Autoware system in YAML files: its nodes, modules, and connections.
- It generates system artifacts from these files, for example ROS 2 launch files, diagrams, and parameter templates.

### `agnocast`

- Contains Agnocast, a true zero-copy inter-process communication (IPC) middleware that is compatible with `rclcpp`.
- It supports all ROS message types, including the message structures that `rosidl` generates.
