skills/extensions/umbraco-entity-create-option-action/SKILL.md
Implement entity create option actions in Umbraco backoffice using official docs
npx skillsauth add albanist/umbraco_cli umbraco-entity-create-option-actionInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Entity Create Option Actions add customizable options when creating entities. These options appear in a create options dialog when the "Create" entity action is selected, allowing users to choose between different creation methods or paths. This enables extensibility where other developers can add their own creation options to existing workflows.
Always fetch the latest docs before implementing:
Modals: When the create option opens a modal dialog
umbraco-modalsRouting: When the create option navigates to a different view
umbraco-routingimport type { ManifestEntityCreateOptionAction } from '@umbraco-cms/backoffice/extension-registry';
const manifest: ManifestEntityCreateOptionAction = {
type: 'entityCreateOptionAction',
alias: 'My.EntityCreateOptionAction',
name: 'My Create Option',
weight: 100,
api: () => import('./my-create-option-action.js'),
forEntityTypes: ['user'],
meta: {
icon: 'icon-add',
label: 'Create with Template',
additionalOptions: false,
},
};
export const manifests = [manifest];
import { UmbEntityCreateOptionActionBase } from '@umbraco-cms/backoffice/entity-create-option-action';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
export class MyCreateOptionAction extends UmbEntityCreateOptionActionBase {
constructor(host: UmbControllerHost, args: { unique: string | null; entityType: string }) {
super(host, args);
}
override async execute() {
// Perform custom creation logic
console.log('Creating with custom option for entity type:', this.entityType);
// Could open a modal, navigate somewhere, or perform API calls
alert('Custom create option executed!');
}
}
export default MyCreateOptionAction;
import { UmbEntityCreateOptionActionBase } from '@umbraco-cms/backoffice/entity-create-option-action';
import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal';
export class MyCreateOptionAction extends UmbEntityCreateOptionActionBase {
override async execute() {
const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT);
const modal = modalManager.open(this, MY_CREATE_MODAL, {
data: {
entityType: this.entityType,
parentUnique: this.unique,
},
});
await modal.onSubmit();
}
}
import { UmbEntityCreateOptionActionBase } from '@umbraco-cms/backoffice/entity-create-option-action';
export class MyCreateOptionAction extends UmbEntityCreateOptionActionBase {
override async getHref() {
// Return a URL to navigate to instead of execute()
return `/section/my-section/workspace/my-workspace/create/${this.unique}`;
}
override async execute() {
// Not called when getHref() returns a value
}
}
icon - Icon to display for the optionlabel - Display label for the optionadditionalOptions - If true, shows as a secondary/additional optionThat's it! Always fetch fresh docs, keep examples minimal, generate complete working code.
development
Trigger and inspect ModelsBuilder source generation
tools
Umbraco Forms operations (read-only)
tools
Tree navigation helpers
tools
Template operations