Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


Create custom packages

Understand the development workflow for creating new UPM packages.
Read time 6 minutesLast updated 16 days ago

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 extendable and open platform.
You can use the Package Manager to define project dependencies, resolve package dependencies, download packages, add packages, and integrate content in your projects.
For general information on what a package is and how the Unity Package Manager works, refer to Get started with packages.

Overview

Packages can contain the following:
  • C# scripts
  • Assemblies
  • Native plug-ins
  • Models, Textures, animation and audio clips, and other assets.
Note
Package Manager doesn't support streaming assets in packages. Use the Addressables package instead.
Each package also contains a Package manifest file that includes information such as the package name, its version, a list of its dependencies, and the URL to its repository.

Procedure

To create a new package:
  1. Create an empty shell for the package using one of these methods:
  2. Make sure the layout of your folder structure follows the package layout convention for Unity packages. For example, if you have Editor and Runtime libraries, make sure you store them under the
    Editor
    and
    Runtime
    folders.
  3. If your package includes code, make sure the package layout you created has the necessary assembly definition files. For information about creating and defining assembly definition files, refer to Assembly definition and packages. For additional information, refer to Assembly definitions.
    Note
    If the console window reports a warning after adding an assembly definition file, save your project, close it, then reopen it.
  4. Add your tools, libraries, and any assets your package requires.
  5. Add tests to your package. Tests are essential for ensuring that the package works as expected in different scenarios:
    • Write all your Editor tests in
      Tests/Editor
      .
    • Write all your Play mode tests in
      Tests/Runtime
      .
  6. If you have samples for your package, add them to the proper samples subfolder.
    Note
    Packages can contain only samples, but you can also include samples as part of a tool or template package using the same layout and JSON structure.
  7. Update the
    CHANGELOG.md
    file every time you publish a new version. Identify new features, important changes, and major bug fixes in this file. For more details on the chosen changelog format, refer to the Keep a Changelog documentation.
    This step 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.
    Tip
    You can provide a link to an external web page where you host this package's changelog by setting the changelogUrl property in your package's
    package.json
    manifest file.
  8. You can include licenses and third-party notices in the
    LICENSE.md
    and
    THIRD PARTY NOTICES.md
    files.
    This step 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.
    Tip
    You can provide a link to an external web page where you host this package's licensing and third-party notices. Set the link by using the licensesUrl property in your package's
    package.json
    manifest file.
  9. Document your package.
    Tip
    You can provide a link to an external web page where you host this package's documentation by setting the documentationUrl property in your package's
    package.json
    manifest file.
  10. Share your package.

Creating a new embedded package

Follow these instructions if you want to create a custom package inside your project folder.
Note
These instructions are part of the larger procedure for Creating custom packages.
  1. Open the Unity Hub, and create an empty project on your computer.
    You can also use an existing project on your computer, and embed the package under your project or install the package from a local folder. However, starting with a new project makes the package contents less prone to errors.
  2. Using your computer's file manager (for example the Windows File Explorer or the macOS Finder), navigate to your project folder and locate the
    Packages
    subdirectory.
  3. Create a new subdirectory for your package inside the
    Packages
    folder using a name that matches the package name and follows the naming conventions. For example, if your package name is
    com.example.mypackage
    , create a subdirectory called
    com.example.mypackage
    .
    Note
    This is important if your package contains assets, because the AssetDatabase looks for an asset path that matches
    Packages/<your-package-name>/Assets
    , regardless of the actual folder name.
  4. Open your preferred text editor and create a JSON file called
    package.json
    in the root of the package folder.
  5. Fill out all required and recommended fields in the
    package.json
    file. You can use the package manifest example as a reference.
When you reopen Unity, the new package appears in the Package Manager window and in the Project window, where you can view and modify the package contents. If you select the
package.json
file in the Project window, you can also modify its JSON values directly in the Inspector window.
Return to the main procedure to complete the creation of your package.

Creating a new local package

Follow these instructions if you want to create a custom package outside your project folder.
Note
These instructions are part of the larger procedure for Creating custom packages.
  1. Using your computer's file manager (for example the Windows File Explorer or the macOS Finder), create a folder for your package.
    You can also use an existing location if you have already created some content for your package.
  2. Open your preferred text editor and create a JSON file called
    package.json
    in the root of the package folder.
  3. Fill out all required and recommended fields in the
    package.json
    file, making sure the
    name
    property follows the naming conventions. You can use the package manifest example as a reference.
  4. In Unity, create a new project or open an existing project.
  5. Open the Package Manager window and follow the instructions for installing a local package, using the
    package.json
    file you just created. This step is essential for ensuring the creation of the required
    .meta
    file.
The new package appears in the Package Manager window and in the Project window, where you can view and modify the package contents. If you select the
package.json
file in the Project window, you can also modify its JSON values directly in the Inspector window.
Return to the main procedure to complete the creation of your package.