# What is a Deployment Definition

> Understand how Deployment Definition files group deployable assets by directory.

## Definition

A Deployment Definition (`.ddef` extension) file is a logical grouping of deployable assets that is based on its location in a directory.
A Deployment Definition contains all files in its directory and sub-directories, unless another Deployment Definition is found.
Only a single Deployment Definition may exist in a single directory.

## Deployment Definition Structure

A deployment definition is represented by the following json.
The `name` is used to give information when using Deployment Definitions with the UGS CLI.
The `excludePaths` are used to give more flexibility to deployment definitions. More information can be found [here].

```text
{
    "name": "example",
    "excludePaths": [
    ]
}
```

## Example

Given the following hierarchy, the Deployment Definitions `CloudCode.ddef`, `CloudCodeTests.ddef`, and `RemoteConfig.ddef` would be responsible for the following files:

* CloudCode.ddef
  * scriptA.js
    * scriptB.js
* CloudCodeTests.ddef
  * scriptA.test.js
    * scriptB.test.js
* RemoteConfig.ddef
  * configA.rc
    * configB.rc

```text
Assets/
├── DeployableAssets/
│   ├── CloudCode/
│   │   ├── CloudCode.ddef
│   │   ├── scriptA.js
│   │   ├── scriptB.js
│   │   └── Tests/
│   │       ├── CloudCodeTests.ddef
│   │       ├── scriptA_test.js
│   │       └── scriptB_test.js
│   └── Remote Config/
│       ├── RemoteConfig.ddef
│       ├── configA.rc
│       └── configB.rc
```

[here]: ./excludes
