As the Core Components are all-new, and offer multiple benefits, it is recommended for new AEM projects to use them. For existing projects, a migration should be part of a larger project effort, for example a rebranding or overall refactoring.
Therefore, Adobe provides following recommendations:
The Core Components are powerful, flexible, and easy to use and customize. Following a few key guidelines will ensure that your project with the Core Components is a success.
Any new project should be implemented with Core Components. However existing projects will usually have extensive implementations of the Foundation Components.
A larger effort on an existing project (for example a rebranding or overall refactoring) often offers a chance to migrate to the Core Components. To facilitate this migration, Adobe has provided a number of migration tools to encourage the adoption of the Core Components and the latest AEM technology.
The AEM Modernization Tools allow for the easy conversion of:
For further information about the usage of these tools, see their documentation.
The AEM Modernize Tools are a community effort and are not supported or warrantied by Adobe.
Core Components are an integral part of AEM and supported as is, under the same terms and conditions as if they were delivered as part of the Quickstart.
Like other AEM product features, the general rule is: Components are first announced to be deprecated, and the earliest removed for the following AEM release. That gives customers at least one release cycle to move to the new version of the component, before dropping its support.
The version of each component clearly states the AEM versions that it supports. When support ceases for a version of AEM, then so does the support of the Core Components for that version of AEM.
For details about the support of component customizations, see the Customizing Core Components page.
The following table gives an overview of the differences between core components and foundation components.
For details about their authoring capabilities and options to pre-configurable them, refer to the authoring page about them.
|Capability||Core Component||Foundation Component|
|Logic implementation||Java POJOs with Sling Models annotations||JSP code|
|Markup definition||HTML Template Language (HTL) syntax||JSP code|
|XSS sanitization||Automated by HTL||Mostly manual|
|CSS classes naming||Standardized naming convention based on Block Element Modifier (BEM) notation (as of release 2.0.0)||Custom schemes|
|Dialog definition||Coral 3||Coral 2 + Classic UI|
|JSON output||Sling Models Exporter with Jackson serialization||Default Sling servlet|
|Versioning||For the model and the HTL||None|
|Testing||Unit Tests + Integration Tests||Integration Tests|
|Delivery||Via public GitHub||Via Quickstart|
|License||Apache License||Adobe proprietary|
|Contribution||Via pull request||Not possible|
|Accessibility||Fully compliant with the WCAG 2.0 AA standard||Only partially compliant with the WCAG 2.0 AA standard|
The following table lists the available Core Components, linking to their API, and indicates which foundation components they replace.
|Core Component||Description||Replaced Foundation Component(s)|
|Page||Responsive page working with template editor||
|Breadcrumb||Page hierarchy navigation||
|Image||Smart and lazy loading of optimal rendition size||
|List||List of pages||
|Social Media Sharing||Facebook and Pinterest sharing widget||
|Form Container||Responsive form paragraph system||
|Form Text||Text input field||
|Form Options||Multiple options input field||
|Form Hidden||Hidden input field||
|Form Button||Submit or custom button||
|Navigation||A site navigation component that lists the nested page hierarchy||
|Language Navigation||A language and country switcher that lists the global language structure||
|Quick Search||A search component that displays the results as in-place suggestions in a drop-down menu||
|Teaser||Allows the content author to easily create a teaser to further content using an image, title, or rich text and linking to further content or other actions||
|Tabs||Allows the content author to organize page content within multiple tabs||
|Carousel||Allows the content author to organize content in a rotating carousel of slides||
|Content Fragment||Allows for the display of a content fragment||
|Content Fragment List||Allows for the display a list of content fragments||
|Separator||Separates content on a page||
|Accordion||Organize content panels in a collapsible accordion||
|Container||Organize components within a container||
|Button||Create a button on a page||
|Download||Add a downloadable asset to a page||
|Experience Fragment||Add an experience fragment to a page||
|Embed||Embed an external resource within a page||-|
|Progress Bar||Provide a visual representation of progress towards a goal||-|
|PDF Viewer||Presents a PDF document on a page||-|
For an overview of the upcoming Core Component road map see the project wiki on GitHub.
One benefit of versioned components is that it allows to separate the migration to a new AEM version from the migration to new component versions. Also, if new component versions are available, it allows for the individual migration of each component to the new version.
Migrations to a new AEM version won’t impact how the Core Components work, provided that their versions also support the new AEM version that is being migrated to. Customizations made to the Core Components should not be affected either, as long as they don’t use APIs that have been deprecated or removed.
Migrations to new versions of the Core Components won’t impact how the component works either, but new features might be introduced to page authors, which might require some configuration by a template editor, in case the default behavior isn’t desired. Customizations however might need to be adapted, for more details see the Customizing Core Components page.