UiPath Activity Migrator Public Preview is here!

Hello UiPath Community!

We’re excited to announce that the feature you’ve been waiting for is finally here! :rocket:
Now it’s your turn to explore this preview, test it out, and share your thoughts with us.

Your feedback matters—tell us what you think and help us make it even better! :light_bulb:
:backhand_index_pointing_right: Try it today and let us know in the comments!

Purpose of the UiPath Activity Migrator

UiPath Activity Migrator is an essential Command-Line Interface (CLI) tool for organizations transitioning legacy automation projects to the modern UiPath platform, enabling access to the latest features and capabilities:

  • Automate the migration process: Simplify and streamline the transfer of process configuration & dependencies;
  • Reduce manual effort and errors: Ensure consistency and accuracy during migration, instead of manually transferring dependencies and activities

Supported migration scenarios

Project framework migration

Migrating a UiPath Legacy project to the Windows compatibility mode is highly recommended for several strategic, technical, and support-related reasons. Here’s a breakdown of why you should consider making the move:

  1. Improved Performance:
  • Windows projects run faster and more efficiently due to better integration with .NET Core and modern Windows APIs.
  1. Better Compatibility with External Libraries:
  • Windows projects support newer versions of libraries and dependencies, making it easier to integrate with external systems.

Access to Modern UIAutomation Capabilities

Many new UIAutomation features—such as Unified Target and Healing Agent—are only compatible with the Modern UIAutomation framework. Therefore, migrating from Classic UIAutomation activities to the Modern experience is necessary.

Deprecated Outlook Activities Migration

Microsoft is sunsetting Classic Outlook and encouraging adoption of Microsoft 365. As a result, UiPath Activity Migrator supports transitioning automation dependencies from UiPath.Mail.Activities (which rely on the Classic Outlook API) to UiPath.MicrosoftOffice365.Activities based on the UiPath’s Integration service**.**


When to use Activity Migrator vs Studio Windows Legacy convertor

Use Studio Windows-Legacy Converter when:

  • You only need to convert projects from Legacy to Windows one by one.
  • No activity migrations are required.

Use Activity Migrator when:

  • You want to convert multiple Legacy projects to Windows (bulk conversion supported).
  • Migration of UIAutomation or Mail Activities is needed.
  • Any combination of the above scenarios applies.

Review the migration best practices below

Where to get it

The tool can be found in the Automation Cloud/Downloads section

or in the Customer Portal

Alternatively, you can download the CLI tool archive and unzip it into the <tool-install-dir> folder.

How to provide feedback

Either in the Insider Portal or as a reply to this forum post.

How to use it

Available options

This tool migrates projects to newer versions, from Legacy to Windows, and activities from older packages to newer packages.

Command: <tool-install-dir>\UiPath.Upgrade.exe

Usage: UiPath.Upgrade.exe [command] [options]

Options:

-?, -h, --help Show help and usage information

Commands:

Command Description
analyze Analyze the project for migration without making changes
upgrade Upgrade/Migrate the project or parts of it
bulk Analyze or upgrade all projects in a folder in bulk
version Show version information

Analyze a project

This option only simulates the migration by generating a report; it does not perform the actual migration or make any changes to the project.

Command: <tool-install-dir>\UiPath.Upgrade.exe analyze

Usage: UiPath.Upgrade.exe analyze [options]

Options
Option Description
-?, -h, --help Show help and usage information
-p, --project-path (REQUIRED) Path to the project to analyze or upgrade. The folder provided as <project-path> should contain the project’s project.json file.
-o, --output-path Output path for results (optional). If not specified, a new folder will be created with _Upgraded suffix, for the upgraded project.
-v, --verbose Enable verbose logging
-f, --output-format Output format: console (default) or sarif
-e, --extension-directory Directory to search for extensions. For advanced use only.
–orchestrator-url The full Orchestrator URL including organization name (e.g., https://cloud.uipath.com/defauauldore).
By default, if no Orchestrator URL is specified, the connection information from Studio will be used. When specified, you must also provide credentials using either:
- Personal access token (PAT) using --orchestrator-pat option, OR
- External application id and secret using --orchestrator-application-id and --orchestrator-application-secret.
–orchestrator-tenant The Orchestrator tenant name (defaults to ‘DefaultTenant’ if not specified)
–orchestrator-pat Personal Access Token (PAT) for Orchestrator authentication, used to access Orchestrator library feeds. Create a personal access token, and add Orchestrator API access scope -OR.Execution.Read. See: Automation Suite - Personal Access Tokens
Alternative to this method is configuring an application id and secret, using --orchestrator-application-id and --orchestrator-application-secret. See information below.
–orchestrator-id OAuth Application ID for Orchestrator authentication (alternative to PAT). Used with --orchestrator-application-secret to access Orchestrator library feeds. To obtain this, configure an external application in Orchestrator: 1) Go to External Applications, 2) Add Application, 3) Select ‘Confidential application’, 4) Add scope with ‘Application scope’ and select ‘OR.Execution.Read’ permission. See: Orchestrator - Managing external OAuth applications
–orchestrator-application-secret OAuth application secret for Orchestrator authentication (alternative to PAT). Used with --orchestrator-application-id to access Orchestrator library feeds. This is generated when you create a confidential external application in Orchestrator. See: Orchestrator - Managing external OAuth applications
–ignore-missing-dependencies Ignore missing dependencies during upgrade. Missing dependencies will appear as warnings, but workflows using those dependencies will report missing types, fail to compile, or fail to perform other needed migrations.
–enabled-extensions Comma-separated list of extension names to enable. By default, all extensions are enabled. Available extensions: MailActivities, MicrosoftActivitiesExtension, UiAutomationActivities. Example: --enabled-extensions MailActivities,MicrosoftActivitiesExtension
–disabled-extensions Comma-separated list of extension names to disable. Available extensions will be dynamically populated based on discovered extensions.
–disable-all-extensions Disable all extensions. This option is mutually exclusive with --enabled-extensions and --disabled-extensions.
–uia-package-version The version of the UIAutomation activities package to use for migration. Defaults to version 25.10.20 if not specified. The target version has to be higher than the default version. If the target version is lower, than the default version will be used instead.
–mail-o365-package-version The version of the Microsoft Office 365 activities package to use for migration. Defaults to version 3.3.10 if not specified. The target version has to be higher than the default version. If the target version is lower, than the default version will be used instead.
–config Specifies the path to a custom configuration JSON file. The configuration can be used to modify the default behavior of certain activities or assign constant values to properties that require user input during the migration.
The configuration file should respect the following convention:
{
“{reserved-configuration-key}”: “{value}”,

“{path-to-workflow} > {activity-display-name}”: {
“{property-name}”: “{property-value}”,
},

}

