# The Anatomy of a Package

This guide explains the structure of a Yak package.

## Package Structure

Packages are simply ZIP archives. Take this simple example…

plankton-0.4.0.zip
├── manifest.yml
├── Plankton.gha
├── Plankton.dll
└── misc/

1. Packages must have a top-level manifest.yml file. Details about the manifest can be found in the Manifest Reference Guide.
2. Any plug-ins (.rhp, .gha, .ghpy files) must be in the top-level directory so that Rhino and Grasshopper can find and load them
3. Each package should have only one plug-in (.gha, .rhp or .ghpy). It is possible to combine plug-ins in one package (e.g. .gha and .rhp) however package restore will only work for the plug-in which matches the details in the manifest.yml file.
5. If you’re packaging a .gha plug-in, you should ensure that the package name and version number in the GH_AssemblyInfo sub-class match those in the manifest.yml file, otherwise package restore may not work