
Webiny New Entry Wizard
Building a New Entry Wizard for the Headless CMS.
Install
npx skills add webiny/webiny-js --skill webiny-new-entry-wizard -g -a claude-code -y- Repository
- webiny/webiny-js8.1k
- Category
- Design
- Updated
- 5d ago
- License
- See repository
- Context cost
- Mediumabout 2,250 tokens
- Runs scripts
- No, instructions only
What it does
Building a New Entry Wizard for the Headless CMS. Use this skill when the developer wants to show a custom wizard UI before the entry form when creating new CMS entries -- collecting fields like title, slug, or category upfront, then pre-filling the entry form. Covers ContentEntryEditorConfig.NewEntryWizard, createFeature, FormModelFactory, createReactiveComponent, useContentEntryFormPresenter, and the dirty-flag on setData.
New Entry Wizard
TL;DR
A New Entry Wizard intercepts the "create new entry" flow in the Headless CMS and shows a custom form before the full entry editor. The wizard collects initial values (title, slug, category, etc.), then calls formPresenter.newEntry(initialValues) to pre-fill the entry form and transition to the editor. The form is automatically marked as dirty so the user sees unsaved changes.
A wizard extension has five files:
abstractions.ts-- DI token and presenter interface (ALWAYS a standalone file)feature.ts--createFeaturewiring (ALWAYS a standalone file)- Presenter -- owns the wizard form (fields, layout, validation) via
FormModelFactory - View -- renders the wizard UI using
FormViewandFormErrors - Registration -- plugs the wizard into specific content models via
ContentEntryEditorConfig.NewEntryWizard
Registration
// extensions/myWizard/index.tsx
import React from "react";
import { RegisterFeature } from "webiny/admin";
import { ContentEntryEditorConfig } from "webiny/admin/cms/entry/editor";
import { MyWizardFeature } from "./feature.js";
import { MyWizardForm } from "./MyWizardForm.js";
const MyWizardExtension = () => {
return (
<>
<RegisterFeature feature={MyWizardFeature} />
<ContentEntryEditorConfig>
<ContentEntryEditorConfig.NewEntryWizard
element={<MyWizardForm />}
modelIds={["article", "blogPost"]}
/>
</ContentEntryEditorConfig>
</>
);
};
export default MyWizardExtension;


