This release introduces a completely new authoring interface, the Content Editor, with lots of white space and undisturbed flow of content. Use the content editor to write news articles, blog posts and press releases – anything that is a mix of structured form fields and free-flow composition. You can publish content directly from the editor which helps get new information out without delay.

Also in this release, developers will enjoy the new JavaScript template models and more ways to reuse configuration in light modules.

Changes for authors

New editor for easy content creation

Content Editor is a new editing interface that lets authors create content easily and publish it instantly. The new editor provides ample white space and an undisturbed flow of content. It is ideally suited for long-form content where you mix structured form fields and free-flowing composition such as news articles, blog posts, product pages and press releases.

The new Stories app provides a ready-to-use implementation of the content editor and is included in the Magnolia enterprise bundles. Customize the Stories app to suit your needs, or use it as a blueprint to create your own content editor app. The Magnolia travel demo provides sample content and pages to demonstrate the capabilities of the content editor.


  • Easy content creation. You don't need to be a CMS expert to compose and publish content. Now you can let any type of author create rich and reusable content. Authors don't need to become experts in the tool first. Authors can focus on what they love to do: write great stories and get them out immediately. You control what content blocks are available – authors have the freedom to arrange them into a compelling story. 
  • Publish before competitors. Consumers can get information from various sources today at incredible speeds. It is critical to get a breaking story out first. The first story that reaches the audience is the one that will be read. Being first in social feeds also means better acceleration and ultimately more traffic coming your way. The Stories app can bypass workflows to let authors publish content in seconds. Get the first draft out as soon as a story breaks. Keep publishing more detail and add depth as the story develops.
  • Reusability and flexibility at the same time. Content management systems often ask you to choose between editing content in rigid forms and very flexible pages. Forms give you reusability while page layout gives authors flexibility to control the experience. Magnolia's Stories app is right in the middle of those poles. Authors can input the right amount of metadata and structured content to make the content reusable, while at the same time have enough freedom to craft a rich end-user experience.


Reclaiming workflow tasks

If a user has the publisher role, they can now reclaim a publication task that was assigned to another user. This avoids one person becoming a bottleneck in the publication workflow.

For example, if a publisher assigns a task to himself and then goes on vacation, leaving the task incomplete, another user can claim the task for himself. The absentee publisher is informed of the change in the Pulse


Changes for developers

JavaScript template models

Magnolia speaks the language of front-end developers. Now you can supply a JavaScript template model in a light module. Develop and deploy faster without the need for Java, Maven or WAR deployment.

  • Front-end developers have access to rich Magnolia functionality that was previously only available in Java.
  • JS models are performant and fun to work with. Changes are picked up instantly, just like any other file in a light module.
  • You can simplify template scripts by moving complicated logic to template models.

See: How to work with JavaScript models


Reusing configuration with YAML inherit and include

Your ability to reuse configuration has improved, boosting productivity for front-end development with Magnolia.

You can now reuse configuration easily with YAML !inherit and !include directives. Both inherited and included definitions can be modified and overridden. You can !include from YAML-based files and !inherit from registered definitions (such as YAML or JCR definitions).


  • Easier to create new definitions.
  • Reduces duplication of configuration which improves maintenance.
  • Makes it clearer how your new definition is related to existing ones.

Use cases:

  • Want to create a new dialog that is almost the same as the MTK Text & Image component? Inherit it and specify what you want to change.
  • Want to create a new app that is almost the same as the Pages app? Inherit the Pages app.


A new !inherit directive allows a YAML file to inherit any other registered definition from any source: Blossom, Java code, JCR or YAML. The result is a new definition that you can modify further. In this way, the new YAML !inherit directive is very similar to the JCR extends property.

Reference the inherited definition by its identifier.

Example: Define a new renderer json . Inherit everything from the freemarker renderer but specify a different contentType .

contentType: application/json
See: YAML inherit


The existing !include directive has been improved. Now you can override the included values. For example, a YAML file that defines an link field can be included in two different dialogs: one dialog definition modifies the required property to make the field required and another dialog that keeps the field optional.

