Package Manifest window
Accessing package Assets

Scripting API for packages

The Package Manager scripting API enables users to interact with the Package Manager programmatically. For example, you might want to install a specific package or version depending on the platform of the target machine.

At the heart of the system is the PackageManager.Client class which allows you to find packages, browse the list of packages, and install and uninstall packages through scripting.

Another important class is PackageManager.PackageInfo, which contains the state of a package, including metadata obtained from the package manifestEach package has a 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
and the registry. For example, you can get a list of versions available for the package, or the list of any errors produced while locating or installing the package.

Adding a package to the Project

This example demonstrates how to use the Client class to install or add a package to the Project.

You can specify either the package name or the name with a specific version when calling the Client.Add method. For example, using Client.Add("com.unity.textmeshpro@1.3.0"); installs version 1.3.0 of the TextMesh Pro package, but using only Client.Add("com.unity.textmeshpro") installs (or updates to) the latest version of the package.

The Client.Add method returns an AddRequest instance, which you can use to get the status, any errors, or a Request response containing the PackageInfo information for the newly added package.

using System;
using UnityEditor;
using UnityEditor.PackageManager.Requests;
using UnityEditor.PackageManager;
using UnityEngine;

namespace Unity.Editor.Example {
   static class AddPackageExample
   {
       static AddRequest Request;
      
       [MenuItem("Window/Add Package Example")]
       static void Add()
       {
           // Add a package to the Project
           Request = Client.Add("com.unity.textmeshpro");
           EditorApplication.update += Progress;
       }

       static void Progress()
       {
           if (Request.IsCompleted)
           {
               if (Request.Status == StatusCode.Success)
                   Debug.Log("Installed: " + Request.Result.packageId);
               else if (Request.Status >= StatusCode.Failure)
                   Debug.Log(Request.Error.message);

               EditorApplication.update -= Progress;
           }
       }
   }
}

Browsing the list of packages in a Project

This example demonstrates how to use the Client class to iterate over the packages in the Project.

The Client.List method returns a ListRequest instance, which you can use to get the status, any errors, or a Request response containing the PackageCollection which you can iterate.

using System;
using UnityEditor;
using UnityEditor.PackageManager.Requests;
using UnityEditor.PackageManager;
using UnityEngine;

namespace Unity.Editor.Example {
   static class ListPackageExample
   {
       static ListRequest Request;
    
       [MenuItem("Window/List Package Example")]
       static void List()
       {
           Request = Client.List();    // List packages installed for the Project
           EditorApplication.update += Progress;
       }

       static void Progress()
       {
           if (Request.IsCompleted)
           {
               if (Request.Status == StatusCode.Success)
                   foreach (var package in Request.Result)
                       Debug.Log("Package name: " + package.name);
               else if (Request.Status >= StatusCode.Failure)
                   Debug.Log(Request.Error.message);

               EditorApplication.update -= Progress;
           }
       }
   }
}

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

Package Manifest window
Accessing package Assets