Help us improve
Share bugs, ideas, or general feedback.
From orocommerce-skills
Use when developing OroCommerce v6.1 frontend — creating custom themes, overriding templates, writing SCSS styles, configuring layout updates, creating JavaScript page components, working with jsmodules.yml or assets.yml, or customizing storefront/back-office appearance. Relevant when the user mentions 'theme', 'SCSS', 'Twig layout', 'template override', 'page component', 'layout update', 'assets.yml', 'jsmodules.yml', 'storefront styling', 'back-office UI', or any OroCommerce frontend development task.
npx claudepluginhub netresearch/claude-code-marketplace --plugin orocommerceHow this skill is triggered — by the user, by Claude, or both
Slash command
/orocommerce-skills:oro-frontendThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Every OroCommerce theme lives in a bundle's `Resources/views/layouts/` directory:
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
Every OroCommerce theme lives in a bundle's Resources/views/layouts/ directory:
YourBundle/Resources/
├── views/layouts/
│ └── [theme-name]/
│ ├── theme.yml # REQUIRED — defines theme metadata
│ └── config/
│ ├── assets.yml # CSS/JS registration
│ └── jsmodules.yml # JavaScript module paths
└── public/[theme-name]/
├── scss/
│ ├── settings/ # Mixins, functions (compiled FIRST)
│ ├── variables/ # Config variables (compiled SECOND)
│ └── components/ # Component styles (compiled THIRD)
└── js/
label: My Custom Theme
description: "Optional description"
parent: default
groups: [commerce]
rtl_support: true
Theme name constraint: Must match regex [a-zA-Z][a-zA-Z0-9_-:]*. Use kebab-case. Parent: default for OroCommerce storefront. Child themes inherit SCSS, templates, and JavaScript.
Oro enforces a strict compilation order. Violating it causes build failures:
settings/ — Mixins, functions, reusable utilitiesvariables/ — Configuration variables, color palettescomponents/ — Component styles (BEM: .block__element--modifier)A mixin defined in components/ is unavailable to variables/. Use !default on variables so child themes can override. Use map.deep-merge() to extend parent palettes without losing keys.
See references/frontend-patterns.md for complete SCSS examples per folder.
Layout updates are YAML files that modify the layout tree at runtime:
layout:
actions:
- '@add':
id: my_custom_block
parentId: page_main_content
blockType: text
options:
text: 'Custom content here'
- '@setBlockTheme':
themes: 'my_custom_template.html.twig'
- '@move':
id: header_logo
parentId: new_parent_id
sibling: 2
- '@remove':
id: old_widget
See references/layout-actions.md for the full action reference.
OroCommerce uses Chaplin.js-based page components initialized from server-rendered HTML via data-page-component-module and data-page-component-options attributes. Register modules in jsmodules.yml under dynamic-imports: for async loading.
See references/frontend-patterns.md for full Chaplin.js examples and jsmodules.yml configuration.
SCSS folder order: Defining a variable in components/ won't work if variables/ hasn't compiled yet. Follow the strict order: settings, variables, components.
Block naming: Twig layout blocks must end with _widget. ID-specific blocks use underscore prefix: _product_details_widget. Missing either breaks template resolution.
Parent theme inheritance: Use map.deep-merge() to extend parent color palettes. Direct assignment replaces the entire palette, losing parent keys.
references/frontend-patterns.md — SCSS examples, assets.yml, jsmodules.yml, Chaplin.js, template overrides, build commands, storefront vs. back-officereferences/layout-actions.md — Full layout action reference