Reference the included definition using its resource path. You can include a complete definition at the top of your new definition or a fragment at a sub-level.

Best practice

Typically, you include YAML snippets which are not a proper or complete definition. Do not add these snippets to the folders which are meant for definitions (templates, dialogs, app). Instead, add these snippets to a folder which is not scanned, for instance /<your-module>/includes/ .
Example: Define a new form. Include a tab and actions from other definitions. Modify a property.

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>Log in - Magnolia Bitbucket</title><script>
<link rel="stylesheet" href="/s/5f5fe464516a6c5b9c455381415ace6d-CDN/-2080960375/5e527f2/k9vk2f/aad85a899ed1c68cf9653e735ad438ff/_/download/contextbatch/css/_super/batch.css" data-wrm-key="_super" data-wrm-batch-type="context" media="all">
<link rel="stylesheet" href="/s/7364439700d47cabba95f7a8e86d29af-CDN/-2080960375/5e527f2/k9vk2f/6f9d8fea346063f8a3e3e0b41d4ef6db/_/download/contextbatch/css/,-_super/batch.css" data-wrm-key=",-_super" data-wrm-batch-type="context" media="all">
<link rel="stylesheet" href="/s/e3c5630b7437bc5c57d4bf22bb4c345e-CDN/-2080960375/5e527f2/k9vk2f/2dc868d2ee4aa15648ae7b05871d11ce/_/download/contextbatch/css/bitbucket.layout.focused,bitbucket.layout.base,atl.general,-_super/batch.css?slack-enabled=true" data-wrm-key="bitbucket.layout.focused,bitbucket.layout.base,atl.general,-_super" data-wrm-batch-type="context" media="all">
<script src="/s/23341bfef727890d6f6bfaa16c5d0b5c-CDN/-2080960375/5e527f2/k9vk2f/aad85a899ed1c68cf9653e735ad438ff/_/download/contextbatch/js/_super/batch.js?locale=en-US" data-wrm-key="_super" data-wrm-batch-type="context" data-initially-rendered></script>
<script src="/s/74e6e9fc9e664540e2f615c400d6cd56-CDN/-2080960375/5e527f2/k9vk2f/6f9d8fea346063f8a3e3e0b41d4ef6db/_/download/contextbatch/js/,-_super/batch.js?locale=en-US" data-wrm-key=",-_super" data-wrm-batch-type="context" data-initially-rendered></script>
<script src="/s/f2a79cf770d189c8097469c65fb4da87-CDN/-2080960375/5e527f2/k9vk2f/2dc868d2ee4aa15648ae7b05871d11ce/_/download/contextbatch/js/bitbucket.layout.focused,bitbucket.layout.base,atl.general,-_super/batch.js?locale=en-US&amp;slack-enabled=true" data-wrm-key="bitbucket.layout.focused,bitbucket.layout.base,atl.general,-_super" data-wrm-batch-type="context" data-initially-rendered></script>
<meta name="application-name" content="Bitbucket"><link rel="shortcut icon" type="image/x-icon" href="/s/-2080960375/5e527f2/k9vk2f/1.0/_/download/resources/com.atlassian.bitbucket.server.bitbucket-webpack-INTERNAL:favicon/favicon.ico" /><link rel="search" href="" type="application/opensearchdescription+xml" title="Bitbucket code search"/></head><body class="aui-page-focused aui-page-focused-small aui-page-size-small bitbucket-theme user-login"><ul id="assistive-skip-links" class="assistive"><li><a href="#content">Skip to content</a></li></ul><div id="page"><!-- start #header --><header id="header" role="banner"><section class="notifications"></section><nav class="aui-header aui-dropdown2-trigger-group" aria-label="site"><div class="aui-header-inner"><div class="aui-header-before"><button class=" aui-dropdown2-trigger app-switcher-trigger aui-dropdown2-trigger-arrowless" aria-controls="app-switcher" aria-haspopup="true" role="button" data-aui-trigger href="#app-switcher"><span class="aui-icon aui-icon-small aui-iconfont-appswitcher">Linked Applications</span></button><div id="app-switcher" class="aui-dropdown2 aui-style-default" role="menu" hidden data-is-user-admin="false" data-is-switcher="true"><div class="app-switcher-loading">Loading&hellip;</div></div></div><div class="aui-header-primary"><span id="logo" class="aui-header-logo bitbucket-header-logo"><a href=""><img src="/s/-2080960375/5e527f2/k9vk2f/1.0/_/download/resources/com.atlassian.bitbucket.server.bitbucket-webpack-INTERNAL:bitbucket-logo/images/logo/bitbucket.svg" alt="Bitbucket"/></a></span><ul class="aui-nav"></ul></div><div class="aui-header-secondary"><ul class="aui-nav"><li class=" help-link"title="Help"><a class=" aui-dropdown2-trigger aui-dropdown2-trigger-arrowless" aria-controls="com.atlassian.bitbucket.server.bitbucket-server-web-fragments-help-menu" aria-haspopup="true" role="button" tabindex="0" data-aui-trigger><span class="aui-icon aui-icon-small aui-icon-small aui-iconfont-question-circle">Help</span></a><div id="com.atlassian.bitbucket.server.bitbucket-server-web-fragments-help-menu" class="aui-dropdown2 aui-style-default" role="menu" hidden data-aui-dom-container="body"><div class="aui-dropdown2-section help-items-section"><ul class="aui-list-truncate" role="presentation"><li role="presentation"><a href=";amp;utm_medium=in-app-help&amp;amp;utm_source=stash" title="Go to the online documentation for Bitbucket" data-web-item-key="com.atlassian.bitbucket.server.bitbucket-server-web-fragments:general-help">Online help</a></li><li role="presentation"><a href=";utm_medium=in-app-help&amp;utm_source=stash" title="Learn about Git commands &amp; workflows" data-web-item-key="com.atlassian.bitbucket.server.bitbucket-server-web-fragments:learn-git">Learn Git</a></li><li role="presentation"><a href="/getting-started"class="getting-started-page-link" title="Overview of Bitbucket features" data-web-item-key="com.atlassian.bitbucket.server.bitbucket-server-web-fragments:getting-started-page-help-link">Welcome to Bitbucket</a></li><li role="presentation"><a href="/#"class="keyboard-shortcut-link" title="Discover keyboard shortcuts in Bitbucket" data-web-item-key="com.atlassian.bitbucket.server.bitbucket-server-web-fragments:keyboard-shortcuts-help-link">Keyboard shortcuts</a></li><li role="presentation"><a href=";utm_medium=in-app-help&amp;utm_source=stash" title="Learn about what&#39;s new in Bitbucket" data-web-item-key="com.atlassian.bitbucket.server.bitbucket-server-web-fragments:whats-new-link">What&#39;s new</a></li><li role="presentation"><a href=";utm_medium=in-app-help&amp;utm_source=stash" title="Explore the Atlassian community" data-web-item-key="com.atlassian.bitbucket.server.bitbucket-server-web-fragments:community-link">Community</a></li><li role="presentation"><a href="/about" title="About Bitbucket" data-web-item-key="com.atlassian.bitbucket.server.bitbucket-server-web-fragments:about">About</a></li></ul></div></div></li><li class=" alerts-menu"title="View system alerts"><a href="#alerts" id="alerts-trigger"class="alerts-menu" title="View system alerts" data-web-item-key="com.atlassian.bitbucket.server.bitbucket-server-web-fragments:global-alerts-menu-item">Alerts</a></li></ul></div></div> <!-- End .aui-header-inner --></nav> <!-- End .aui-header --></header><!-- End #header --><!-- Start #content --><section id="content" role="main" tabindex="-1" data-timezone="-120" ><div class="aui-page-panel content-body" ><div class="aui-page-panel-inner"><main role="main" id="main" class="aui-page-panel-content" ><h2>Log in</h2><form class="aui top-label prevent-double-submit " action="/j_atl_security_check" method="post" accept-charset="UTF-8"><div class="field-group"><label for="j_username" >Username</label><input class="text long-field" type="text" id="j_username"  name="j_username"  autofocus accesskey="u"/></div><div class="field-group"><label for="j_password" >Password</label><input class="text long-field" type="password" id="j_password"  name="j_password"  accesskey="p"/></div><div class="aui-group"><fieldset class="group checkbox"><div class="checkbox"><input class="checkbox" type="checkbox" id="_atl_remember_me"  name="_atl_remember_me"  checked="checked"  accesskey="r"/><label for="_atl_remember_me" >Keep me logged in</label></div></fieldset></div><div class="aui-group"><input name="next" type="hidden" value="/projects/DOCUMENTATION/repos/having-fun-with-yaml/raw/light-modules/module-a/dialogs/components/lazy-component.yaml?at=master"/><input name="queryString" type="hidden" value="next=%2Fprojects%2FDOCUMENTATION%2Frepos%2Fhaving-fun-with-yaml%2Fraw%2Flight-modules%2Fmodule-a%2Fdialogs%2Fcomponents%2Flazy-component.yaml%3Fat%3Dmaster"/><input class="aui-button aui-button-primary" type="submit" id="submit"  name="submit"  value="Log in" accesskey="s"/><a id="forgot" class="aui-button aui-button-link"  name="forgot" href="/passwordreset" autocomplete="off" tabindex="0">Unable to access your account?</a></div></form></main></div></div></section><!-- End #content --><!-- Start #footer --><footer id="footer" role="contentinfo"><section class="notifications"></section><section class="footer-body"><ul><li data-key="footer.license.message">Git repository management for enterprise teams powered by <a href="">Atlassian Bitbucket</a></li></ul><ul><li>Atlassian Bitbucket <span title="5e527f230b23d8b06680fcead51b9e55061f12eb" id="product-version" data-commitid="5e527f230b23d8b06680fcead51b9e55061f12eb" data-system-build-number="5e527f2"> v8.9.0</span></li><li data-key="footer.links.documentation"><a href=";utm_medium=in-app-help&amp;utm_source=stash" target="_blank">Documentation</a></li><li data-key="footer.links.jac"><a href=";utm_medium=in-app-help&amp;utm_source=stash" target="_blank">Request a feature</a></li><li data-key="footer.links.about"><a href="/about">About</a></li><li data-key=""><a href=";utm_medium=in-app-help&amp;utm_source=stash" target="_blank">Contact Atlassian</a></li></ul><div id="footer-logo"><a href="" target="_blank">Atlassian</a></div></section></footer><!-- End #footer --></div><script>require('bitbucket/internal/layout/base/base').onReady(null, "Magnolia Bitbucket" ); require('bitbucket/internal/widget/keyboard-shortcuts/keyboard-shortcuts').onReady();</script><script type="text/javascript">require('bitbucket/internal/page/login/login').onReady();</script></body></html>

  • Line 6: Modify the label of the included tab.
  • Lines 9 and 10: Modify the label of the blackOrWhite field from the include.
  • Lines 14 to 16: Add another action to the imported actions.

