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

πŸ“¬Release Newsletter

View the newsletter for this release or subscribe for future releases


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": "release-2020-04",

Livingdocs Server Patches

  • v94.1.15: chore: remove downstream tests from ci
  • v94.1.14: fix: rename source to eventSource in listhook param
  • v94.1.13: fix: add getRoutePart for core li-language plugin
  • v94.1.12: fix: trigger ci
  • v94.1.11: fix(references): add onlyPublished to e2e
  • v94.1.10: fix: update framework to release-2020-04 reference
  • v94.1.9: fix(data-sources): pass projectId, userId to the fetch function
  • v94.1.8: chore: Fix named functions
  • v94.1.7: fix: add publicationId and publicationDate to public_api output
  • v94.1.6: fix(document): add references on create and save
  • v94.1.5: fix(framework): update to 13.4.0
  • v94.1.4: import: add service url to image import
  • v94.1.3: core server includes: update to 0.1.2
  • v94.1.2: doc-queries: rename dateFilter to rangeFilter
  • v94.1.1: include source in fulltext search for media library assets

Livingdocs Editor

How to require the editor in your package.json:

"dependencies": {
  "@livingdocs/editor": "release-2020-04",

Livingdocs Editor Patches

  • v49.5.32: fix: remove nzz step from drone.yml

  • v49.5.38: fix(resolve-conflicts): check only on content, document.version and userId

  • v49.5.31: fix(resolve-conflicts): check only on content, document.version and userId

  • v49.5.30: test(conflict): add tests

  • v49.5.29: fix: hide custom document preview for print

  • v49.5.28: chore: skip failing ci test

  • v49.5.27: fix(framework): update framework to fix chrome 83 bug

  • v49.5.26: fix: bp settings icon

  • v49.5.25: fix(print): Fix magnify icons in print layout selector

  • v49.5.24: fix(login): support query state params

  • v49.5.23: chore: incorporate feedback

  • v49.5.22: fix: support edge 18

  • v49.5.21: fix(framework): upgrade framework to 13.4.2

  • v49.5.20: fix: add missing icons

  • v49.5.19: fix(side-panel): custom document previews

  • v49.5.18: fix(copy): allow copy even if documentCreationDisabled is set

  • v49.5.17: chore(testrail): add ids

  • v49.5.16: fix(lists): prevent deletion on return press

  • v49.5.15: fix: update framework to release-2020-04 reference

  • v49.5.14: chore(framework): update to 13.4.1

  • v49.5.13: fix(references): trigger digest refresh after loading references

  • v49.5.12: fix(references): behaviour when record is deleted

  • v49.5.11: fix: correct image uploads and small delay upon submittion of image metadata

  • v49.5.10: fix: correctly replace images on DnD

  • v49.5.9: fix: cleanup PR and integrate feedback

  • v49.5.8: fix(document): moved reference update to server

  • v49.5.7: chore: rename variable

  • v49.5.6: fix(publish): show metadata validation error

  • v49.5.5: fix(history): change default history mode colors to variants with higher contrast

  • v49.5.4: design(history): More button

  • Centered the more button in history sidepanel

  • v49.5.3: correctly resend email on expired token

  • v49.5.2: media: extract image source from media library images

  • v49.5.1: core-plugins: language and category selection


UI updates πŸŽ‰

We improved a whole bunch of small UI stuff. Check all the nice screenshots in the references.


Comyan Integration πŸŽ‰

Comyan is beside Hugo the second Asset Management System we have integrated into Livingdocs.

To use the feature, activate Comyan in the environment config on the server (see example). As a next step you can configure the Comyan integration in the project setup of the editor under the menu item “Intergrations - Comyan”.

integrations: {
  comyan: {
    allowed: true


Media Library Improvements πŸŽ‰

The Media Library experienced 2 important improvements.

  • Gets a list of documents in the Media Library where the current image is embedded into
  • It’s possible to force the user to enter image metadata before uploading an image


Abuse Detection πŸŽ‰

Enabled abuse detection sends users a notification when a new device logged in.


Character Limit for Directives πŸŽ‰

Support a character limit on directives of a component. The character limit is configured in the design on a directive with the maxLength property.


Transform multiple Components in one Step πŸŽ‰

When selecting multiple components in the editor and they have the same type, one can transform them into another type within one step.


Breaking Changes πŸ”₯

Migrate the database

The migration is simple, the duration is short and there are no datalosses expected on up-/downgrade.

# run grunt migrate to update to the newest database schema
# migration - 131-add-fields-to-assets.js
#   add 2 fields to assets table
# migration - 132-add-asset-import-errors.js
#   add 2 tables for asset import
# migration - 133-remove-ref-from-assets.js
#   remove assets.ref field
# migration - 134-change-asset-import-jobs.js
#   rename table introduced in 132-add-asset-import-errors.js

livingdocs-server migrate up

Color Normalization

Some variable names have changed and some existing variables have been matched with slightly new colors. This may result in problems with some downstreams.

Migration advice for downstreams πŸ”₯

The following color variables need to be migrated:
- $ld-c-green-three => $ld-c-green-two
- $ld-c-green-four => $ld-c-green-three
- $ld-c-green-five => $ld-c-green-four
- $ld-c-violet-three => $ld-c-violet-two
- $ld-c-yellow-two => $ld-c-yellow-three
- $ld-c-yellow-one => $ld-c-yellow-two
- $ld-c-yellow-zero => $ld-c-yellow-one
- $ld-white => $ld-c-white
- All colors ending on …-background => …-bg
- All colors ending on …-border => …-bd

For existing semantic color assignments in downstream, please note, that there are new variables available:
- $ld-c-success-one
- $ld-c-success-two
- $ld-c-alert-one
- $ld-c-alert-two
- $ld-c-error-one
- $ld-c-error-two

Removed colors:
- $ld-blue-notify

Image Upload Refactoring

We tried to make the image upload more consistent. For that we had to introduce breaking changes.

Needed Actions in the Editor πŸ”₯

  • πŸ”₯ Replace imageProxy/uploadProxy with assetProxy
  • πŸ”₯ Renamed component ldNativeImageUpload to liImageUploadButton
  • πŸ”₯ Changed liImageUploadButton implementation (see example)


    // html:
    <button ld-native-image-upload
      class="ld-btn ld-btn--default"
      progress-action="$ctrl.onUploadProgress">Upload Image</button>

    // controller:
    onUploadSuccess (upload) {
      this.isUploading = false
      this.image = {height: upload.height, width: upload.width, url: upload.url, mime: upload.mime}

    onUploadError (error) {
      this.isUploading = false

    onUploadProgress ({progress}) {
      this.uploadProgress = progress
      this.uploadError = null


  // html:
      class="ld-btn ld-btn--default"
      on-upload="$ctrl.onUpload">Upload image</li-image-upload-button>

  // controller:
  get uploadProgress () { return this.upload && this.upload.progress }
  get isUploading () { return !!this.upload }

  async onUpload (upload) {
    this.upload = upload

    await upload.promise.finally(() => {
        this.upload = undefined

    this.image = {height: upload.height, width: upload.width, url: upload.url, mime: upload.mime}

Changed Metadata Service Parameter

The function getSelectables in a custom metadata service (e.g. languageSelection) with the form li-meta-select-form has changed it’s parameter.

Needed Actions πŸ”₯

// search for downstream metadata plugins with form 'li-meta-select-form'
// check if they have defined a service property
  name: 'language',
  form: 'li-meta-select-form',
  config: {
    label: 'Language',
    service: 'languageSelection',
    placeholder: 'select language..'

// languageSelection.js
// before

// changed to
getSelectables(name, cb) // name = metadata property name

Improve Imatrics Integration

The Imatrics configuration is now integrated into the integrations, therefore we moved the configuration too.

Needed Actions πŸ”₯

  • πŸ”₯ server channeld-config: moved imatrics config from settings.imatrics to settings.integrations.imatrics
  • πŸ”₯ server environment-config: moved imatrics.enabled to integrations.imatrics.allowed

Support Custom CSS Styles

By default the editor now uses a strict set of CSS files which don’t support Sass variables anymore. In case you want to add custom CSS styles, you’ll need to declare one of the environment variables based on the desired order.

The styles in CUSTOM_STYLE_PATH_BEFORE get loaded before the Livingdocs Editor styles, and the styles in CUSTOM_STYLE_PATH_AFTER get loaded after the Livingdocs Editor styles.

As there are separate build processes for the upstream and downstream Sass files now, there is no need anymore to @include the upstream editor styles in your custom Sass file.

In case you don’t need custom styles, you can remove your app/styles folder and don’t set the environment variables.

// or

Breaking Change πŸ”₯

  • πŸ”₯ editor: removed support for environment variable EDITOR_STYLE_PATH

Asset Proxy Refactoring

This refactoring should only have an effect on the upstream. To be on the save side, check the downstream too.

Needed Actions πŸ”₯

  • πŸ”₯ search for assetProxy.postImage(file) and replace it with assetProxy.postImage({file, metadata})
  • πŸ”₯ search for assetProxy.addImage(file, image) and replace it with assetProxy.addImage({file, metadata})

Remove old import configs

If you have started with the boilerplate there may be some outdated configs that need to be removed or moved. In case the importer is not actively used it can be removed together with the configs as there is a public-API version available now. In case the custom-import (+configs) are used, the configs should be moved accordingly.

Needed Actions πŸ”₯

The import: {} configs for the livingdocs-server are now validated more strictly. Legacy configs should be either removed or moved to a customImport: {} config section.


APIs 🎁

Document and Image Import πŸŽ‰

Finally, Livingdocs offers a public API endpoint for Import (import of documents/images).


Data Sources πŸŽ‰

The basic idea behind a dataSource is that you can fetch/transform any dataSource (e.g. a public gist or another URL) and provide the results to any server feature or use it in the editor as a dataSource for metadata or filters.


Other Changes