Version: 2019.1 (switch to 2019.2b or 2018.4)
Low-level native plug-in Shader compiler access
Naming your package
Other Versions

Custom packages

The Unity Package Manager is the official package management system for Unity. It does the following:

  • Allows Unity to distribute new features and update existing features quickly and easily.
  • Provides a platform for users to discover and share reusable components.
  • Promotes Unity as an extensible and open platform.

You can use the Package Manager to define Project dependencies, resolve package dependencies, download and add packages as needed, and integrate content in your Projects.

NOTE: For general information on what a package is and how the Unity Package Manager works, see PackagesA package is a collection of Assets to be shared and re-used in Unity. There are two types of packages supported in Unity: Asset packages and packages available through the Unity Package Manager (UPM). Packages available through the Unity Package Manager are a fundamental method of delivering Unity functionality. More info
See in Glossary


Packages can contain the following:

  • C# scripts
  • Assemblies
  • Native plugins
  • Models, Textures, animation and audio clipsA container for audio data in Unity. Unity supports mono, stereo and multichannel audio assets (up to eight channels). Unity can import .aif, .wav, .mp3, and .ogg audio file format, and .xm, .mod, .it, and .s3m tracker module formats. More info
    See in Glossary
    , and other AssetsAny media or data that can be used in your game or Project. An asset may come from a file created outside of Unity, such as a 3D model, an audio file or an image. You can also create some asset types in Unity, such as an Animator Controller, an Audio Mixer or a Render Texture. More info
    See in Glossary

In addition, each package contains a Package manifestEach package has a package manifest, which provides information about the package to the Package Manager. The manifest contains information such as the name of the package, its version, a description for users, dependencies on other packages (if any), and other details. More info
See in Glossary
file that includes information about itself, such as its name, version, a list of its dependents, the URL to its repository, and other information.

Package development works best when you work inside the Unity Editor:

  1. Open the Unity Hub, and create a local empty Project.

  2. In the newly created Project folder, navigate to the Packages folder and create a new subfolder. Make sure you name the subfolder with the same name as your new package. For information about restrictions on package names, see Naming your package.

  3. Implement your tools, libraries, and any Assets your package requires.

  4. Make sure the layout of your package follows the package layout convention for Unity packages.

  5. Fill out all required and mandatory fields in the package manifest (package.json).

  6. Add tests to your package. Tests are essential for Unity to ensure that the package works as expected in different scenarios:
    • Write all your Editor Tests in Tests/Editor.
    • Write all your Playmode Tests in Tests/Runtime.
  7. Rename and update the assembly definition files.

  8. You can update the file every time you publish a new version. Every new feature or bug fix should have a trace in this file. For more details on the chosen changelog format, see Keep a Changelog.

    NOTE: This is optional for packages that you don’t share, but strongly recommended for shared packages, so that users know which version best suits their needs.

  9. You can include licenses and third-party notices in the and THIRD PARTY files.

    NOTE: This is optional for packages that you don’t share, but strongly recommended for shared packages, so that your users don’t misuse your packages or violate any third-party licenses.

  10. Share your package.

Did you find this page useful? Please give it a rating:

Low-level native plug-in Shader compiler access
Naming your package