With Magnolia 5.5.6 the syntax has changed slightly. The old syntax still works. When using the new version, you can modify and override the included part of the definition, see syntax versions.

See: YAML include


Known issue: MAGNOLIA-7126 - Getting issue details... STATUS

Inspecting an object's structure and content 

To get a better understanding of any object, you can use the new  cmsfn.dump  function in a template script to output an object's structure and content. By default the function looks down to the 3rd level of an object and produces the output in plain text, optionally in a simple HTML format.


${cmsfn.dump(content, 3, true)}

Improved virtual URI mappings

As a frontend developer, you can configure virtual URI mappings in a YAML definition file inside a light module folder.


class: info.magnolia.virtualuri.mapping.DefaultVirtualUriMapping
fromUri: /ee
toUri: forward:/enterprise-edition
The API has been improved. Some mapping classes are deprecated now. As replacement you can use 5 new mapping classes. The API is now in its own module info.magnolia.core:magnolia-virtual-uri in the main reactor.


As we made the new mappings safer to use, host-based URI mappings currently require their toUri property to be also configured (outside of the domain mappings); otherwise, they are ignored. Such fallback may not always be desired. We will amend this to make the fallback target URI optional again. See MAGNOLIA-7158 - Getting issue details... STATUS

Use placeholders to describe expected field values

