Attention: If you skipped one or more releases, 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": "release-2020-07",

Livingdocs Server Patches

  • v103.3.31: fix: add new npm read token
  • v103.3.30: fix(elasticsearch): log cpu-wait as warning
  • v103.3.29: chore: remove example config
  • v103.3.28: fix(imatrics): fix an inconsitency in slugging
  • v103.3.27: fix(imatrics): fix tag slugging
  • v103.3.26: fix(build): revert v103.3.23
  • v103.3.25: fix(print): Catch publication not found case
  • v103.3.24: fix(print): Add /editions endpoint
  • v103.3.23: chore: Upgrade bullmq dependency, so we’re using the same ioredis version
  • v103.3.22: fix: external services work correctly despite required metadata
  • v103.3.21: fix(imatrics): store slug on user added concepts
  • v103.3.20: fix(imatrics): Register feature API

This allows e.g. migrations to access the iMatrics API.

  • v103.3.19: chore: correctly apply defaults and adapt tests
  • v103.3.18: fix(media-library): Fix a migration where we’ve accidentally dropped the title of media library entries

In this migration, we’re setting the title on the media library entry again if it isn’t present.

  • v103.3.17: fix: Adapt Docker compose to new Postgres version
  • v103.3.16: fix(print-api): Improve logging

