# Add(string)

> Adds a package dependency to the project. Requesting a new or different dependency often leads to changing installed packages, but only after the Package Manager constructs a dependency graph to solve any version conflicts.

## Definition

* **Type:** Method
* **Namespace:** [UnityEditor.PackageManager](/engine/6000.3/script-reference/unityeditor/packagemanager.md)
* **Assembly:** UnityEditor

```csharp
public static AddRequest Add(string identifier)
```

### Parameters

**** (\[string]\(https\://learn.microsoft.com/dotnet/api/system.string)): A string representing the package to be added:- To install a specific version of a package, use a package identifier ("name\@version"). This is the only way to install a [pre-release](/engine/6000.3/manual/packages-list/packages-all/pack-preview.md) version.

- To install the latest compatible ([released](/engine/6000.3/manual/packages-list/packages-all/pack-safe.md)) version of a package, specify only the package [name](/engine/6000.3/manual/packages-list/cus-pkg-lp/cus-pkg-development/cus-pkg-manifest/upm-manifest-pkg.md).

- To install a git package, specify a [git url](/engine/6000.3/manual/packages-list/upm-git-dependencies/upm-git.md).

- To install a [local](/engine/6000.3/manual/packages-list/dependencies-lp/upm-localpath.md) package, specify a value in the format "file:/path/to/package/folder".

- To install a [local tarball](/engine/6000.3/manual/packages-list/dependencies-lp/upm-localpath.md) package, specify a value in the format "file:/path/to/package-file.tgz".`ArgumentException` is thrown if `identifier` is `null` or empty.

### Returns

| Type                                                                                            | Description                                                                                                                                                                                                                                                                                                                      |
| ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [AddRequest](/engine/6000.3/script-reference/unityeditor/packagemanager/requests/addrequest.md) | An [AddRequest](/engine/6000.3/script-reference/unityeditor/packagemanager/requests/addrequest.md) instance, which you can use to get the [PackageInfo](/engine/6000.3/script-reference/unityeditor/packagemanager/packageinfo.md) representing the package that was added to the project from the `AddRequest.Result` property. |

### Remarks

`Add()` is an asynchronous operation. Before the operation is complete, you can use the `AddRequest` instance to monitor the asynchronous operation.

**Note:** Make sure any other Client operations complete before calling this method. For more information, refer to the note on the [Client](/engine/6000.3/script-reference/unityeditor/packagemanager/client.md) class reference page.

For more information, refer to [Dependency and resolution](/engine/6000.3/manual/packages-list/dependencies-lp/upm-dependencies.md).

### Examples

```csharp
using System;
using UnityEngine;
using UnityEditor.PackageManager;
using UnityEditor.PackageManager.Requests;
[ExecuteInEditMode]
public class PackageManagerClientAddExample : MonoBehaviour
{
    AddRequest m_AddRequest;
    const string k_ValidPackageName = "com.unity.textmeshpro";

    void Start()
    {
        Debug.Log("Adding a package via Client.Add...");
        m_AddRequest = Client.Add(k_ValidPackageName);
    }
    void Update()
    {
        if (m_AddRequest != null)
        {
            switch (m_AddRequest.Status)
            {
                case StatusCode.InProgress:
                    Debug.Log("Operation in progress...");
                    return;

                case StatusCode.Success:
                    Debug.Log($"Successfully installed {k_ValidPackageName}");
                    m_AddRequest = null;
                    break;

                case StatusCode.Failure:
                    Debug.LogError($"Operation failed: {m_AddRequest.Error.message}");
                    m_AddRequest = null;
                    break;
            }
        }
    }
}
```
