# Creating custom wizards

> Using the **UiPath.Activities.API** package from the **Official** feed (`https://pkgs.dev.azure.com/uipath/Public.Feeds/_packaging/UiPath-Official/nuget/v3/index.json`], you can add your own custom wizard to Studio's ribbon. For information on how to use the API, see [Studio Activities SDK](https://docs.uipath.com/sdk/other/latest/developer-guide/studio-activities-sdk).

Using the **UiPath.Activities.API** package from the **Official** feed (`https://pkgs.dev.azure.com/uipath/Public.Feeds/_packaging/UiPath-Official/nuget/v3/index.json`], you can add your own custom wizard to Studio's ribbon. For information on how to use the API, see [Studio Activities SDK](https://docs.uipath.com/sdk/other/latest/developer-guide/studio-activities-sdk).

![docs image](https://dev-assets.cms.uipath.com/assets/images/sdk/sdk-docs-image-105440-f74fbe99-0ad1c1a8.webp)
:::note
The **UiPath.Activities.API** package must be used as a development dependency in your custom project. Read more about [Development Dependencies](https://github.com/NuGet/Home/wiki/DevelopmentDependency-support-for-PackageReference).
:::

## Build custom wizards

The following sample shows the definition of a wizard that creates an empty sequence when clicked:

```
using System.Activities;
using System.Windows;
using System.Windows.Input;
using UiPath.Studio.Activities.Api;
using UiPath.Studio.Activities.Api.Wizards;
namespace MyCustomActivityPack
{
    public static class WizardCreator
    {
        public static void CreateWizards(IWorkflowDesignApi workflowDesignApi)
        {
            CreateDemoWizard(workflowDesignApi);
        }
        private static void CreateDemoWizard(IWorkflowDesignApi workflowDesignApi)
        {
            var wizardApi = workflowDesignApi.Wizards;
            var wizardDefinition = new WizardDefinition()
            {
                // You can add other definitions here to create a dropdown.
                //ChildrenDefinitions.Add()
                Wizard = new WizardBase()
                {
                    RunWizard = RunWizard
                },
                DisplayName = "DemoWizardDisplayName",
                Shortcut = new KeyGesture(Key.F9, ModifierKeys.Control | ModifierKeys.Shift),
                IconUri = "Icons/RecordIcon",
                Tooltip = "DemoWizardTooltip"
            };
            var collection = new WizardCollection(); //Use a collection to group all of your wizards.
            collection.WizardDefinitions.Add(wizardDefinition);
            wizardApi.Register(collection);
        }
        private static Activity RunWizard()
        {
            if(MessageBox.Show("Do you want a sequence?", "This is a wizard window", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
            {
                return new System.Activities.Statements.Sequence()
                {
                    DisplayName = "The wizard generated this sequence"
                };
            }
            return null;
        }
    }
}
```

Use the `MinimizeBeforeRun` property to minimize Studio before calling `RunWizard`, and restore when `RunWizard` returns.

The `RunWizardAsync` property should be used for the wizard to execute asynchronously.

## Add the project to Studio

To make the wizard visible in the Studio ribbon, you need to publish your custom activities to a NuGet package and make it available to a feed defined in Studio, version 2019.10.1 or above.

### Step 1: Create the NuGet package

![docs image](https://dev-assets.cms.uipath.com/assets/images/sdk/sdk-docs-image-105240-c0e8685d-11b926d3.gif)

1. Launch [NuGet Package Explorer](https://github.com/NuGetPackageExplorer/NuGetPackageExplorer/releases).
2. Click **Create a new package (Ctrl + N)**. A split-window is displayed which shows **Package metadata** and **Package contents**. We need to add all dependencies in the latter section.
3. Right-click the **Package contents** section. A context menu is displayed.
4. Click **Add lib folder**. Notice a new **lib** item is created in the **Package contents** section.
5. Right-click **lib** and select to **Add Existing File…**.
6. Load the external assembly (.dll) of your project.
7. Click **Edit > Edit Metadata**. The **Package metadata** section is displayed.
8. Fill in the fields as you see fit to better describe your project.
9. Fill in the **Id** field and make sure to include the keyword “Activities” so the package can be displayed in the Manage Packages window, in Studio.
10. Click **File > Save**. In our case, the `.nupkg` file is created.
    :::note
    Be sure to create an intuitive folder structure for your activities. All empty folders inside the custom activity get removed when used with Orchestrator.
    :::

### Step 2: Install the NuGet package in UiPath Studio

Once the `.nupkg` file is created, add it to a custom feed in Studio, as explained [here](https://docs.uipath.com/studio/docs/managing-activities-packages#section-adding-custom-feeds).

Open the [Manage Packages](https://docs.uipath.com/studio/docs/managing-activities-packages#section-installing-packages) window and install the package. Make sure the custom feed is enabled in Studio.

## Sample wizard

Simply follow the link below to download the sample, which also contains an example of creating [custom activities settings](https://docs.uipath.com/sdk/other/latest/developer-guide/building-activities-project-settings#building-activities-project-settings).

[Download example](https://www.uipath.com/hubfs/Documentation/WorkflowExamples/Studio_v2019/MyCustomActivityPack.zip)