Make Print-API debug logs JSON format and more informative (adds host, `action..).

  • v103.3.15: fix(dependencies): add dependency to transliteration for imatrics slug
  • v103.3.14: chore(public-api): fix test helpers
  • v103.3.13: fix: empty commit to create release
  • v103.3.12: fix: correctly handle promise
  • v103.3.11: fix(tasks): fix create project task for the embedded design case
  • v103.3.10: code(mediaLibrary): normalise naming
  • v103.3.9: fix(includes): allow vue-component type for doc-includes
  • v103.3.8: correct copy behavior for articles with langauges and translations

Livingdocs Editor

How to require the editor in your package.json:

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

Livingdocs Editor Patches

  • v57.5.64: fix(embeds): Avoid transforming free-html content
  • v57.5.63: fix(embeds): do not add padding bottom unless it’s a responsive container
  • v57.5.62: fix(iframes): pasting iframes with the addResponsiveContainer: false config works reliably again
  • v57.5.61: fix(trackjs): add empty string instead of undefined

the token is not written when the userId is set to undefined

  • v57.5.60: chore: do not allowUnrecognizedEmbeds by default in our setup unless env = local

  • v57.5.59: chore: adapt tests

  • v57.5.58: chore: add unit tests for the sorting config

  • v57.5.57: fix: use publish type configs

  • v57.5.56: fix(dashboards): show contentType label instead of handle

  • v57.5.55: chore: fix image url drop handler test

  • v57.5.54: fix(media-library-dnd): correctly handle drops from media library in all browsers

  • v57.5.53: fix(comyan): fix media library entry upload format for comyan

  • v57.5.52: fix(print-proxy): Add editions endpoint

  • v57.5.51: fix: do not trigger imatrics updates if imatrics is not initialized

  • v57.5.50: fix(lists): always show scheduled date in case it’s configured

  • v57.5.49: fix(lists): show correct date for future publication

  • v57.5.48: fix(image-upload): prevent exception when the canvas is not set

  • v57.5.47: fix(dropzone-message): make it ephemeral to hide close button

  • v57.5.46: fix(browser-spellcheck): pastedHtmlRules are now used in editableConfig only

  • v57.5.45: fix: correctly display error messages in the image upload service

  • v57.5.44: fix(image-proxy): create URL for original url

  • v57.5.43: fix(metadata): correctly set image uploading state after image uploaded

  • v57.5.42: fix(context menu): Opener wrapper removed

  • Removed opener wrapper from context menu component

  • v57.5.41: fix(buttons): fix image upload button icon

  • v57.5.40: fix: show loading button while image is uploading in metadata image form

  • v57.5.39: fix(imatrics): store any concept properties returned from the server

  • v57.5.38: fix: update framework to version 15.1.2

  • v57.5.37: fix: redirect to home with projectHandle

  • v57.5.36: fix: drop indicator for hugo and asset drop

  • v57.5.35: fix(conflict-ui): add width to checkbox-icon in conflict-ui

  • v57.5.34: fix(public-api): fix image import docs

  • v57.5.33: fix(comments): update metadata comment count only locally

  • v57.5.32: fix(liImageProxy): fix url getter

  • v57.5.31: fix: add the square icon to the icons

  • v57.5.30: fix(google-vision): fix language select

  • v57.5.29: chore: add small in code comment

  • v57.5.28: fix: persist search when navigating from an document back to a dashboard

  • v57.5.27: fix: improve css

  • v57.5.26: chore: retrigger commit lint

  • v57.5.25: fix(Monaco-editor): dispose model before instance

  • v57.5.24: chore: add test for rendering the list assignment

  • v57.5.23: fix: use uiConfig for the displayfilters instead of config

  • v57.5.22: fix(schema-form): do not debounce onChange call but debounce at receiving end if needed

  • v57.5.21: fix: improve ldNotify warning wording

  • v57.5.20: fix(doc-includes): allow for vue components to define include params

  • v57.5.19: menu’s can be sorted correctly again


Overhauled Media Library πŸŽ‰

The Media Library got a lot of updates. Some of the highlights are:

  • The media library dashboard can be configured the same way as document dashboards (filter/search)
  • Image asset custom metadata use the same configuration as document contentTypes
  • Visually support copyright restrictions
  • Extraction of metadata on image drop
  • Alt text

A full changelog and screenshots can be found here.

Project Based Main Navigation + Dashboards

Until now only one editor main navigation and dashboard config was possible (because the config was living on the editor). Since the configs have been moved to the project config on the server, it’s now possible to configure the main navigation and dashboards per project.


Show all Errors at once on Publish Screen πŸŽ‰

There are 2 improvements on the editor publish screen:

  • When publishing, show all errors at once (not only one error) - Editor PR
  • Show an error message when a field has an error (development) - Editor PR

Custom Text Editing Config πŸŽ‰

It’s possible to define your own custom text editing elements (see documentation reference for more info). Another improvement is that we moved the config of the default and custom elements to the server. One can now define text editing elements for every project (project config) and even for every content-type individually.



Display Filter πŸŽ‰

Display filters are the heart for dashboards. Therefore we introduce some improvements:

  • We have a new time based filter called liDateTimeRange - more info
  • When adding a filter to a dashboard, it’s now possible to pass (and interprete) a config - more info
  • When a filter option defines isDefault, the filter will be applied on the first request - more info

Restore Project Config πŸŽ‰

When having a dynamic project config one can now show a diff of and older version of the project config in the history screen of the project setup. Additionally it’s possible to restore an old project config.



Define Dashboard Entry Point πŸŽ‰

One can now define a custom entry point on login or when switching projects. For more info see here.

Custom User Menu πŸŽ‰

Now it’s possible to define custom entries within the Livingdocs user menu.



Revamped Editor Notifications πŸŽ‰

We improved the design and placement of editor notifications. Warnings and errors still stay on top middle of the editor, success and info messages go to the bottom left. Also the API of ldNotify changed a little bit. Check the pull request to see some screenshots and the changed API.

Import Log Viewer πŸŽ‰

When importing documents or images, one can now see the “import jobs” via project setup. For more info look into the PR description

Manage Component Groups for Embedded Designs πŸŽ‰

Projects with an embedded design support now the management of component groups (grouping of components in editor sidebar). Via project setup one has the ability to move components across groups, move groups, edit label of groups, add new groups and delete (empty) groups. For more info look into the PR description

Custom Document Preview πŸŽ‰

It’s now possible to integrate a custom document preview via the server side previewApi. Example of custom previews are

  • custom mobile preview
  • a preview of a finished article living on the frontend
  • anything that fits the specific customer need.


Breaking Changes πŸ”₯

Migrate the database πŸ”₯

It’s a simple migration with no expected data losses. The expected time for the image migration is 10'000 images / second.

# run grunt migrate to update to the newest database schema
# migration - 136-add-tag-suggestions.js
#   create tag_suggestions table
# migration - 137-migrate-assets.js
#   create media_library_entries table + migrate old data to new table
# migration - 138-text-index-on-project-and-users.js
#   add indexes on import_jobs, cache, config_properties table
#   migrate media_type to media_type_id
livingdocs-server migrate up

Elasticsearch Client Upgrade

  • πŸ”₯ liServer.api('li-search').esClient is now an instance of @elastic/elasticsearch').Client, so please migrate to that api.
  • πŸ”₯ removed liServer.api('li-search').IndexManager. Use the elasticsearc client instead.
  • πŸ”₯ removed liServer.api('li-search').indexManager. Use the elasticsearc client instead.
  • πŸ”₯ removed liServer.api('li-search').typeManager. Use the elasticsearc client instead.
  • πŸ”₯ removed grunt search-index and the file task/util/search-index-configuration. Use livingdocs-server es-search-index instead.
  • πŸ”₯ liServer.api('li-search').searchManager({}, {onlyId: true}) doesn’t return an array of internal identifiers anymore. Instead the documentId is returned.
  • πŸ”₯ static server config search.elasticsearchClient configuration supports now the official @elastic/elasticsearch client configuration

References: Server PR

Use libvips as Default for Image Processing

  • πŸ”₯ set libvips as default for image processing (because it’s much faster and more secure).

If you want to fall back to imagemagick, you can add a config on the static server config images.processingStrategy: 'imagemagick'.

References: Server PR

Media Library

πŸ”₯ The MediaLibrary is now active by default Both on the editor and server side. The editor UI can be disabled but the server side feature is always active storing data in Postgres and indexing into Elasticsearch.

Disable the MediaLibrary UI:

// project config
editorSettings: {
  mediaLibrary: {
    showUi: false

Configure an Elasticsearch index name for the mediaLibraryIndex (otherwise a default name will be used):

// static server config
search: {
  // ...
  articleDocumentIndex: 'li-local-documents',
  articlePublicationIndex: 'li-local-publications',
  mediaLibraryIndex: 'li-local-media-library' // -> add this config


πŸ”₯ Server Media Library API

  • The server API li-asset-management got renamed to li-media-library. Please update your code in case you’re accessing it using server.features.api('li-asset-management') somewhere.

Vue Components

πŸ”₯ Vue components that injected navigateTo need to inject router and call router.navigateTo({name: routeName, params: { a: 1, b: 2}}) instead of navigateTo(routeName, { a: 1, b: 2}}). See livingdocs-editor #3584 for more info

Editor Entry Point

πŸ”₯ app.ui.welcome in the static editor config does not support Angular routes anymore. Change them to a path, e.g. from app.home to /home (read more here)

Editor ldNotify API Change

  • πŸ”₯ removed ldNotify.error in favor of ldNotify.alert
  • πŸ”₯ removed ldNotify.sections (the position will be derived from the log level)
  • πŸ”₯ removed ldNotify.appWarning, use ldNotify.banner instead
  • πŸ”₯ removed ldNotify.appAlert, use ldNotify.alert instead
  • πŸ”₯ removed ldNotify.appStatus, use{ephemeral: false}) instead. ’ephemeral: false’ set a sticky behavior.
  • πŸ”₯ removed ldNotify.notification.appearanceMode. To keep the sticky behavior of a notification use ’ephemeral: false'

See editor PR for more info

Drop Node 10 Support

  • πŸ”₯ removed support for Node 10. Move to Node 12 or Node 14 (read more here)

Renamed Icons

  • πŸ”₯ renamed icon from settings to cog
  • πŸ”₯ renamed icon from github-circle to github

Read here for a more detailled description.

Removed Global GoogleVision Config

πŸ”₯ You can’t globally configure google vision anymore and have to move the config to the integrations project config. A migration guide can be found here


  • app.sidePanelItems in the static editor config should contain route: {name: "routeName"} instead of sref: "routeName". sref is still valid but deprecated.
  • app.sidePanelItems in the static editor config is deprecated. Configura the main navigation via project config editorSettings.mainNavigation: [{'liItem': 'articles'}] - PR

Editor Entry Point (static editor config)

  • app.ui.welcome in the static editor config is deprecated. Configure your editor entry point via startPage in the project config - howto

Dashboard Config (static editor config)

  • dashboards in the static editor config is deprecated. Configure a dashboard via project config editorSettings.dashboards: [{}] - PR

documentAPI (server API)

  • server.features.api('li-documents).document.find() The methods parameters have changed and there is a new response structure. The old queries and properties will still work, but will log deprecation messages on every call.

    • The q attribute in the query parameter changed to search
    • In the return value the property documents got renamed to results
    // change
    const {total, documents} = await documentApi.find({project_id: 1, q: 'Some text'})
    // to this
    const {total, results} = await documentApi.find({project_id: 1, search: 'Some text'})
  • server.features.api('li-documents).document.getReferences() the response format changed

    // and change
    const {total, documents} = await documentApi.getReferences({projectId, reference: 'image:1234'})
    // to this
    const {total, results} = await documentApi.getReferences({projectId, reference: 'image:1234'})

Reference: Server PR #3004

Media Library (static server config)

  • assetManagement.enabled in the static server config is deprecated. It has no effect anymore and will be removed in the next release.

APIs 🎁

Internal Changes

Rename ld_icon

Renames ld_icon to li-icon. If you use any icons you have to use them like this now: <li-icon name="icon-name" theme=""></li-icon>. Where theme can hold the previous modifier classes: class="li-icon--warning" becomes theme="warning".

PR: livingdocs-editor #3492

Internal PR’s




Editing API

Other Changes