# Package layout

> Follow the recommended folder structure for the manifest, Editor and Runtime assemblies, tests, samples, and documentation.

This is the package layout recommended for custom packages:

```lang-plain
<package-root>
  ├── package.json
  ├── README.md
  ├── CHANGELOG.md
  ├── LICENSE.md
  ├── Third Party Notices.md
  ├── Editor
  │   ├── <company-name>.<package-name>.Editor.asmdef
  │   └── EditorExample.cs
  ├── Runtime
  │   ├── <company-name>.<package-name>.asmdef
  │   └── RuntimeExample.cs
  ├── Tests
  │   ├── Editor
  │   │   ├── <company-name>.<package-name>.Editor.Tests.asmdef
  │   │   └── EditorExampleTest.cs
  │   └── Runtime
  │        ├── <company-name>.<package-name>.Tests.asmdef
  │        └── RuntimeExampleTest.cs
  ├── Samples~
  │        ├── SampleFolder1
  │        ├── SampleFolder2
  │        └── ...
  └── Documentation~
       └── <package-name>.md
```

Many official Unity packages also implement this structure.

| **Location**             | **Description**                                                                                                                                                                                                                                                                                                                         |
| ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `package.json`           | The [package manifest](/engine/6000.0/manual/packages-list/cus-pkg-development/upm-manifest-pkg.md), which defines the package dependencies and other metadata. This file name must be lowercase.                                                                                                                                       |
| `README.md`              | Developer package documentation. This is generally documentation to help developers who want to change the package or push a new change on the package's main branch.                                                                                                                                                                   |
| `CHANGELOG.md`           | Description of package changes in reverse chronological order. It's good practice to use a standard format, like [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).                                                                                                                                                               |
| `LICENSE.md`             | Contains the [package license text](/engine/6000.0/manual/packages-list/cus-pkg-development/cus-legal.md). Usually the Package Manager copies the text from the selected [SPDX list website](https://spdx.org/licenses/).                                                                                                               |
| `Third Party Notices.md` | Contains information that's required to meet [legal requirements](/engine/6000.0/manual/packages-list/cus-pkg-development/cus-legal.md).                                                                                                                                                                                                |
| `Editor/`                | Editor platform-specific Assets folder. Unlike Editor folders under Assets, this is only a convention and doesn't affect the Asset import pipeline. Refer to [Assembly definition and packages](/engine/6000.0/manual/packages-list/cus-pkg-development/cus-asmdef.md) to properly configure Editor-specific assemblies in this folder. |
| `Runtime/`               | Runtime platform-specific Assets folder. This is only a convention and doesn't affect the Asset import pipeline. Refer to [Assembly definition and packages](/engine/6000.0/manual/packages-list/cus-pkg-development/cus-asmdef.md) to properly configure runtime assemblies in this folder.                                            |
| `Tests/`                 | Folder to store any [tests included](/engine/6000.0/manual/packages-list/cus-pkg-development/cus-tests.md) in the package.                                                                                                                                                                                                              |
| `Tests/Editor/`          | Editor platform specific tests folder. Refer to [Assembly definition and packages](/engine/6000.0/manual/packages-list/cus-pkg-development/cus-asmdef.md) to properly configure Editor-specific test assemblies in this folder.                                                                                                         |
| `Tests/Runtime/`         | Runtime platform specific tests. Refer to [Assembly definition and packages](/engine/6000.0/manual/packages-list/cus-pkg-development/cus-asmdef.md) to properly configure runtime test assemblies in this folder.                                                                                                                       |
| `Samples~/`              | Folder to store any [samples included](/engine/6000.0/manual/packages-list/cus-pkg-development/cus-samples.md) in the package.                                                                                                                                                                                                          |
| `Documentation~`         | Folder to store any [documentation included](/engine/6000.0/manual/packages-list/cus-pkg-development/cus-document.md) in the package.                                                                                                                                                                                                   |

Unity ignores the contents of any folder name that ends with the `~` character, and doesn't track them with `.meta` files. However, you need to include `.meta` files for the `Editor`, `Runtime`, and `Tests` folders and their contents in order for them to work properly. For more information on `.meta` files and how Unity uses them for tracking, refer to [Asset workflow](/engine/6000.0/manual/assets-and-media/asset-workflow.md).
