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-2019-09",

Livingdocs Server Patches

  • v85.3.36: fix(migration): set default object in callback
  • v85.3.35: fix(index): allow to reindex by contentType or documentType
  • v85.3.34: code(indexing): reverse the order of the batches in the result instead in the query
  • v85.3.33: fix(ci): fix build
  • v85.3.32: code(migration): make document_filter_query more readable
  • v85.3.31: fix(drone): wait-on-services
  • v85.3.30: fix(hugo): disable feature if config is missing
  • v85.3.29: fix(hugo): Expose hugo config

This exposes the hugo feature config so it can be used in the editor.

For now we’ll only expose hugo.resource.images, which is used by the hugo image drag-and-drop.

  • v85.3.28: fix livingdocs-relelease-notes patch notes
  • v85.3.27: trigger a new release
  • v85.3.26: set timeout to 60s for testing
  • v85.3.25: migration: remove 125-add-group-member-list-table
  • v85.3.24: categories: never have //
  • v85.3.23: groups: backport scope migration
  • v85.3.22: channel-config: allow read for user
  • v85.3.21: correctly pass userId for copied articles
  • v85.3.20: task: add new task group-add-user
  • v85.3.19: metadata-plugins: getRoutePart can handle an empty category / categories: correctly inherit null metadata
  • v85.3.18: design-loader: add cacheMaxAge config option
  • v85.3.17: routing: use cache only during initial warmup
  • v85.3.16: bump framework includes componentConversion match all flag and links are correctly copied
  • v85.3.15: server-admin: reactivate archived users
  • v85.3.14: fix data-migration task
  • v85.3.13: fix(tasks): exit process after transform channel task
  • v85.3.12: fix: Properly provide the leveldown options to the levelup instance
  • v85.3.11: chore: Fix javascript syntax error in node 8
  • v85.3.10: fix: Fix a server crash initiated by a Postgres hostname comparison in the routes storage. Also fix the redis master lock setup.
  • v85.3.9: fix: rename auth:namespace to auth:issuer
  • v85.3.8: fix(request-logger): extend with user id through verified token
  • v85.3.7: fix: Upgrade to @livingdocs/framework@^12.6.3

To fix some image service helpers

  • v85.3.6: fix(add-pagination-config): add pagination config for document-lists
  • v85.3.5: fix(include): Support the options parameter in the new sync & async include render function
  • v85.3.4: fix(token): add issuer to token if available
  • v85.3.3: chore: Migrate to elasticsearch 6 as bluewin is using that by default already in the september release
  • v85.3.2: test for release management
  • v85.3.1: update framework

Livingdocs Editor

How to require the editor in your package.json:

