# PackOperationResult

> Information containing the result of a package packing operation. This information includes the path to the generated tarball file.

## Definition

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

```csharp
public sealed class PackOperationResult
```

## Remarks

**Notes**:

* `PackOperationResult` is the result of [Client.Pack](/engine/6000.7/script-reference/unityeditor/packagemanager/client/pack.md) operations.
* The tarball is a gzipped tar archive that contains the package.
* Use the tarball for local installation or distribution.

```csharp
using UnityEditor;
using UnityEditor.PackageManager;
using UnityEngine;
using UnityEditor.PackageManager.Requests;

public class PackagePackerExample : EditorWindow
{
    [MenuItem("Window/Package Packer")]
    public static void ShowWindow()
    {
        GetWindow<PackagePackerExample>("Package Packer");
    }

    string m_PackageFolder = "";
    string m_OutputFolder = "";
    PackRequest m_PackRequest;

    void OnGUI()
    {
        GUILayout.Label("Package Packer", EditorStyles.boldLabel);

        // Package folder selection
        EditorGUILayout.BeginHorizontal();
        m_PackageFolder = EditorGUILayout.TextField("Package Folder", m_PackageFolder);
        if (GUILayout.Button("Browse", GUILayout.Width(60)))
        {
            m_PackageFolder = EditorUtility.OpenFolderPanel("Select Package Folder", "", "");
        }
        EditorGUILayout.EndHorizontal();

        // Output folder selection
        EditorGUILayout.BeginHorizontal();
        m_OutputFolder = EditorGUILayout.TextField("Output Folder", m_OutputFolder);
        if (GUILayout.Button("Browse", GUILayout.Width(60)))
        {
            m_OutputFolder = EditorUtility.OpenFolderPanel("Select Output Folder", "", "");
        }
        EditorGUILayout.EndHorizontal();

        if (GUILayout.Button("Pack Package"))
        {
            // Validating paths is good practice, but skipped in this example 
            PackPackage();
        }
    }

    void PackPackage()
    {
        EditorUtility.DisplayProgressBar("Package Packer", "Creating package tarball...", 0.5f);

        m_PackRequest = Client.Pack(m_PackageFolder, m_OutputFolder);
        EditorApplication.update += TrackPackOperationProgress;
    }

    void TrackPackOperationProgress()
    {
        try
        {
            if (m_PackRequest.IsCompleted)
            {
                EditorApplication.update -= TrackPackOperationProgress;
                EditorUtility.ClearProgressBar();

                if (m_PackRequest.Status == StatusCode.Success)
                {
                    // The Result property on the next line is the PackOperationResult
                    var tarballPath = m_PackRequest.Result.tarballPath;
                    Debug.Log($"Package created successfully at: {tarballPath}");

                    // Show in file browser
                    EditorUtility.RevealInFinder(tarballPath);
                }
                else
                {
                    Debug.LogError($"Failed to create package: {m_PackRequest.Error.message}");
                }
            }
        }
        catch
        {
            Debug.LogError("Pack operation failed.");
            EditorApplication.update -= TrackPackOperationProgress;
        }
    }
}
```

**Related information**

* [Client.Pack](/engine/6000.7/script-reference/unityeditor/packagemanager/client/pack.md)
* [PackRequest](/engine/6000.7/script-reference/unityeditor/packagemanager/requests/packrequest.md)
* [Package Layout](/engine/6000.7/manual/packages-list/cus-pkg-lp/cus-pkg-development/cus-pkg-structure/cus-layout.md)
* [Custom Packages](/engine/6000.7/manual/packages-list/cus-pkg-lp/cus-pkg-development/custom-packages.md)

## Properties

| Property                                                                                                     | Description                                                                                                                             |
| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------- |
| [tarballPath](/engine/6000.7/script-reference/unityeditor/packagemanager/packoperationresult/tarballpath.md) | The path to the file created by the [Client.Pack](/engine/6000.7/script-reference/unityeditor/packagemanager/client/pack.md) operation. |
