Implement collection actions in Umbraco backoffice using official docs
Installation
Details
Usage
After installing, this skill will be available to your AI coding assistant.
Verify installation:
npx agent-skills-cli listSkill Instructions
name: umbraco-collection-action description: Implement collection actions in Umbraco backoffice using official docs version: 1.0.0 location: managed allowed-tools: Read, Write, Edit, WebFetch
Umbraco Collection Action
What is it?
Collection Actions are buttons that appear in a collection's toolbar, providing actions that can be performed on the collection as a whole (not on individual items - those are Entity Bulk Actions). Common examples include "Create New" buttons or export functionality. Actions can either execute code or navigate to a URL.
Documentation
Always fetch the latest docs before implementing:
- Main docs: https://docs.umbraco.com/umbraco-cms/customizing/extending-overview/extension-types/collections
- Collection View: https://docs.umbraco.com/umbraco-cms/customizing/extending-overview/extension-types/collections/collection-view
- Foundation: https://docs.umbraco.com/umbraco-cms/customizing/foundation
- Extension Registry: https://docs.umbraco.com/umbraco-cms/customizing/extending-overview/extension-registry
Related Foundation Skills
-
Context API: For accessing collection context
- Reference skill:
umbraco-context-api
- Reference skill:
-
Modals: When actions open modal dialogs
- Reference skill:
umbraco-modals
- Reference skill:
-
Conditions: For controlling when actions appear
- Reference skill:
umbraco-conditions
- Reference skill:
Workflow
- Fetch docs - Use WebFetch on the URLs above
- Ask questions - What collection? What action to perform? Navigate or execute?
- Generate files - Create manifest + action class based on latest docs
- Explain - Show what was created and how to test
Minimal Examples
Manifest (manifests.ts)
import type { ManifestCollectionAction } from '@umbraco-cms/backoffice/extension-registry';
const manifest: ManifestCollectionAction = {
type: 'collectionAction',
alias: 'My.CollectionAction.Create',
name: 'Create Item Action',
api: () => import('./create-action.js'),
meta: {
label: 'Create New',
},
conditions: [
{
alias: 'Umb.Condition.CollectionAlias',
match: 'My.Collection',
},
],
};
export const manifests = [manifest];
Action Implementation (create-action.ts)
import { UmbCollectionActionBase } from '@umbraco-cms/backoffice/collection';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
export class CreateAction extends UmbCollectionActionBase {
constructor(host: UmbControllerHost) {
super(host);
}
async execute() {
// Perform the action
console.log('Create action executed');
}
}
export default CreateAction;
Link-based Action (using getHref)
import { UmbCollectionActionBase } from '@umbraco-cms/backoffice/collection';
export class CreateLinkAction extends UmbCollectionActionBase {
async getHref() {
// Return URL to navigate to
return '/section/my-section/workspace/my-workspace/create';
}
async execute() {
// Not called when getHref returns a value
}
}
export default CreateLinkAction;
Action with Modal
import { UmbCollectionActionBase } from '@umbraco-cms/backoffice/collection';
import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal';
export class ExportAction extends UmbCollectionActionBase {
async execute() {
const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT);
const modal = modalManager.open(this, MY_EXPORT_MODAL, {
data: {
collectionAlias: 'My.Collection',
},
});
await modal.onSubmit();
}
}
export default ExportAction;
Action with Additional Options Indicator
const manifest: ManifestCollectionAction = {
type: 'collectionAction',
alias: 'My.CollectionAction.CreateWithOptions',
name: 'Create With Options',
api: () => import('./create-options-action.js'),
meta: {
label: 'Create',
additionalOptions: true, // Shows indicator that more options are available
},
conditions: [
{
alias: 'Umb.Condition.CollectionAlias',
match: 'Umb.Collection.Document',
},
],
};
Action Class with Additional Options
import { UmbCollectionActionBase } from '@umbraco-cms/backoffice/collection';
export class CreateWithOptionsAction extends UmbCollectionActionBase {
async hasAdditionalOptions() {
return true;
}
async execute() {
// Show options menu or modal
}
}
export default CreateWithOptionsAction;
Meta Properties
| Property | Description |
|---|---|
label | Required. Button text |
href | Optional static URL (use getHref() for dynamic) |
additionalOptions | Shows dropdown indicator if true |
Common Collection Aliases for Conditions
Umb.Collection.DocumentUmb.Collection.MediaUmb.Collection.MemberUmb.Collection.UserUmb.Collection.DataType
That's it! Always fetch fresh docs, keep examples minimal, generate complete working code.
More by umbraco
View allUpdate the IGNORED_ENDPOINTS.md documentation file with current endpoint coverage analysis. Use when documentation needs to be refreshed or when verifying ignored endpoint status.
Count the total number of MCP tools in the Umbraco MCP Server project and provide a breakdown by collection. Use when the user asks about tool counts, tool statistics, or how many tools exist.
Implement Tiptap statusbar extensions for Umbraco rich text editor using official docs
Implement MFA login providers for Umbraco backoffice using official docs