"dependencies": {
  "@livingdocs/editor": "release-2019-09",

Livingdocs Editor Patches

  • v41.9.45: fix(hugo): Use / as huGO image source field delimiter
  • v41.9.44: fix(drone): remove recording for cypress
  • v41.9.43: fix(print-preview): Revert new print preview

This reverts commits: ec9b9097627dce26713f4883b01fc7f3a23f4cd4 af8dc4259a5993fadb7fef9a9601339dca029400

The new preview zoom introduces some bugs that are difficult to work around, details:

  • v41.9.42: fix(workspace): don’t overwrite conflict state
  • v41.9.41: chore: retrigger ci
  • v41.9.40: fix(print-preview): prevent from showing while loading in publishing screen
  • v41.9.39: fix(comments-toolbar): count threads in favor of comments
  • v41.9.38: chore: improve param naming
  • v41.9.37: fix(hugo-drag-and-drop): Map huGO text fields to image directives

This will allow multiple hugoPicture text fields to be imported into dropped images.

The mapping of which hugoPicture field is mapped to which image component directive is done via a server configuration that looks like this:

  hugo: {
    resource: {
      images: {
        directiveMappings: [
            directiveName: 'caption',
            hugoFields: [
                name: 'caption'
            directiveName: 'author',
            hugoFields: [
                name: 'author',
                options: {
                  shouldRemoveReference: true,
                  isStartCase: true
                name: 'source'

If this mapping is not configured a simple caption -> caption mapping is assumed (as is the previous behavior).

If multiple hugo fields are mapped to a single image directive the texts of all the fields are concatenated (comma-separated).

The mapping config introduces the following formatting options for the imported hugo text:

isStartCase: text will be converted to initial caps, e.g. JOHN RONALD REUEL TOLKIEN -> John Ronald Reuel Tolkien frodo baggins -> Frodo Baggins

shouldRemoveReference: will remove the substring via [some entity] which is often added to the author name, e.g. John Rambo via -> John Rambo

  • v41.9.36: chore: trigger ci
  • v41.9.35: fix: correctly notify user during a conflict
  • v41.9.34: fix(metadata-image-cropping): guard out of bounds
  • v41.9.33: chore: trigger ci
  • v41.9.32: po-dashboard: improve load more button
  • v41.9.31: print-preview: add zoom functionality
  • v41.9.30: toolbar-comments: add indicator for comments
  • v41.9.29: publish-screen: correctly align publish btn / server-admin-users-ui: correctly sort users
  • v41.9.28: iframely: return promise
  • v41.9.27: content-behavior: read the components from contentType
  • v41.9.26: bump framework includes componentConversion match all flag and links are correctly copied
  • v41.9.25: icons: add swisscom tv icons
  • v41.9.24: server-admin: reactivate archived users
  • v41.9.23: fix: Use newest fastify-reply-from to support separate http proxy agents
  • v41.9.22: fix: Revert the npm ci to npm install as npm automatically removes the package-lock from the published module
  • v41.9.21: fix: Support http proxies in the proxy feature
  • v41.9.20: fix(user-proxy): allow proper loading of multiple users
  • v41.9.19: fix: track call, extended info
  • v41.9.18: fix(collaboration): Fix the user names that are shown when another user edits a document
  • v41.9.17: fix(user-proxy): ensure inexistent users have a preview
  • v41.9.16: fix(cropping): editing metadata image check scoped on distinct metafield
  • v41.9.15: fix: Upgrade to @livingdocs/framework@^12.6.3

To fix some image service helpers

  • v41.9.14: fix(compare-toggle): reset diffService selection

toggle of compare mode works correctly

  • v41.9.13: fix: Migrate to the newer dependency injection syntax
  • v41.9.12: fix: finishing proofreading forces a new revision
  • v41.9.8: search: Fix last publication date on search result
  • v41.9.7: assets: Set default cache time of assets to 1 year again.
  • v41.9.6: component-library: use correct binding variable ref for design modal
  • v41.9.5: design: import groups only where available
  • v41.9.4: Fix webpack config lookup


Categories 🎁

The categories feature allows to organise routing information and category related metadata such as ad campaigns, analytics, etc. We provide a Monaco Editor instance in the Project Setup to edit the categories information as a JSON. In addition there are new metadata plugins to enable the categories on content-types as well as a one-click setup that sets up all metadata for pages and articles in one go.

For use in the frontend projects we provide new public API endpoints:

  • βž• /routing/resolve to resolve a given path to a document id
  • βž• /categories to get all categories
  • βž• /categories/:id to get a specific category Detailed documentation on the new public API endpoints is in the public API documentation <your-editor-host>/public-api.

Reindex Documents via Operation Screen 🎁

Reindexing will often be used when one wants to have updated metadatadata and design for deliveries. A server administrator can now reindex documents via the Operations panel (Server Administration -> Operations) in the editor. The reindexing mechanism is the same as via the livingdocs-server CLI.



Teaser Preview 🎁

The Teaser Preview adds an additional read-only view to the publication section of the Livingdocs Editor. It is by default disabled and can only be enabled and configured in a content type config. Examples and more details how to set up a teaser preview, can be found in the documentation



doc-include Enhancements 🎁

doc-include have been enhanced.

  • βž• Pass dependencies (css/js) to a doc-include
  • βž• New onIncludeRendered hook

You can find the updated doc-include in the documentation. There is also a guide in our documentation on how to set up a Twitter include which uses the new options of doc-includes.


https and api proxy support

The editor has experienced some small but useful improvements

  • βž• Support ssl certificates for localhost and therefore https/http2
  • βž• Introduce a proxy for API requests to prevent CORS requests
  • βž• Serving assets using a cdn url

You can find a more detailled description in the editor PR.


Breaking Changes πŸ”₯

Migrate the database

# run grunt migrate to update to the newest database schema
# migration - 120-add-asset-collections.js
#   create asset collection table
# migration - 121-add-assets-to-indexes.js
#   add assets collection to indexes
# migration - 122-add-user-to-indexes.js
#   add user to indexes
livingdocs-server migrate up

Drop Browser Support


  • βž– Drop browser support for Safari older than v11.1
  • βž– Drop browser support for Microsoft Edge older than v18


Editor Menu: New Config Options

It’s now necessary to configure a docment search filter for a Menu. The search filter will be applied when you try to link a document to a menu entry.

Needed Actions πŸ”₯

If you want to keep the previous behavior, you’ll have to add this filter to the Livingdocs Editor config.


// all.js
filters: {
  menuList: {
    displayFilters: [],
    defaultQueries: [
      {type: 'documentType', value: 'page'},
      {type: 'documentState', value: 'published'},
      {type: 'sortBy', value: 'relevance'}
    emptySearchQueries: [
      {type: 'documentType', value: 'page'},
      {type: 'documentState', value: 'published'},
      {type: 'sortBy', value: '-updated_at'}


Design Versions


The channel properties available_versions and disabled_versions are no longer checked on

  • document create
  • document update
  • document publish


Auto update component with doc-html directive πŸ”₯


The html of a component with a doc-html directive will be applied and rendered automatically to a document in the Editor. The Previous behaviour needed a confirmation to apply html content to a document.


Includes Feature πŸ”₯

Includes API resolveInclude + resolveRawInclude returns now an object instead of a HTML string.


// Before
//   -> returns a HTML string
const includesApi = server.features.api('li-includes')
  serviceName: 'old-resolve'
}, function (err, html) {
// After
//   -> returns an object
const includesApi = server.features.api('li-includes')
  serviceName: 'new-resolve'
}, function (err, include) {


IMatrics for NLP (Natural Language Processing) analysis

We integrated IMatrics as a prototype:

  • Integrated IMatrics in the Livingdocs Editor for NLP analysis of text.
  • Allow users to configure IMatrics with a project through the channel config (plugin).
  • Allow users to run analysis on text as well as showing a PoC of related articles.

Here you can watch a demo video

Other Changes