The Metadata Editor opens a metadata import file, such as system-objecttype-extensions.xml, as a tree of the object types it extends or defines, their attribute groups and their attributes. Every change is an edit of the XML, written where metadata.xsd expects it, and one Undo step
Open a metadata file
Any .xml file whose root is <metadata xmlns="http://www.demandware.com/xml/impex/metadata/2006-10-31"> opens in the Metadata Editor, whatever its name or folder. Two tabs sit under the editor, as for pipelines: Metadata Editor first and Text beside it. Both show the same document, so Undo covers both. The Text tab opens with the caret on the selected row's XML, and back in the Metadata Editor the row under the caret is selected
To create one, right-click a folder such as sites/site_template/meta and choose New › Metadata File. Pick System object extensions (system-objecttype-extensions.xml) or Custom object types (custom-objecttype-definitions.xml). A new file shows No object types yet with the links Extend a system object and Add a custom object type
The toolbar
One row over the tree, left to right
| Control | What it does |
|---|---|
| Add | Adds an Attribute… (Cmd+N / Ctrl+N), an Attribute Group…, a System Object Extension… or a Custom Object Type… |
| Delete | Deletes the selected rows. On rows that a group only lists, it reads Remove from Group |
| Search IDs and names | Filters the tree by ID or display name. Cmd+F / Ctrl+F focuses it, Escape clears it, Down goes to the rows |
| All, Custom, System | The kind of attribute, each with its count |
| No usages | Custom attributes nothing in the project reads |
| Not in a group | Custom attributes in none of their type's groups: Business Manager's forms leave them out |
| Filters | Every filter, with how many attributes each shows. The badge counts the filters that are on |
| Reset | Takes off the filters, keeping the search and the kind |
| Count | 9 attributes, or 1 of 9 while a filter is on |
| Problems | The number of problems in the file. A click opens the XML and its problems |
| Expand All, Collapse All | The tree's branches |
Find attributes
The search keeps the path to each match, so colo shows Product › Looks › color. The Filters popup holds every filter in a grid, each with the number of attributes it shows
| Section | Filters |
|---|---|
| Kind | All, Custom, System |
| Status | With problems, No usages, Not in a group, No display name, No description |
| Object types | The types of the file, such as Product or a custom object type |
| Attribute types | The types by family: Text, Numbers, Choices, Dates, Media, Lists |
| Flags | Localizable, Mandatory and the other flags, each Any, Yes or No |
Find a filter narrows the popup and Reset all clears it. When nothing matches, the tree says what it looked for and offers Clear the filter
The tree
| Column | Shows |
|---|---|
| Name | The type, group or attribute ID. A second block extending the same type reads Product (2). An attribute nothing reads is grey, and a problem draws a waved line under it |
| Display name | The x-default display name |
| Type | The attribute type and the flags that are on, such as Text localizable. A type row reads System object or Custom object type |
| Usages | How many places in the project read the attribute, a click lists them. A type row counts its unused attributes |
Under each type come its groups in file order, then Not in a group. Attributes a group lists but the file doesn't define, such as the system attribute name, are grey. The columns drop as the editor narrows: Display name first, then Type
Edit in the tree
- Double-click a display name or a type to edit it in place.
F2renames the ID. Changing the type of an attribute asks first, because an import fails on an instance that already has it - Drag attributes onto a group to add them, between members to reorder, or onto Not in a group to take them out. The tooltip says what the drop does: Add to Looks, Move to Shipping, Move here
- Right-click for Add Attribute…, Rename, Duplicate…, Groups, Remove from Group, Delete, Move Up, Move Down, Show in XML, Show Usages, Copy ID and Copy Script Access. A row the file has twice adds Go to Second Definition
Copy Script Access copies how code reads the attribute: product.custom.color for a product, Site.getCurrent().getCustomPreferenceValue('id') for a site preference, System.getPreferences().getCustom().id for an organization preference
Usages
The Usages column counts the places in the project that read each custom attribute, in scripts, ISML and controllers. Click the count, or press Cmd+Alt+F7 / Ctrl+Alt+F7 on the row, to list them with the line that reads it, such as product.custom.color. Show Usages is grey on an attribute nothing reads
Delete asks first and says what reads the attribute: Delete packSize from Product? Nothing in the project reads it. An import removes no attribute from an instance, so delete it in Business Manager too
Add an attribute
Add › Attribute… opens New Attribute. Pick the object type and the group, or New group…, then type the ID: the name follows it in words, so careInstructions gives Care instructions
The gallery on the left lists the 16 attribute types by family with a sample value. Search types, such as list or date finds them by name, family, sample or script type. The right side shows the type's settings and a live preview: the Business Manager field, notes such as A value per locale, and the lines a script reads it with. An enum offers Add example values. Add Attribute writes the whole definition as one step
| Type | Sample | Scripts read |
|---|---|---|
| String | Midnight Blue | String |
| Text | Hand wash cold. Dry flat | String |
| HTML | <p>Runs <b>small</b></p> | dw.content.MarkupText |
| [email protected] | String | |
| Password | •••••••• | String, stored encrypted |
| Integer | 12 | Number |
| Number | 19.99 | Number |
| Boolean | Yes | Boolean |
| Enum of Strings | Cotton | dw.value.EnumValue |
| Enum of Integers | 24 months | dw.value.EnumValue |
| Date | 2026-10-18 | Date |
| Date + Time | 2026-10-18 09:30 | Date |
| Image | images/badges/new.png | dw.content.MediaFile |
| Set of Strings | summer, linen | String[] |
| Set of Integers | 38, 40, 42 | Number[] |
| Set of Numbers | 1.5, 2.25 | Number[] |
The other Add items ask for less: New Attribute Group (ID and display name), Extend System Object Type (a system type such as Profile) and New Custom Object Type (ID, display name, key attribute and type, data scope, replication, retention in days)
Properties
Click a row and the panel under the tree shows its properties, growing if it is folded or small. Its header has the usage count and Show in XML. The sections flow into columns when there is room
| Section | Settings |
|---|---|
| General | ID, Name, Description, Type and the groups as chips with Add to Group |
| Flags | Localizable, Site-specific, Mandatory, Visible, Externally managed, Order required, Externally defined |
| Values | For an enum: Value, Name and Default, then Select multiple and Immutable |
| Value | The default, then the settings Business Manager offers for the type, such as Min length, Field length, Regular expression or Unit |
A field writes its value on Enter or when you leave it, and Escape restores the file's value. A custom object type shows its storage settings, and several selected attributes share their flags and groups, with New Group… to add a group with them
Groups, types and keys
A group shows its members as a table of Attribute, Name, Type and Usages, in the order Business Manager lists them. Its Add offers New Attribute…, Existing Attributes… and System Attribute…, its arrows move the selected member, and its sort orders the group Sort by ID or Sort by Name
A custom object type shows its Storage: Data scope (Site or Organization), Replication and Retention in days, empty keeps the objects. Its key, such as configId, String, links to the key attribute, whose form has the ID and type
Translations
The language button beside Name, Description and Unit opens the translations, such as Name Translations. Add lists the project's locales with the sites that use them, and Other Locale… takes any locale such as de or fr-FR. A badge on the button marks a field that has translations
XML and problems
The panel's XML tab is the IDE's editor on the same file. Selecting a row marks its whole element in the XML, and clicking in the XML selects the row there. The problems count in the toolbar opens it with the Problems list, beside the XML when there is room and under it when not
| Problem | Example |
|---|---|
| A repeated definition | Product defines careInstructions more than once, with First definition and Second definition |
| A repeated group or listing | The group Looks lists color more than once |
| A wrong default | The default value of isGiftWrappable is no boolean |
| Schema and syntax errors | Checked against the bundled metadata.xsd |
Previous Problem and Next Problem move through them and the places of a duplicate. Go to XML shows the selected problem in the XML, and Delete This Definition (or Group, Listing) deletes the selected place of a duplicate, the others stay
Each place of a duplicate has an arrow in the XML gutter. Its tooltip reads Product defines careInstructions more than once: go to the second definition, line 76, and a click goes there. Problems are fixed in the XML: the editor has no Alt+Enter fix for them
Split view
The split button in the panel's header shows the properties and the XML together: side by side when the panel is 640 px wide or more, the properties over the XML when it is narrower. Selecting a row fills the form and marks its element in the XML, and clicking in the XML selects that row. The button again, or a tab, shows one at a time
Clicking the shown tab, or the chevron, folds the panel down to its tabs, and the chevron opens it again under the tree. The editor remembers the layout
Narrow editors
The editor fits beside tool windows such as B2C Metadata. The search narrows first, then the toolbar folds the count, Reset, Not in a group, No usages, the tree buttons and the kind into Filters, whose badge still counts them. The columns drop, and the properties and the XML stack under each other
What the editor writes
- Each change is one command named for it, such as Add Attribute fabric, so Undo reverts it
- Elements go where
metadata.xsdputs them, and text is escaped - Turning a flag off writes
false. An import leaves a setting the file doesn't name as it is on the instance - A new attribute gets what a Business Manager export writes, such as
mandatory-flag falseandmin-length 0 - Renaming an attribute renames it in the file's groups too. Code keeps reading the old ID
- Deleting an attribute or a type doesn't delete it on an instance. Delete it in Business Manager too
License
Editing and usage counts need a license, see Purchase & License. Without one the editor shows The metadata editor needs an IntelliJ SFCC license: the file is shown read-only, and the Text tab still edits the XML
Troubleshooting
| Problem | Fix |
|---|---|
| No Metadata Editor tab | Check that the root element is metadata with the namespace above |
| The XML has no metadata root | Use Fix it in the XML, then check the root element |
Usages show … or nothing | Usages are counted after indexing finishes, and with a license |
| An attribute is grey but is used | A read the plugin can't type, such as custom[name] with a variable, isn't counted. Type the value with JSDoc |