Special Notes

Currently the only {property-name}that can be assigned is Connection Id.

{reserved-configuration-key}represents activity specific behavior changes:

  1. SaveOutlookMailMessage_IgnoreSaveAsType - If set to true, the option will disable the Save as type check for unsupported types, so that the activity can be migrated regardless of the Save as type option.

* can be used as a wildcard to match anything. It can be used in both {path-to-workflow} and {activity-display-name}. Thus, multiple workflows or activities can be specified for the same collection of properties. When multiple entries are matched for the same workflow + activity tuple, only the last match will be used.

Migrate a project

The option upgrades/migrates the project or parts of it.

Command: <tool-install-dir>\UiPath.Upgrade.exe upgrade

Usage: UiPath.Upgrade.exe upgrade [options]

Options

Options:

Option Description
-?, -h, --help Show help and usage information
-p, --project-path (REQUIRED) Path to the project to analyze or upgrade. The folder provided as <project-path> should contain the project’s project.json file.
-o, --output-path Output path for results (optional). If not specified, a new folder will be created with _Upgraded suffix, for the upgraded project.
-v, --verbose Enable verbose logging
-f, --output-format Output format: console (default) or sarif
-e, --extension-directory Directory to search for extensions. For advanced use only.
–orchestrator-url The full Orchestrator URL including organization name (e.g., https://cloud.uipath.com/defauauldore).
By default, if no Orchestrator URL is specified, the connection information from Studio will be used. When specified, you must also provide credentials using either:
- Personal access token (PAT) using --orchestrator-pat option, OR
- External application id and secret using --orchestrator-application-id and --orchestrator-application-secret.
–orchestrator-tenant The Orchestrator tenant name (defaults to ‘DefaultTenant’ if not specified)
–orchestrator-pat Personal Access Token (PAT) for Orchestrator authentication, used to access Orchestrator library feeds. Create a personal access token, and add Orchestrator API access scope -OR.Execution.Read. See: Automation Suite - Personal Access Tokens
Alternative to this method is configuring an application id and secret, using --orchestrator-application-id and --orchestrator-application-secret. See information below.
–orchestrator-application-id OAuth Application ID for Orchestrator authentication (alternative to PAT). Used with --orchestrator-application-secret to access Orchestrator library feeds. To obtain this, configure an external application in Orchestrator: 1) Go to External Applications, 2) Add Application, 3) Select ‘Confidential application’, 4) Add scope with ‘Application scope’ and select ‘OR.Execution.Read’ permission. See: Orchestrator - Managing external OAuth applications
–orchestrator-application-secret OAuth application secret for Orchestrator authentication (alternative to PAT). Used with --orchestrator-application-id to access Orchestrator library feeds. This is generated when you create a confidential external application in Orchestrator. See: Orchestrator - Managing external OAuth applications
–ignore-missing-dependencies Ignore missing dependencies during upgrade. Missing dependencies will appear as warnings, but workflows using those dependencies will report missing types, fail to compile, or fail to perform other needed migrations.
–enabled-extensions Comma-separated list of extension names to enable. By default, all extensions are enabled. Available extensions: MailActivities, MicrosoftActivitiesExtension, UiAutomationActivities. Example: --enabled-extensions MailActivities,MicrosoftActivitiesExtension
–disabled-extensions Comma-separated list of extension names to disable. Available extensions will be dynamically populated based on discovered extensions.
–disable-all-extensions Disable all extensions. This option is mutually exclusive with --enabled-extensions and --disabled-extensions.
-uia-package-version The version of the UIAutomation activities package to use for migration. Defaults to version 25.10.20 if not specified. The target version has to be higher than the default version. If the target version is lower, than the default version will be used instead.
–mail-o365-package-version The version of the Microsoft Office 365 activities package to use for migration. Defaults to version 3.3.10 if not specified. The target version has to be higher than the default version. If the target version is lower, than the default version will be used instead.
–config Specifies the path to a custom configuration JSON file. The configuration can be used to modify the default behavior of certain activities or assign constant values to properties that require user input during the migration.
The configuration file should respect the following convention:
{
“{reserved-configuration-key}”: “{value}”,

“{path-to-workflow} > {activity-display-name}”: {
“{property-name}”: “{property-value}”,
},

}