Use the placeholder property to give the user a hint about what they should enter into text and link fields. For example, you can show the expected format for a phone number or give a hint about the importance of entering metadata for SEO purposes. A placeholder text can prevent input errors before they happen.

The placeholder property is available in text field and link field definitions. The property allows you to define a text (i18n compliant) to be displayed in a field before a user enters something. The earlier purpose-built PlaceholderTextFieldDefinition class is now deprecated.

    - name: tabMain
        - name: imgCaption
          class: info.magnolia.ui.form.field.definition.TextFieldDefinition

        - name: imgLink
          class: info.magnolia.ui.form.field.definition.LinkFieldDefinition
          targetWorkspace: dam
          appName: assets

    class: info.magnolia.ui.admincentral.dialog.action.SaveDialogActionDefinition
    class: info.magnolia.ui.admincentral.dialog.action.CancelDialogActionDefinition
# Image Properties
module-foo.components.imgProperties.tabMain.imgCaption.placeholder=Enter the caption text for the image here ...
module-foo.components.imgProperties.tabMain.imgLink.placeholder=Provide a valid link to the image here ...


Relocation and expansion of LDAP module's configuration

Released almost simultaneously with Magnolia 5.5.6, version 1.9 of the LDAP Connector module is now configured under the appropriate node in /server/security/userManagers. The configuration also allows a more convenient customization of its properties.


