Attention: If you skipped one or more release, please also check the release-notes of the skipped ones.


This release consists of the following new versions of the livingdocs-server and the livingdocs-editor:


Livingdocs Server

How to require the server in your package.json:

"dependencies": {
  "@livingdocs/server": "v75.9.16",

Livingdocs Server Patches

  • v75.9.16: fix(print-api): Add documentId to export

fixed copySourceId

  • v75.9.15: chore(elasticsearch): Remove unnecessary rest argument in addDateFilter
  • v75.9.14: fix: pin dom-serializer to v0.1.0
  • v75.9.13: fix: pin highlight.js to 9.14.2
  • v75.9.12: fix(indexing): Fix query by epochTime in indexing api
  • v75.9.11: fix(document-copy): replace the too generic source parameter with sourceMetadata
  • v75.9.10: fix(node-version): new node version 8.15.0 has problems to escape two byte chracters
  • v75.9.9: test(push): add notificationParams config for ethinking
  • v75.9.8: test(menu): updateMenuItem with target (uri ref, external)
  • v75.9.7: fix: push patch info to release-notes
  • v75.9.6: Add ’not_content_type’ Filter
  • v75.9.5: Push notifications: add support for ethinking as a possible provider.
  • v75.9.3: indexer: Set the correct user and creation timestamp on an indexed document
  • v75.9.2: metadata: integrate custom teaser image for testing
  • v75.9.1: image-processing: Catch newer imagemagic error message when applying the image-processing on an invalid image
  • v75.9.0: version bump

Livingdocs Editor

How to require the editor in your package.json:

"dependencies": {
  "@livingdocs/editor": "v35.15.21",

Livingdocs Editor Patches

  • v35.15.21: fix(package): pin highlight.js to 9.14.2

The latest version 9.15.1 is breaking the npm install due to a missing build file. Therefore we are pinning it to 9.14.2 with which the build is working again properly.

  • v35.15.20: fix(document-lists): sort lists alphabetically
  • v35.15.19: fix(metadata-mapper): make sure document reference is set on updater
  • v35.15.18: fix(print): Improve print preview error handling

A failing getStatus during getPreview would lead to the print preview call not returning (“endless spinner”). With this fix we catch and handle these errors correctly (user is notified, spinner stops).

  • v35.15.17: fix(tests): skip e2e print spec with external dependency
  • v35.15.16: fix(comments): add config options
  • v35.15.15: fix(menu): show menu item options in case an optional value was set
  • v35.15.14: fix(comments): sort resolved comments by updated date
  • v35.15.13: fix: remove extension to be able to start the server again on ci
  • v35.15.10: Improve the pick of a cached server image for travis
  • v35.15.9: fix regular->print copy
  • v35.15.8: enable character count for print mode
  • v35.15.7: use the correct server image for the cypress tests
  • v35.15.6: Add support for push platforms for push notifications
  • v35.15.4: Integrate custom teaser image for testing
  • v35.15.3: signup: Get rid of error messages caused by redirects
  • v35.15.2: fix broken menu tool
  • v35.15.1: fix Thumbnail of copied image


Comments 🎁

You can now add comment threads to text of a document. The comment threads can have replies to allow for discussions directly in the editor. You can edit or delete your own replies and comment threads can be resolved to indicate that they have been addressed. We hope you can use comments in a variety of ways to improve your workflows and would love feedback how you use them and how they can be improved.

Enable comments feature

To enable the comments feature add useComments to your editor environment config, e.g.

modules.exports: {
  app: {
    useComments: true

Copy Component 🎁

With an enabled ‘Copy Component’ feature it’s possible to copy component or sets of components in a document or across different documents.


  • Click on a component in the editor
  • Click on copy at the sidebar
  • Go to the clipboard
  • Drag and drop the copied component into the editor

When trying to drop a component, you get immediate feedback when drop zones are not allowed with a reason.

Enable copy component feature

To enable the copy component feature add componentCopyEnabled to your editor environment config, e.g.

modules.exports: {
  app: {
    copy: {
      componentCopyEnabled: true

Improved server admin screens 🎁

You have now a lot more information on the server admin screen like

  • create date of a user
  • identity of the user (SSO or mail)
  • user login graph

For a description of all additions check the related pull requests.

Breaking Changes 🔥

Migrate the database

# run grunt migrate to update to the newest database schema
# migration - 111-add-comments-table.js
#   create comments table + add events to the stream_events_types table
grunt migrate

Teaser images

Update custom Elasticsearch document mapping

When using a custom Elasticsearch document mapping (the mapping can be found at search: metadata_mapping usually in the all environment config), and you used teaser images at the publish screen, the Elasticsearch mapping of the corresponding field needs to be updated with a ratio property.

"teaserImage": {
  "properties": {
    "crops": {
      "properties": {
        "ratio": {
          "type": "double",
          "index": "not_analyzed"

After adding ratio to the mapping, execute grunt search-index:document during deployment to update the mapping.

Update custom metadata plugins

When using a custom image metadata plugin, instead of the default li-image plugin, it’s needed to set behaveAsLiImage: true to your metadata config for backwards compatibility, e.g.

    teaserImage: {
      plugin: 'my-custom-image-plugin',
      config: {
        behaveAsLiImage: true

Replaced Webpack Dev-server with a custom node server 🎁 🔥

This change migrated from a traditional webpack setup to a custom node server with built in webpack support. The consequence is to have a much faster build cycle. The build scripts are now provided as an executable (bin) to the downstream. You can run ./node_modules/.bin/livingdocs-editor watch or ./node_modules/.bin/liivngdocs-editor build in the downstreams to run the dev server or build the final Docker container.

Migration guide

How to require the editor config.

// old approach was requiring the config via the index file
const config = require('../../../../config')

// new approach is to require the config via appConfig
const config = require('appConfig')

How to build a Docker container

# previous setup, all dev dependencies were deployed to production
docker build -t livingdocs-editor:production .
docker run livingdocs-editor:production npm test

# new setup, only the minimal dependencies are deployed to production
docker build -t livingdocs-editor:test .
docker run livingdocs-editor:test npm test
docker run -v $PWD/bundle:/app/bundle livingdocs-editor:test npm run build
docker build -t livingdocs-editor:production ./bundle

Changes in package.json

  • 🔥 Renamed DIST_PATH to DIST_DIR
  • 🔥 Removed ROOT_PATH without replacement
  • 🔥 Replaced npm explore @livingdocs/editor -- npm run build with a build and watch script.
// old approach at the scripts sections of package.json
"build": "DIST_PATH=$PWD/dist CUSTOM_PATH=$PWD/app/editor.js CONFIG_PATH=$PWD/config EDITOR_STYLE_PATH=$PWD/app/styles/editor-styles.scss ROOT_PATH=$PWD npm explore @livingdocs/editor -- npm run build",
"start": "DIST_PATH=$PWD/dist CUSTOM_PATH=$PWD/app/editor.js CONFIG_PATH=$PWD/config EDITOR_STYLE_PATH=$PWD/app/styles/editor-styles.scss ROOT_PATH=$PWD npm explore @livingdocs/editor -- npm run start",
"build:environment": "DIST_PATH=$PWD/dist CUSTOM_PATH=$PWD/app/editor.js CONFIG_PATH=$PWD/config EDITOR_STYLE_PATH=$PWD/app/styles/editor-styles.scss ROOT_PATH=$PWD npm explore @livingdocs/editor -- npm run build:environment",

// new approach at the scripts sections of package.json
"build": "CUSTOM_PATH=./app/editor.js EDITOR_STYLE_PATH=./app/styles/editor-styles.scss livingdocs-editor build",
"start": "CUSTOM_PATH=./app/editor.js EDITOR_STYLE_PATH=./app/styles/editor-styles.scss livingdocs-editor watch",

For test instructions, build instructions and supported environment variables and more check the detailed description at the livingdocs-editor #2264.

Other Changes