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



  • Recording: TODO
  • Documentation: TODO


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-10",

Livingdocs Server Patches

  • v104.1.22: fix(airship): enable push notifications for web channel as well
  • v104.1.21: fix(print): Handle image components

Data from image components (such as the origin) can now be extracted and exposed in the export XML.

An image component:

  "identifier": "nzz-standard.image",
  "id": "doc-1eph26b470",
  "content": {
    "image": {
      "originalUrl": "",
      "url": "",
      "width": 2667,
      "height": 4000,
      "mimeType": "image/jpeg",
      "imageService": "",
      "origins": [
          "name": "hugo",
          "identifier": "picture-18029184"
    "caption": "Logs in pallets at a warehouse used by, in Shepton Mallet, U.K., on Wednesday, Dec. 9, 2020. Jonathan Baylis, founder of, had a hunch that firewood was a Covid-proof business. Photographer: Luke MacGregor/Bloomberg",
    "author": "Luke Macgregor / Bloomberg"

will be exported as:

            <content type="title">Kopie von foobar</content>
            <content type="author">Mister Developer</content>
            <content type="image-data”>
                <content type="originalUrl"></content>
                <content type="url"></content>
                <content type="width">2667</content>
                <content type="height">4000</content>
                <content type="mimeType">image/jpeg</content>
                <content type="imageService"></content>
                <content type="origins">hugo:picture-18029184</content>
            <content type=“image-caption">Logs in pallets at a warehouse used by, in Shepton Mallet, U.K., on Wednesday, Dec. 9, 2020. Jonathan Baylis, founder of, had a hunch that firewood was a Covid-proof business. Photographer: Luke MacGregor/Bloomberg</content>
            <content type=“image-author">Luke Macgregor / Bloomberg</content>
            <content type="text">text</content>
  • v104.1.20: fix: add new npm read token
  • v104.1.19: fix: do not require routing for push notifications
  • v104.1.18: test: fix failing imageUploadProxy test
  • v104.1.17: fix(print): Unescape &amp; in links before export

Makes sure links like;t=53s are converted to before sending to XML transformation.

  • v104.1.16: fix: validate users in the userSetupFlow
  • v104.1.15: fix(user-invite): Escape user input html
  • v104.1.14: fix(image-media-types): correctly extract the ‘iptc: Credit’ field from images if there is no xmp metadata on the image
  • v104.1.13: refactor: async/await with callbackify
  • v104.1.12: test(public-api): adapt fixtures
  • v104.1.11: fix(routing): use slug in :slug pattern
  • v104.1.10: fix(import): improve error logging
  • v104.1.9: fix(elasticsearch): log cpu-wait as warning
  • v104.1.8: fix(hugo): allow target without design
  • v104.1.7: fix: do not throw on unhandled rejections in the import api
  • v104.1.6: fix: fix tests and logs of import api
  • v104.1.5: chore(migrations): add tests for embedded switch
  • v104.1.4: imatrics: fix an inconsitency in slugging

Livingdocs Editor

How to require the editor in your package.json:

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

Livingdocs Editor Patches

  • v57.18.41: fix: add new npm read token
  • v57.18.40: fix(push-notifications): Make routing optional

Remove dependency on routing metadata.

  • v57.18.39: fix: debounce-input directive so that it debounces the calls
  • v57.18.38: fix: tag search in metadata with imatrics calls
  • v57.18.37: fix: custom dashboards show the correct labels
  • v57.18.36: fix(includes): correctly handle defaultParams on includes with paramsSchema
  • v57.18.35: fix: initialize document references with empty []
  • v57.18.34: fix(Tasks): show merge error and update panel afterwards
  • v57.18.33: fix(groups): Fix the member list and add to group search and actions to properly filter users
  • v57.18.32: fix: correctly indicate total users
  • v57.18.31: fix(embeds): Avoid transforming free-html content
  • v57.18.30: fix(admin): Cap the users list to 500 entries until we have the pagination

Users are still searchable because we load all users into the search object

  • v57.18.29: chore(twitch): make chat optional
  • v57.18.28: fix(counter): only exclude from total count
  • v57.18.27: fix: use given color and add different padding
  • v57.18.26: fix: conflict highlight label height to set on overlay object
  • v57.18.25: fix: defaultSearchEntityLabel remove the s
  • v57.18.24: fix(time-range-filter): use correct key for ‘Past week’
  • v57.18.23: fix(embeds): do not add padding bottom unless it’s a responsive container
  • v57.18.22: fix(public-api): add documentation for document lists
  • v57.18.21: fix(iframes): pasting iframes with the addResponsiveContainer: false config works reliably again
  • v57.18.20: fix(trackjs): add empty string instead of undefined

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

  • v57.18.19: fix: use foreach to get task object
  • v57.18.18: fix(date-range): allow strings for dateRange query
  • v57.18.17: fix: improve import error log
  • v57.18.16: chore: do not allowUnrecognizedEmbeds by default in our setup unless env = local
  • v57.18.15: chore: adapt tests
  • v57.18.14: chore(migrations): add cypress tests
  • v57.18.13: fix styling of conflict handling buttons


New APIs 🎉

We added numerous APIs for the ‘public API’, ’livingdocs-server CLI’ and we have good progress with the Angular to Vue transition. Find more in the APIs section of the release notes.

WoodWing Assets Integration 🎉

Adds a basic WoodWing integration into Livingdocs:

  • Support drag+drop from WoodWing assets to Livingdocs
  • Whenever an image is uploaded to Livingdocs, it’s also uploaded to WoodWing assets with some basic metadata.


Related: We also implemented an open-source boilerplate for a Livingdocs to WoodWing Studio transformer as an AWS serverless app.

Referenced Documents 🎉

We harmonized the visual appearance for document references in the editor e.g.

  • media library document references
  • ‘copy of’ / ’embedded in’ on the publish screen
  • …more will follow in the next releases


Parallel Image Upload 🎉

We improved the image uploading process for cases when the user needs to provide image metadata before an image can be uploaded.

The improvements are:

  • Upload multiple images in parallel
  • Edit metadata for multiple images at once
  • Cancel single uploads


Look at this PR for some impressions.

Image Service 2.0 🎉

Livingdocs supports mechanisms to crop images and serve images in an optimised way to browsers and devices. This is done by uploading an original image and then cropping or resizing it on the fly through a SaaS image service. We improved this process, e.g.

  • integrate your own image service by registering a url building function
  • improved the possibilities to configure the image rendering process

For more details read the image service evaluation guide or the documentation diff.


Breaking Changes 🔥

Migrate the database

It’s a simple/fast migration with no expected data losses.

# run grunt migrate to update to the newest database schema
# migration - 139-fix-title-on-media-library-entries.js
#   set title on media_library_entries table
# migration - 140-migration-log.js
#   create table document_migration_log
# migration - 141-drop-document_migrations_field.js
#   drop NOT NULL condition on document_migrations.legacy_design_version
livingdocs-server migrate up Image Service

When using as image service, one needs to set its render strategy in the server configuration:

'': {
  quality: 75,
  host: '',

  // new options
  imgTagRenderStrategy: 'resrcit',
  anyTagRenderStrategy: 'resrcit'

References: Framework PR


Deprecate asset management server config

Pull Request: livingdocs-server #3086

  • ⏳ Deprecated static server config assetManagement. Rename assetManagement to mediaLibrary
  • ⏳ Remove property assetManagement.enabled (currently it only throws a deprecation message)
  • ⏳ Remove property assetManagement.googleVision (currently it only throws a deprecation message)

Deprecate MediaLibrary paginationSize

Pull Request: livingdocs-server #3092

  • ⏳ deprecate static server config mediaLibrary.paginationSize. The config will be removed in the next releases but has already no effect anymore. We use an internal default of 35.

Data Migrations

Pull Request: livingdocs-server #3151 🎁

  • grunt data-migration-create-and-prepare should not be used anymore. The task has been replaced with livingdocs-server data-migration-run
  • grunt data-migration-accept should not be used anymore. The task has been replaced with livingdocs-server data-migration-run

APIs 🎁

Register Custom Vue Display Filter 🎁

One can register a Vue component as a custom display filter (e.g. on a dashboard).


Customise Editor UI with Vue for Doc Includes 🎁

Implement a custom Editor UI for doc-includes with Vue.


Public API - Media Library Endpoints 🎁

The public API contains new endpoints for the media library.


  • GET /api/v1/mediaLibrary/:id
  • GET /api/v1/mediaLibrary?ids=1,2,3 or GET /api/v1/mediaLibrary?externalId=foo&systemName=comyan


Public API - Expose Public API via the server API 🎁

Get access to the public API via server API

  • const publicApi = liServer.features.api('li-public-api')


Public API - Support client defined documentId in the import API 🎁

During a migration of an existing system, it’s best practice to migrate all entries of the old system into livingdocs. To ease the migration, we want to support user-defined identifiers, so a custom import script can reuse existing identifiers.


Livingdocs-server CLI - Simplify data migrations 🎁

Added a new CLI task livingdocs-server data-migration-run. data-migration-run combines grunt data-migration-create-and-prepare and grunt data-migration-accept into one step. Improvements:

  • migrate multiple design versions in one step to a target design version (e.g. 1.0.0 + 1.0.1 to 2.0.0)
  • add --filter-by-content-type filter to migrations
  • Get a manual and examples when executing livingdocs-server data-migration-run on the terminal
  • Show a specific migration report for either a version bump or a data migration


Livingdocs-server CLI - Improve reindex tasks 🎁

New options are supported

  • livingdocs-server es-search-reindex supports a project filter, e.g. --project=magazine
  • livingdocs-server es-publication-reindex supports a project filter, e.g. --project=magazine
  • livingdocs-server es-publication-reindex supports a contentType filter, e.g. --content-type=regular


Internal Changes

Changes that should not affect customers. But some customers use internal functions and can be affected by this changes.

CSS Changes

// renamed CSS classes
ld-filter-toolbar -> li-filter-toolbar renamed to li-filter-group__item--disabled renamed to li-filter-group__item--active

// removed CSS classes

PR: livingdocs-editor #3801

Other Changes




Icon Legend

  • Breaking changes: 🔥
  • Feature: 🎁
  • Bugfix: 🪲
  • Chore: 🔧