Special Notes

Currently the only {property-name}that can be assigned is Connection Id.

{reserved-configuration-key}represents activity specific behavior changes:

  1. SaveOutlookMailMessage_IgnoreSaveAsType - If set to true, the option will disable the Save as type check for unsupported types, so that the activity can be migrated regardless of the Save as type option.

* can be used as a wildcard to match anything. It can be used in both {path-to-workflow} and {activity-display-name}. Thus, multiple workflows or activities can be specified for the same collection of properties. When multiple entries are matched for the same workflow + activity tuple, only the last match will be used.

Bulk repository migration

The option analyzes or upgrades all projects in a folder, in bulk.

Command: <tool-install-dir>\UiPath.Upgrade.exe bulk

Usage: UiPath.Upgrade.exe bulk [options]

Options
Option Description
-p --path ` (REQUIRED) Path to the repository/folder to analyze or upgrade. The migration will be performed for the projects in all sub-folders that contain a project.json file.
-c, --command (REQUIRED) Command to run: analyze or upgrade
-v, --verbose Enable verbose logging
–orchestrator-url The full Orchestrator URL including organization name (e.g., https://cloud.uipath.com/defauauldore).
By default, if no Orchestrator URL is specified, the connection information from Studio will be used. When specified, you must also provide credentials using either:
- Personal access token (PAT) using --orchestrator-pat option, OR
- External application id and secret using --orchestrator-application-id and --orchestrator-application-secret.
–orchestrator-tenant The Orchestrator tenant name (defaults to ‘DefaultTenant’ if not specified)
–orchestrator-pat Personal Access Token (PAT) for Orchestrator authentication, used to access Orchestrator library feeds. Create a personal access token, and add Orchestrator API access scope -OR.Execution.Read. See: Automation Suite - Personal Access Tokens
Alternative to this method is configuring an application id and secret, using --orchestrator-application-id and --orchestrator-application-secret. See information below.
–orchestrator-application-id OAuth Application ID for Orchestrator authentication (alternative to PAT). Used with --orchestrator-application-secret to access Orchestrator library feeds. To obtain this, configure an external application in Orchestrator: 1) Go to External Applications, 2) Add Application, 3) Select ‘Confidential application’, 4) Add scope with ‘Application scope’ and select ‘OR.Execution.Read’ permission. See: Orchestrator - Managing external OAuth applications
–orchestrator-application-secret OAuth application secret for Orchestrator authentication (alternative to PAT). Used with --orchestrator-application-id to access Orchestrator library feeds. This is generated when you create a confidential external application in Orchestrator. See: Orchestrator - Managing external OAuth applications
–enabled-extensions Comma-separated list of extension names to enable. By default, all extensions are enabled. Available extensions: MailActivities, MicrosoftActivitiesExtension, UiAutomationActivities. Example: --enabled-extensions MailActivities,MicrosoftActivitiesExtension
–disabled-extensions Comma-separated list of extension names to disable. Available extensions will be dynamically populated based on discovered extensions.
–disable-all-extensions Disable all extensions. This option is mutually exclusive with --enabled-extensions and --disabled-extensions.
-?, -h, --help -?, -h, --help

Examples

UiPath.Upgrade.exe analyze -p C:\to-migrate\LegacyProcess -v

UiPath.Upgrade.exe upgrade -p C:\to-migrate\LegacyProcess -o C:\to-migrate\WindowsProcess --uia-package-version=25.10.20 -v

UiPath.Upgrade.exe upgrade --project-path=C:\to-migrate\LegacyProcess --config=C:\to-migrate\connection.json

UiPath.Upgrade.exe upgrade --project-path C:\to-migrate\LegacyProcess --output-path C:\to-migrate\WindowsProcess --uia-package-version=25.10.20 --verbose

UiPath.Upgrade.exe bulk -p C:\to-migrate -c analyze

The output from the upgrade tool is by default a SARIF report stored in the original project under a folder called .upgrade, and the migrated project will be available in the Output path.

Setting up Connection Id for Productivity Activities

The Connection Id is not populated during migration and it has to be manually set per workflow/activity in a custom config file. The config file can be passed to the migrator using the --config <config> command line argument.

For example, to specify the Connection Id property for Microsoft Office 365 activities the following example can be used:

{
    "* > *": {
        "ConnectionId": "00000000-0000-0000-0000-000000000001"
    },
    "*\\Projects\\MailMigration\\Main.xaml > Get *": {
        "ConnectionId": "00000000-0000-0000-0000-000000000002"
    },
    "*\\Projects\\MailMigration\\* > Send Mail": {
        "ConnectionId": "00000000-0000-0000-0000-000000000003"
    }
}

In this case * > * matches anything and can be used as a fallback option when there are no matching entries below. *\\Projects\\MailMigration\\Main.xaml > Get * can match multiple activities that have the prefix Get while *\\Projects\\MailMigration\\ > Send Mail only matches a single activity.

Post-Migration UI Automation Application Scope Behavior

Most modern activities are required to operate within an application scope (Use Application/Browser activity). There are two types of application scopes encountered during migration:

1. Organically created scopes

These are created automatically when migrating from classic scoped activities such as Open Browser, Attach Browser, etc.

We do not optimize and do not plan to optimize these scopes to avoid altering the original intent and flow of the migrated workflow.

2. Synthetically generated scopes

These are generated to ensure the workflow compiles and runs correctly after migration.

The current optimization in this case: when we can deterministically confirm that two consecutive application scopes have the same properties (e.g. same selector, OCR engine), we merge them into a single application scope, keeping the original order of activities.

Limitations/Supported activities

UI Automation (click on each section to see the full list)

Known limitations

  • The minimum version of the UiPath.UIAutomation.Activities package you can migrate to is 25.10.20.
  • There are limitations for migrating certain properties of some activities, listed in the Supported activities table in the section above.
  • The execution time for the migrated workflow, with modern UI Automation activities, might be longer than the original one, with classic activities.

Productivity (click on each section to see the full list)

Known limitations

  • The minimum version of the UiPath.MicrosoftOffice365.Activities package you can migrate to is 3.3.10.

Tool limitations

  • By default, the activity feeds configured via the NuGet.config file include Official, Local, and Marketplace feeds.

  • Some activities may use dynamically generated types/assemblies (example: for Excel activities, we could have column names as properties in a dynamically generated type). A .xaml file with such a type will trigger the “Type not found” error.

Migration Best Practices

Pre-Migration Preparation

  1. Backup Everything
    Always create a full backup of your projects before running any migration commands.
  2. Update Studio & Packages
    Ensure you’re using the latest UiPath Studio and activity packages supported by the migrator (e.g., UiPath.UIAutomation.Activities >= 25.10.20 and UiPath.MicrosoftOffice365.Activities >= 3.3.10).
  3. Analyze Before Upgrade
    Use the analyze command first:
    UiPath.Upgrade.exe analyze -p -v
    This generates a SARIF report highlighting potential issues without making changes.
  4. Check Dependencies & Feeds
    Verify NuGet feeds (Official, Local, Marketplace) are correctly configured in NuGet.config.

Migration Execution

  1. Start with Single Project Migration
    Test migration on one project using:
    UiPath.Upgrade.exe upgrade -p -v
    Validate the output before bulk migration.
  2. Use Bulk Migration for Scale
    For multiple projects:
    UiPath.Upgrade.exe bulk -p -v
    Ensure folder structure is clean and consistent.
  3. Provide Config for Connection IDs
    For Microsoft 365 activities, create a config file for ConnectionId and pass it via --config:

{
“* > *”: { “ConnectionId”: “00000000-0000-0000-0000-000000000001” }
}

Post-Migration Validation

  1. Review SARIF Report
    Check .upgrade folder for migration report and address flagged issues.
  2. Validate Application Scopes
    Confirm that merged scopes behave as expected. Test workflows with Use Application/Browser activities.
  3. Run End-to-End Tests
    Execute migrated workflows in a controlled environment before deploying to production.

Performance & Maintenance

  1. Optimize UIAutomation Selectors
    After migration, review selectors for accuracy and stability.
  2. Monitor Execution Time
    Modern activities may run slower initially—optimize where possible.
  3. Document Changes
    Keep a record of migrated projects, versions, and applied configurations for audit and rollback purposes

UIAutomation Supported Activities

UIAutomation Source and Destination Activities
Source activity Destination activity(-ies) Known limitations
Activate (UiPath.Core.Activities.Activate) Window Operation (UiPath.UIAutomationNext.Activities.NWindowOperation)
Attach Browser (UiPath.Core.Activities.BrowserScope) Use Application/Browser (UiPath.UIAutomationNext.Activities.NApplicationCard) * If the SearchScope property is set, the migration is not performed.
* If an expression is used for the BrowserType property, the migration is not performed.
Attach Window (UiPath.Core.Activities.WindowScope) Use Application/Browser (UiPath.UIAutomationNext.Activities.NApplicationCard) * If the SearchScope property is set, the migration is not performed.
Call Transaction (UiPath.Core.Activities.SAP.CallTransaction) Call Transaction (UiPath.UIAutomationNext.Activities.NSAPCallTransaction)
Check (UiPath.Core.Activities.Check) Check/Uncheck (UiPath.UIAutomationNext.Activities.NCheck) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
Click (UiPath.Core.Activities.Click) Click (UiPath.UIAutomationNext.Activities.NClick) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
* A classic Click activity using a variable with a null value as the input element results in a click at screen coordinates (0, 0). In contrast, the modern Click activity throws a runtime error in this scenario.
Click Image (UiPath.Core.Activities.ClickImage) Click (UiPath.UIAutomationNext.Activities.NClick) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
Click OCR Text (UiPath.Core.Activities.ClickOCRText) Click (UiPath.UIAutomationNext.Activities.NClick) * If the activity is inside a scope that uses a different OCR engine, an application card is automatically added over the migrated activity to switch the OCR engine.
* The activity is migrated even if the Target or Input Element is not set, as long as it has a scope parent.
* If any out argument property on the OCR engine is set, the migration is not performed.
Click Picture on Screen (UiPath.Core.Activities.SAP.ClickPictureOnScreen) Click Picture on Screen (UiPath.UIAutomationNext.Activities.NSAPClickPictureOnScreen)
Click Text (UiPath.Core.Activities.ClickText) Click (UiPath.UIAutomationNext.Activities.NClick) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
* If the classic activity has a browser element set as target, the migration is not performed.
Click Toolbar Button (UiPath.Core.Activities.SAP.ClickToolbarButton) Click Toolbar Button (UiPath.UIAutomationNext.Activities.NSAPClickToolbarButton)
Close Application (UiPath.Core.Activities.CloseApplication) Use Application/Browser (UiPath.UIAutomationNext.Activities.NApplicationCard) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
* After migration, the Use Application/Browser activity can close applications in more scenarios where Close Application would throw exceptions (e.g. SelectorNotFoundException when app is minimized, ArgumentException when the app is already closed).
Close Tab (UiPath.Core.Activities.CloseTab) Navigate Browser (UiPath.UIAutomationNext.Activities.NNavigateBrowser) * If the activity is outside a scope and does not use an input element, the migration is not performed.
Close Window (UiPath.Core.Activities.CloseWindow) Window Operation (UiPath.UIAutomationNext.Activities.NWindowOperation)
Element Exists (UiPath.Core.Activities.UiElementExists) Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState)
Expand ALV Hierarchical Table (UiPath.Core.Activities.SAP.ExpandALVHierarchicalTable) Expand ALV Hierarchical Table (UiPath.UIAutomationNext.Activities.NSAPExpandALVHierarchicalTable)
Expand ALV Tree (UiPath.Core.Activities.SAP.ExpandALVTree) Expand ALV Tree (UiPath.UIAutomationNext.Activities.NSAPExpandALVTree)
Expand Tree (UiPath.Core.Activities.SAP.ExpandTree) Expand Tree (UiPath.UIAutomationNext.Activities.NSAPExpandTree)
Extract Structured Data (UiPath.Core.Activities.ExtractData) Extract Data (UiPath.UIAutomationNext.Activities.NExtractData) * When Continue on error is set to False and Target - Next button is configured for extracting data from multiple pages, the classic Extract Structured Data activity failed after reaching the last page. In contrast, the modern Extract Data activity continues execution.
Find Children (UiPath.Core.Activities.FindChildren) Find Elements (UiPath.CUIAutomationNext.Activities.NFindElements)
Find Element (UiPath.Core.Activities.WaitUiElementAppear) Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) * If the WaitActive property is set, the migration is not performed.
* After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch.
Find Image (UiPath.Core.Activities.WaitImageAppear) Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) * After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch.
Find OCR Text Position (UiPath.Core.Activities.FindOCRText) Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) * If the activity is inside a scope that uses a different OCR engine, an application card is automatically added over the migrated activity to switch the OCR engine.
* The activity is migrated even if the Target or Input Element is not set, as long as it has a scope parent.
* If any out argument property on the OCR engine is set, the migration is not performed.
* If the classic activity has a browser element set as target, the migration is not performed.
* After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch.
Find Text Position (UiPath.Core.Activities.FindText) Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) * If the classic activity has a browser element set as target, the migration is not performed.
* After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch.
Get Attribute (UiPath.Core.Activities.GetAttribute) Get Attribute (UiPath.UIAutomationNext.Activities.NGetAttribute) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
Get From Clipboard (UiPath.Core.Activities.GetFromClipboard) Get Clipboard (UiPath.UIAutomationNext.Activities.NGetFromClipboard)
Get Full Text (UiPath.Core.Activities.GetFullText) Get Text (UiPath.UIAutomationNext.Activities.NGetText) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
Get OCR Text (UiPath.Core.Activities.GetOCRText) Get Text (UiPath.UIAutomationNext.Activities.NGetText)Use Application/Browser (UiPath.UIAutomationNext.Activities.NApplicationCard) * If the activity is inside a scope that uses a different OCR engine, an application card is automatically added over the migrated activity to switch the OCR engine.
* The activity is migrated even if the Target or Input Element is not set, as long as it has a scope parent.
* If any out argument property on the OCR engine is set, the migration is not performed.
Get Position (UiPath.Core.Activities.GetPosition) Get Attribute (UiPath.UIAutomationNext.Activities.NGetAttribute) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
Get Text (UiPath.Core.Activities.GetValue) Get Text (UiPath.UIAutomationNext.Activities.NGetText) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
Get Visible Text (UiPath.Core.Activities.GetVisibleText) Get Text (UiPath.UIAutomationNext.Activities.NGetText) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
*If the classic activity has a browser element set as a target, the migration is not performed.
Go Back (UiPath.Core.Activities.GoBack) Navigate Browser (UiPath.UIAutomationNext.Activities.NNavigateBrowser)
Go Forward (UiPath.Core.Activities.GoForward) Navigate Browser (UiPath.UIAutomationNext.Activities.NNavigateBrowser)
Go Home (UiPath.Core.Activities.GoHome) Navigate Browser (UiPath.UIAutomationNext.Activities.NNavigateBrowser)
Hide Window (UiPath.Core.Activities.HideWindow) Window Operation (UiPath.UIAutomationNext.Activities.NWindowOperation)
Highlight (UiPath.Core.Activities.Highlight) Highlight (UiPath.UIAutomationNext.Activities.NHighlight) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
Hover (UiPath.Core.Activities.Hover) Hover (UiPath.UIAutomationNext.Activities.NHover) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
Hover Image (UiPath.Core.Activities.HoverImage) Hover (UiPath.UIAutomationNext.Activities.NHover)Use Application/Browser (UiPath.UIAutomationNext.Activities.NApplicationCard) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
Hover OCR Text (UiPath.Core.Activities.HoverOCRText) Hover (UiPath.UIAutomationNext.Activities.NHover)Use Application/Browser (UiPath.UIAutomationNext.Activities.NApplicationCard) * If the activity is inside a scope that uses a different OCR engine, an application card is automatically added over the migrated activity to switch the OCR engine.
* The activity is migrated even if the Target or Input Element is not set, as long as it has a scope parent.
* If any out argument property on the OCR engine is set, the migration is not performed.
Hover Text (UiPath.Core.Activities.HoverText) Hover (UiPath.UIAutomationNext.Activities.NHover) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
* If the classic activity has a browser element set as target, the migration is not performed.
Image Exists (UiPath.Core.Activities.ImageFound) Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
Inject Js Script (UiPath.Core.Activities.InjectJsScript) Inject Js Script (UiPath.UIAutomationNext.Activities.NInjectJsScript) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
Maximize Window (UiPath.Core.Activities.MaximizeWindow) Window Operation (UiPath.UIAutomationNext.Activities.NWindowOperation)
Minimize Window (UiPath.Core.Activities.MinimizeWindow) Window Operation (UiPath.UIAutomationNext.Activities.NWindowOperation)
Move Window (UiPath.Core.Activities.MoveWindow) Window Operation (UiPath.UIAutomationNext.Activities.NWindowOperation)
Navigate To (UiPath.Core.Activities.NavigateTo) Go To Url (UiPath.UIAutomationNext.Activities.NGoToUrl)
OCR Text Exists (UiPath.Core.Activities.OCRTextExists) Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState)Use Application/Browser (UiPath.UIAutomationNext.Activities.NApplicationCard) * If the activity is inside a scope that uses a different OCR engine, an application card is automatically added over the migrated activity to switch the OCR engine.
* The activity is migrated even if the Target or Input Element is not set, as long as it has a scope parent.
* If any out argument property on the OCR engine is set, the migration is not performed.
* After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch.
On Element Appear (UiPath.Core.Activities.OnUiElementAppear) Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) * If the RepeatForever property is set to an expression or true, the migration is not performed. * If the WaitActive property is set, the migration is not performed. * If the WaitVisible property is set to an expression or true without a target, the migration is not performed.
* If the Target property is not set and the activity is outside a scope, the migration is not performed.
* After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch.
On Element Vanish (UiPath.Core.Activities.OnUiElementVanish) Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) * If the RepeatForever property is set to an expression or true, the migration is not performed. * If the WaitNotActive property is set, migration is not performed. * If the WaitNotVisible property is set to an expression or true without a target, the migration is not performed.
* If the Target property is not set and the activity is outside a scope, the migration is not performed.
* After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch.
On Image Appear (UiPath.Core.Activities.OnImageAppear) Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
* After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch.
On Image Vanish (UiPath.Core.Activities.OnImageVanish) Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
* After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch.
Open Application (UiPath.Core.Activities.OpenApplication) Use Application/Browser (UiPath.UIAutomationNext.Activities.NApplicationCard)
Open Browser (UiPath.Core.Activities.OpenBrowser) Use Application/Browser (UiPath.UIAutomationNext.Activities.NApplicationCard) * The property NewSession is obsolete and it will not be migrated.
* If the BrowserType property was not set, it will be migrated to IE, even if the project setting UI Automation Classic > Browser has been configured for another browser.
Read Status Bar (UiPath.Core.Activities.SAP.ReadStatusbar) Read Status Bar (UiPath.UIAutomationNext.Activities.NSAPReadStatusbar)
Refresh Browser (UiPath.Core.Activities.RefreshBrowser) Navigate Browser (UiPath.UIAutomationNext.Activities.NNavigateBrowser)
Restore Window (UiPath.Core.Activities.RestoreWindow) Window Operation (UiPath.UIAutomationNext.Activities.NWindowOperation)
SAP Login (UiPath.Core.Activities.SAP.Login) SAP Login (UiPath.UIAutomationNext.Activities.NSAPLogin)
SAP Logon (UiPath.Core.Activities.SAP.Logon) SAP Logon (UiPath.UIAutomationNext.Activities.NSAPLogon)
Select Dates in Calendar (UiPath.Core.Activities.SAP.SelectDatesInCalendar) Select Dates in Calendar (UiPath.UIAutomationNext.Activities.NSAPSelectDatesInCalendar)
Select Item (UiPath.Core.Activities.SelectItem) Select Item (UiPath.UIAutomationNext.Activities.NSelectItem) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
Select Menu Item (UiPath.Core.Activities.SAP.SelectMenuItem) Select Menu Item (UiPath.UIAutomationNext.Activities.NSAPSelectMenuItem)
OR
Select Item (UiPath.UIAutomationNext.Activities.NSelectItem)
* If the classic activity was incorrectly used to target elements other than windows, a simple modern Select Item activity is created.
Send Hotkey (UiPath.Core.Activities.SendHotkey) Keyboard Shortcuts (UiPath.UIAutomationNext.Activities.NKeyboardShortcuts)
OR
Type Into (UiPath.UIAutomationNext.Activities.NTypeInto)
* If the Target property is not set and the activity is outside a scope, the migration is not performed.
* If an empty field or an expression is used then it will be migrated to a modern Type Into activity.
Set Focus (UiPath.Core.Activities.SetFocus) Set Focus (UiPath.UIAutomationNext.Activities.NSetFocus) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
Set Text (UiPath.Core.Activities.SetValue) Set Text (UiPath.UIAutomationNext.Activities.NSetText) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
Set To Clipboard (UiPath.Core.Activities.SetToClipboard) Set Clipboard (UiPath.UIAutomationNext.Activities.NSetToClipboard)
Show Window (UiPath.Core.Activities.ShowWindow) Window Operation (UiPath.UIAutomationNext.Activities.NWindowOperation)
Table Cell Scope (UiPath.Core.Activities.CellScope) Table Cell Scope (UiPath.UIAutomationNext.Activities.NTableCellScope)
Take Screenshot (UiPath.Core.Activities.TakeScreenshot) Take Screenshot (UiPath.UIAutomationNext.Activities.NTakeScreenshot)
Text Exists (UiPath.Core.Activities.TextExists) Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) * If the classic activity has a browser element set as target, the migration is not performed.
* After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch.
Type Into (UiPath.Core.Activities.TypeInto) Type Into (UiPath.UIAutomationNext.Activities.NTypeInto) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
Type Secure Text (UiPath.Core.Activities.TypeSecureText) Type Into (UiPath.UIAutomationNext.Activities.NTypeInto) * If the Target property is not set and the activity is outside a scope, the migration is not performed.
Wait Element Vanish (UiPath.Core.Activities.WaitUiElementVanish) Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) * If the WaitNotActive property is set, the migration is not performed.
* If the WaitNotVisible property is set to an expression or true without a target, the migration is not performed.
* If the Target property is not set and the activity is outside a scope, the migration is not performed.
* After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch.
Wait Image Vanish (UiPath.Core.Activities.WaitImageVanish) Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) * After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch.

UIAutomation Unsupported Activities

UIAutomation Unsupported Activities
Classic activity name Classic activity type
Anchor Base UiPath.Core.Activities.AnchorBase
Block User Input UiPath.Core.Activities.BlockUserInput
Callout UiPath.Core.Activities.CalloutScope
Click Image Trigger UiPath.Core.Activities.ClickImageTriggerV2
Click Trigger UiPath.Core.Activities.ClickTriggerV2
Context Aware Anchor UiPath.Core.Activities.AnchorContextAware
Copy Selected Text UiPath.Core.Activities.CopySelectedText
CV Check UiPath.CV.Activities.CvCheckWithDescriptor
CV Click UiPath.CV.Activities.CvClickWithDescriptor
CV Dropdown Select UiPath.CV.Activities.CvSelectItemWithDescriptor
CV Element Exists UiPath.CV.Activities.CvElementExistsWithDescriptor
CV Extract Table UiPath.CV.Activities.CvExtractDataTableWithDescriptor
CV Get Text UiPath.CV.Activities.CvGetTextWithDescriptor
CV Highlight UiPath.CV.Activities.CvHighlightWithDescriptor
CV Hover UiPath.CV.Activities.CvHoverWithDescriptor
CV Refresh UiPath.CV.Activities.CvRefresh
CV Screen Scope UiPath.CV.Activities.CvScope
CV Type Into UiPath.CV.Activities.CvTypeIntoWithDescriptor
Double Click UiPath.Core.Activities.Click
Double Click Image UiPath.Core.Activities.ClickImage
Double Click OCR Text UiPath.Core.Activities.ClickOCRText
Double Click Text UiPath.Core.Activities.ClickText
Element Attribute Change Trigger UiPath.Core.Activities.ElementAttributeChangeTrigger
Element Scope UiPath.Core.Activities.ElementScope
Element State Change Trigger UiPath.Core.Activities.ElementStateChangeTrigger
Export UI Tree UiPath.Core.Activities.ExportUITree
Find Image Matches UiPath.Core.Activities.FindImageMatches
Find Relative Element UiPath.Core.Activities.FindRelative
Get Active Window UiPath.Core.Activities.GetActiveWindow
Get Ancestor UiPath.Core.Activities.GetAncestor
Get Event Info UiPath.Core.Activities.GetEventInfo
Get Password UiPath.Core.Activities.GetPassword
Get Source Element UiPath.Core.Activities.GetSourceElementV2
Google Cloud Vision OCR UiPath.Core.Activities.GoogleCloudOCR
Hotkey Trigger UiPath.Core.Activities.HotkeyTriggerV2
Indicate On Screen UiPath.Core.Activities.IndicateOnScreen
Inject .NET Code UiPath.Core.Activities.InjectDotNetCode
Invoke ActiveX Method UiPath.Core.Activities.InvokeActiveX
Key Press Trigger UiPath.Core.Activities.KeyPressTriggerV2
Load Image UiPath.Core.Activities.LoadImage
Microsoft Azure Computer Vision OCR UiPath.Core.Activities.MicrosoftAzureComputerVisionOCR
Microsoft OCR UiPath.Core.Activities.MicrosoftOCR
Microsoft Project Oxford Online OCR UiPath.Core.Activities.MicrosoftCloudOCR
Monitor Events UiPath.Core.Activities.MonitorEvents
Mouse Trigger UiPath.Core.Activities.MouseTriggerV2
Replay User Event UiPath.Core.Activities.ReplayUserEventV2
SAP Session Attributes Change Trigger UiPath.Core.Activities.SAPSessionTrigger
Save Image UiPath.Core.Activities.SaveImage
Select Multiple Items UiPath.Core.Activities.SelectMultipleItems
Set Clipping Region UiPath.Core.Activities.SetClippingRegion
Set Web Attribute UiPath.Core.Activities.SetWebAttribute
Start Process UiPath.Core.Activities.StartProcess
System Trigger UiPath.Core.Activities.SystemTriggerV2
Tesseract OCR UiPath.Core.Activities.GoogleOCR
Tooltip UiPath.Core.Activities.Callout
Use Foreground UiPath.Core.Activities.UseForegroundScope
Wait Attribute UiPath.Core.Activities.WaitAttribute

Mail Supported Activities

Mail Source and Destination Activities
Source Activity Destination Activity Notes
Send Outlook Desktop Mail Message (SendOutlookMail) Send Outlook Desktop Mail Message (SendOutlookMail) By default the activity is migrated to SendMailConnections. If Mail message field from Forwardcategory is populated, the activity will be migrated to GetEmailByIdConnections + ForwardEmailConnections. The GetEmailByIdConnections is used to convert from MailMessage to Office365Message by using the MailMessage id. When both source attachments are set (File path attachments collection + File path attachments), a new expression is created that unifies both entries in the Attachments(s) property of the migrated activity. Otherwise, only their counterpart migrated property is populated.
Get Outlook Desktop Mail Messages (GetOutlookMailMessages) GetEmailListConnections or GetEmailListConnections + Assign Filtering options are currently unsupported and have to be manually migrated. If the output of the original activity is set to a variable, an Assign activity will be appended. The Assign activity sets the original output variable from the source activity (List<MailMessage) to the output of the migrated activity (List). This is done in order to preserve the original behavior of the workflow. Therefore, non-migratable activities that consume the original source activity output (List) will still work as expected without requiring input modification.
Mark Outlook Desktop Mail As Read/Unread (MarkOutlookMailAsRead) GetEmailByIdConnections + MarkAsReadUnreadConnections The GetEmailByIdConnections is used to convert from MailMessage to Office365Message by using the MailMessage id.
Move Outlook Desktop Mail Message (MoveOutlookMessage) GetEmailByIdConnections + MoveEmailConnections The GetEmailByIdConnections is used to convert from MailMessage to Office365Message by using the MailMessage id.
Delete Outlook Desktop Mail Message (DeleteOutlookMailMessage) GetEmailByIdConnections + DeleteEmailConnections The GetEmailByIdConnections is used to convert from MailMessage to Office365Message by using the MailMessage id.
Reply To Outlook Desktop Mail Message (ReplyToOutlookMailMessage) GetEmailByIdConnections + ReplyToEmailConnections The GetEmailByIdConnections is used to convert from MailMessage to Office365Message by using the MailMessage id.
Set Outlook Desktop Mail Categories (SetOutlookMailCategories) GetEmailByIdConnections + SetEmailCategoriesConnections The GetEmailByIdConnections is used to convert from MailMessage to Office365Message by using the MailMessage id.
Save Outlook Desktop Mail Message (SaveOutlookMailMessage) GetEmailByIdConnections + DownloadEmailConnections The GetEmailByIdConnections is used to convert from MailMessage to Office365Message by using the MailMessage id.

Mail Unsupported Activities

Mail Unsupported Activities
Source Activity Destination Activity Notes
Outlook Desktop Mail Messages Trigger (OutlookMailMessagesTrigger) Unsupported The activity is skipped during migration. The Outlook Desktop Mail Messages Trigger cannot be automatically migrated since there is no counter part trigger activity that retains the full behavior of the old trigger. Therefore, the migration has to be done manually after the tool has finished the migration of other supported activities. The trigger has to be manually replaced with 1 of the available triggers for O365 package: 1. Email Received - Triggers when an email is received. 2. Email Sent - Triggers when an email is sent (can apply various filters to the trigger in order to filter out unwanted sent emails). Unfortunately, there is no O365 trigger that monitors a certain mail folder like the old Mail trigger did. The closest trigger option for this behavior is the Email Received from O365 package.
11 Likes

Hello, thanks for updating us! I would like know more about config file. How is it working? Can I do mapping internal legacy activity to internal windows activity, Because those names ara different that’s why It can not find the migrated activity at storages.

Hi @morkoccanbaran

I don’t think you can currently do this. If the names (namespace) match, it will work; if they don’t, it will stop the migration.

The way we currently handle migration between two activity packages is via custom migrator tool rules, and those are limited to a few activity packages (like the UIA Classic to Modern mapping).

I don’t believe we currently allow third-party developers to build their own migrator rules, but it’s something I will bring up with the team.


A follow-up question, though: Is the namespace of your custom activity package the only difference, or are there more complex changes between Legacy and Windows (such as different property names, or missing/added properties)?

Hi @loginerror

I think, If it can happen It would great!

No, only difference is not namespace because some libraries are not compatible with windows that’s why Also we migrate them in activity. Sometime we did change property name etc.

1 Like