Security and library updates


5.5.6 changelog with all the changes.

Updating to 5.5.x from any pre-5.5 version

  • (warning) Please be aware that depending on the number of versions in the version workspace, the update to 5.5.x from any version below 5.5 may take from 1 to 2 hours since all of the versions have to migrated to a new structure.
  • Since the default JCR persistency layer in our bundles has changed to H2 Database Engine with the 5.5 release, please make sure that you keep the magnolia.repositories.jackrabbit.config property in the file set to the database you used before updating. For example, for Derby set the property as follows:

Generally, follow the standard update procedure.

Changes for 5.4.x users

The following changes apply only to the users running Magnolia 5.4 (major release) and maintenance releases 5.4.1 to 5.4.3. file

CE and EE users

Add the following lines in your file. They configure a directory for loading file system resources and the file types Magnolia should observe in the classpath and reload on-change:


If you had EE Pro 5.4.x or previous and are installing EE Pro 5.5.6

Due to component personalization bringing in new features to the page editor, you must replace the widgetset in the file. Either replace or add (depending on the update path):


Derby vs. H2

If you used a previous version of Magnolia with an Apache Derby database, make sure you keep your magnolia.repositories.jackrabbit.config setting in your file.

Magnolia bundles now ship with the following default setting:

This setting may not be compatible with your setup.

Important changes for Magnolia 5.2 and 5.3 users

If you had STK installed

If you continue to work with STK, use the new magnolia-enterprise-pro-stk-bundle as a basis for your project. It includes Enterprise Pro, STK and the old demo project. You get all STK functionality out of the box. Exclude the demo-project if it's in your way.

Jackrabbit configuration

In order to enable getting an HTML excerpt in a query result, you should update the configuration files of your Jackrabbit instances. Add the two <param/> directives within your <SearchIndex> block.

  <!-- more params here -->

  <!-- needed to highlight the searched term -->
  <param name="supportHighlighting" value="true"/>
  <!-- custom provider for getting an HTML excerpt in a query result with rep:excerpt() -->
  <param name="excerptProviderClass" value="info.magnolia.jackrabbit.lucene.SearchHTMLExcerpt"/>
log4j.xml addition

