# PackageRegistrationEventArgs

> Provides information about package registration changes that occur during Package Manager operations.

## Definition

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

```csharp
public class PackageRegistrationEventArgs
```

## Remarks

This class contains details about packages being added, removed, or updated in the project.

**Remarks**

* Use this class with [Events.registeringPackages](/engine/6000.6/script-reference/unityeditor/packagemanager/events/registeringpackages.md) and [Events.registeredPackages](/engine/6000.6/script-reference/unityeditor/packagemanager/events/registeredpackages.md) events.
* The `changedFrom` and `changedTo` collections must be iterated together to maintain package correspondence. They are guaranteed to match in length and ordering.
* All collections are read-only and can't be modified.
* Package information in these collections represents the state at the time of the event.
* The `PackageRegistrationEventArgs` might contain empty collections if no packages were added, removed, or changed.
* You can use this class to monitor package changes.

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

[ExecuteInEditMode]
public class PackageRegistrationExample: MonoBehaviour
{
    void Start()
    {
        SubscribeToPackageEvents();
    }

    void OnDestroy()
    {
        Cleanup();
    }

    void SubscribeToPackageEvents()
    {
        // Subscribe to the event before packages change
        Debug.Log("Subscribing to registeringPackages");
        Events.registeringPackages += OnPackagesRegistering;
    }

    void OnPackagesRegistering(PackageRegistrationEventArgs args)
    {
        // Log added packages
        foreach (var package in args.added)
        {
            Debug.Log($"Adding package: {package.displayName} ({package.version})");
        }

        // Log removed packages
        foreach (var package in args.removed)
        {
            Debug.Log($"Removing package: {package.displayName} ({package.version})");
        }

        // Log package updates
        using var changes = args.changedFrom.GetEnumerator();
        using var targets = args.changedTo.GetEnumerator();

        while (changes.MoveNext() && targets.MoveNext())
        {
            var oldPackage = changes.Current;
            var newPackage = targets.Current;
            Debug.Log($"Updating {oldPackage?.displayName} from {oldPackage?.version} to {newPackage?.version}");
        }
    }

    void Cleanup()
    {
        // Unsubscribe from the event when finished
        Debug.Log("Unsubscribing to registeringPackages");
        Events.registeringPackages -= OnPackagesRegistering;
    }
}
```

**Related information**

* [Events](/engine/6000.6/script-reference/unityeditor/packagemanager/events.md)
* [Events.registeringPackages](/engine/6000.6/script-reference/unityeditor/packagemanager/events/registeringpackages.md)
* [Events.registeredPackages](/engine/6000.6/script-reference/unityeditor/packagemanager/events/registeredpackages.md)
* [PackageInfo](/engine/6000.6/script-reference/unityeditor/packagemanager/packageinfo.md)
* [Client](/engine/6000.6/script-reference/unityeditor/packagemanager/client.md)

## Properties

| Property                                                                                                              | Description                                                                                                                                                                                                                              |
| --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [added](/engine/6000.6/script-reference/unityeditor/packagemanager/packageregistrationeventargs/added.md)             | A collection of [PackageInfo](/engine/6000.6/script-reference/unityeditor/packagemanager/packageinfo.md) entries to add during the Package Manager registration process.                                                                 |
| [changedFrom](/engine/6000.6/script-reference/unityeditor/packagemanager/packageregistrationeventargs/changedfrom.md) | A collection of [PackageInfo](/engine/6000.6/script-reference/unityeditor/packagemanager/packageinfo.md) entries describing packages to be overridden by another version during the Package Manager registration process.                |
| [changedTo](/engine/6000.6/script-reference/unityeditor/packagemanager/packageregistrationeventargs/changedto.md)     | A collection of [PackageInfo](/engine/6000.6/script-reference/unityeditor/packagemanager/packageinfo.md) entries describing packages that will override a previously registered version during the Package Manager registration process. |
| [removed](/engine/6000.6/script-reference/unityeditor/packagemanager/packageregistrationeventargs/removed.md)         | A collection of [PackageInfo](/engine/6000.6/script-reference/unityeditor/packagemanager/packageinfo.md) entries to remove during the Package Manager registration process.                                                              |
