Migration from V1

data-variant=tip
data-slots=text
The commerce-app-migrate skill assists with migrating your V1 Admin UI SDK extension to V2. It generates a new V2 extension scaffold, copies your existing code, and updates the configuration to match the new V2 structure. Refer to the skill's README in the aio-commerce-sdk repo for details.

If you are porting an extension from the deprecated V1 extension points, note the following structural changes:

View vs. worker actions

Mass actions and order view buttons declare a type of either view or worker:

For worker actions, runtimeAction identifies the action using the <package>/<action> format from your app.config.yaml runtime manifest (for example, mass-actions/massAction). Commerce resolves this to the full deployed action URL at installation time.

Inline notifications

Instead of registering a separate bannerNotification extension point, declare a notifications object directly on a mass action or view button:

{
  id: 'order-mass-action-with-redirect',
  label: 'Mass Action With Redirect',
  type: 'view',
  path: '#/mass-action-with-redirect',
  notifications: {
    success: 'Order custom success message',
    error: 'Order custom error message',
  },
}
Field
Type
Required
Description
notifications.success
string
No
The banner message shown when the action completes successfully.
notifications.error
string
No
The banner message shown when the action fails.

If notifications is omitted, Commerce displays a default success or error banner.

ACL protection

Any menu item, mass action, view button, or grid column can be gated behind a dedicated Commerce ACL resource by setting aclProtected: true:

{
  id: 'flag-orders',
  label: 'Flag for review',
  type: 'view',
  path: '#/flag-orders',
  aclProtected: true,
}

When aclProtected is true, Commerce generates a nested ACL resource scoped to your app (app → entity → extension-point type → item) so administrators can grant or restrict access to individual menu items, mass actions, view buttons, or grid columns per admin role. When aclProtected is omitted or false, the item uses the shared Magento_CommerceBackendUix::adminuisdk_extensions resource used by all unprotected V2 extension points.

Grid columns call your runtime action directly

Instead of an API Mesh source, a V2 gridColumns registration declares a runtimeAction. When a merchant opens the grid, Commerce sends a POST request to your action with the visible row IDs, and renders the values your action returns:

{ "requestId": "...", "gridType": "order", "ids": ["000000001", "000000002"] }

See Order grid columns, Product grid columns, and Customer grid columns for the full column schema and a sample runtime action.

customFees support is deprecated

The V2 Admin UI SDK does not support the customFees extension point. In V1, this extension point allowed apps to add custom fees to the order totals summary. In V2, order total modifications are implemented as a webhook on plugin.magento.out_of_process_totals_collector.api.get_total_modifications.custom_fees. See Checkout Totals Collector for details.