Add the log configuration for org.reflections

 <category name="org.apache.jackrabbit">
    <priority value="WARN" />
 <!-- Reflections library spoils logs with hundreds of harmless warnings; tries to look into native libs but none of its DefaultUrlTypes can handle them. -->
  <category name="org.reflections">
    <priority value="ERROR" />
  <category name="com">
    <priority value="WARN" />

How to update from Magnolia 5.2 and earlier

To update your project, follow the standard update procedure, then make the following changes:
  1. Update your content apps with the content app upgrade task. It automatically takes care of the following:
    • Using the content connector.

    • Updating configuration of availability rules and default rule classes

    • Updating selected action definitions with node-type based availability

  2. If you used the DAM: 
    • Replace DamManager with AssetProviderRegistry.
    • See DAM and the STK and DAM templating on how to use assets in your templates.
    • The DAM changes have no impact on the STK. There is no need to modify Freemarker scripts because the new DAM API is abstracted from STK.
  3. If you have a custom jBPM workflow:
    • In the info.magnolia.module.workflow.jbpm.JbpmWorkflowManager#completeWorkItem method, checking for present parameters is obsolete and refers to publication related workitems. The method is no longer used for completing a workitem in the new human task context. It is still valid in the context of completing service tasks, however.
    • Stop using the info.magnolia.module.workflow.jbpm.JbpmWorkflowManager#getWorkItem method. It was used to complete a work item for human tasks. Furthermore, the wrapper we initialize only holds the mgnlData map.

    • The previously hardcoded mgnlData parameter is now configurable in /modules/workflow/commands/workflow/activate/activate/parameterMapName.

  4. If you have custom widgets or Vaadin add-ons:
    • Magnolia's default widgetset was relocated to info.magnolia.widgetset.MagnoliaWidgetSet.
    • Update your webapps's file.
    • Otherwise Magnolia will automatically fall back to the new widgetset but will issue warnings during upgrade, and whenever a user logs in to Magnolia.

How to update from Magnolia 4.5 and earlier

Are you running on Magnolia 4.5 or earlier? It’s time to move to 5. Contact us for migration support and look at the migration process.

Posting a comment does not work

Due to the removal of deprecated code, the Commenting module does not work. We will release a new version of it soon:  MGNLFORUM-296 - Getting issue details... STATUS .

The Show action in the Configuration app doesn't open the correct location

When selecting properties in a definition that are actually extended from another node in the config workspace, opening the definition in the Configuration app will not work correctly, as the underlying node/property doesn't exist. For example,

points to config:/modules/site-app/apps/site/subApps/browser/actions/addFolder/icon
but all the actions are inherited from /modules/ui-admincentral/apps/configuration/subApps/browser via extends.

Allocate more JVM memory

Magnolia 5.5.6 ee-bundle may require you to allocate more memory the Java Virtual Machine (JVM). If you see a java.lang.OutOfMemoryError in the startup log or the system stops responding during installation, increase the Java heap size. The default maximum heap size is 512M. Try a higher amount such as 1024M. We are working on uncovering the root cause for the increased memory need.

See: Java out of memory

  • Activation 5.5.5
  • Cache 5.5.6
  • Community Edition 5.5.6
  • Content Editor 1.0.6
  • DAM 2.2.6
  • Definitions app 1.0.2
  • Demo Projects 1.1.5
  • Enterprise Edition 5.5.6
  • Forum 3.6.2
  • Javascript Models 1.0
  • LDAP support 1.9
  • LDAP support 1.9.1
  • Magnolia 5.5.6
  • Pages 5.5.6
  • Personalization 1.4.6
  • Resources 2.5.4
  • Templating Essentials 1.1.4
  • UI 5.5.6
  • Workflow 5.6.5
  • XA Activation (exchange-transactional) 2.4


The Magnolia team would also like to thank everyone who reported issues, contributed patches, or simply commented on issues for this release. Your continued interest helps us make Magnolia better. Special thanks go to: Marcel Boer, Marcus Büttner, Andrea Castelli, Chris Jennings, Jens Kolb and Ronald Ten Berge.

#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))
  • No labels