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

Webinar

System Requirements

Suggested

NameVersion
Node18
NPM8
Postgres15
Elasticsearch
OpenSearch
8.x
v2.3.0
Redis7
Livingdocs Server Docker Imagelivingdocs/server-base:18.3
Livingdocs Editor Docker Imagelivingdocs/editor-base:18.5
Browser SupportEdge >= 92, Firefox >= 90, Chrome >= 92, Safari >= 15.4, iOS Safari >= 15.4, Opera >= 78

Minimal

NameVersion
Node16
NPM8
Postgres12
Elasticsearch
OpenSearch
7.x
1
Redis6.2
Livingdocs Server Docker Imagelivingdocs/server-base:16.3
Livingdocs Editor Docker Imagelivingdocs/editor-base:16.3
Browser SupportEdge >= 92, Firefox >= 90, Chrome >= 92, Safari >= 15.4, iOS Safari >= 15.4, Opera >= 78

Highlights

Planning System

Estimated Time of Completion Plugin

The Estimated Time of Completion Metadata Plugin li-estimated-time-of-completion enables a user to set an estimated time of completion for the current document. The plugin is available in the Metadata Form.

Notice: The li-estimated-time-of-completion plugin is only available if the Planning System is enabled.

Team Plugin

The team Metadata Plugin li-team enables a user to associate other users with the current document by adding or removing them from the teams plugin. Additionally one user can be marked as the owner. The owner can not be removed from the team. The plugin is available in the Metadata Form and the Table Dashboard.

Notice: The li-team plugin is only available if the Planning System is enabled.

Task List Table Dashboard Cell

The Task List Table Dashboard Cell liTableDashboardCellTaskList is a read only component for the Table Dashboard. It gives an overview of current tasks connected with the given document.

API Consumer Management

With the new API Consumer Management feature you are now able to manage the lifecycle for tokens, e.g.

  • manage token rotation
  • manage token suspension
  • manage token expiration

Notable Features

Retresco Queued Retagging

A new hook is introduced to the Retresco integration. It allows document re-enrich functionality with Retresco tags in a queued manner. This is useful if you want to re-enrich a large number of documents in a batch.

Metadata Property Display Filters

A new type of Display Filters is introduced: metadataPropertyName.

With these filters, you will be able to easily configure a filter for any metadata property on your documents. Currently, only 2 types of metadata properties are supported: li-integer and li-category. Support for other types will be added in future releases.

You can now add rel="sponsored" tag to an HTML link in the text formatting toolbar. This is useful if you want to mark links as sponsored for search engines.

Anonymize User History

You can now configure timespan in the server configuration after which the revision history will be anonymized. After said time, the editor does not receive a user_id with the revisions response and thus can not render the associated users but renders a fallback “Anonymous User”.

Small Improvements

Publish Control Import API Support

You can now set publishControl.firstPublicationDate and publishControl.lastPublicationDate when importing documents using the Import API.

Breaking Changes 🔥

Migrate the Postgres Database 🔥

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

# run `livingdocs-server migrate up` to update to the newest database schema
# migration 186-api-clients.js
#   adds new table for API Clients and API Tokens
# migration 193-increase-document-title-length.js
#   increases the length of the document title to 1000 characters
livingdocs-server migrate up

Upgrade cheerio to 1.0.0-rc.12 🔥

This change only affects customers using a customized render pipeline or the hugo feature and if you have cheerio in your package.json.

References:

Drop Imagemagick support 🔥

The usage of it was discouraged since a long time because of security issues. Remove the server config property mediaLibrary.images.processingStrategy.

References:

Do not support running the core tests in a downstream editor 🔥

🔥 Remove testing core editor tests from a downstream with npm explore @livingdocs/editor -- npm test 🔥 If you copied the testing setup of Livingdocs, you have to add "angular-mocks": "^1.8.3" in your devDependencies.

Another recommended cleanup step is to move all chai, mocha, karma and sinon packages from dependencies to devDependencies

Remove Dashboard Display Filters 🔥

These Dashboard Display Filters are not supported anymore:

  • coreApi.searchFilters.register
  • coreApi.searchFilters.registerList
  • coreApi.searchFilters.registerAngularComponent

Update the deprecated filter to the supported Display Filters from the core.

  • Named Filters
  • Metadata Filters
  • ListV2 Filters

If you can’t handle your requirements with core filters it’s best to contact your Customer Solutions manager to get inputs for solutions (one option is to create your custom Vue component, but that should be prevented whenever possible).

References:

Remove Editor Config appConfig.app.sidePanelItems 🔥

The Editor Config appConfig.app.sidePanelItems is removed, move the config to the Project Config editorSettings.mainNavigation.

References:

Document Revision Creation

Previously we created a new revision for document updates when any of the following conditions were true:

  • First change after publication
  • User did not make the previous change
  • Revision is over 15 minutes old
  • Revision has not been updated for over 2 minutes

🔥 The rules above still apply, but only when revision data has changed. Changes to Document Title, System Metadataand Publish Control data will not create a new revision.

References:

Deprecations

Deprecate appConfig.ui.welcome

The editor config appConfig.ui.welcome is deprecated and will be removed in release-2023-03.

  • Option 1: Configure your welcome screen in the Project Config via startPage
  • Option 2: Switch to a Home Screen

Breaking Change: release-2023-03

References: PR

Deprecate Display Filter config for category

The Display Filter of a metadata property of type li-category should be reconfigured as {metadataPropertyName: 'category'}

Breaking Change: not defined yet

References: PR

Public API - Project Endpoints

  • Deprecate /api/v1/project -> use /api/v1/projectConfig instead
  • Deprecate /api/v1/channels -> use /api/v1/projectConfig instead
  • Deprecate /api/v1/channels/:channelHandle -> use /api/v1/projectConfig instead

Breaking Change: release-2023-11

References: Server PR

APIs 🎁

Import API - Payload

🎁 Make content and metadata optional in payload -> easier to handle Data Records with that. Pass content and design on the top level of a document payload instead in a livingdoc

{
  "systemName": "identifier-for-your-system",
  ...
  "documents": [
    {
      "title": "test import",
      ...
      // before, deprecated
      "livingdoc": {
        "content": [ ... ],
        "design": {
          "name": "living-times",
          "version": "1.0.1"
        }
      },
      // now
      "content": [ ... ],
      "design": {
        "name": "living-times",
        "version": "1.0.1"
      }
    }
  ]
}

Other Changes

Features

Improvements

Bugfixes

Patches

Here is a list of all patches after the release has been announced.

Livingdocs Server Patches

  • v213.6.62: fix(security): Update sharp to version 0.32.6 to patch CVE-2023-4863
  • v213.6.61: fix(woodwing): The blob-store createReadStream returns a promise, await it
  • v213.6.60: fix(document import): copies metadata on drag
  • v213.6.59: fix(indexing): Also index systemMetadata properties present in the static mapping
  • v213.6.58: fix(documents): Fix metadataEntity typo
  • v213.6.57: fix(sitemap): Add entriesPerPage to getSitemapIndex call
  • v213.6.56: fix(security): Update protobufjs (CVE-2023-36665), semver (CVE-2022-25883), vm2 (CVE-2023-37466, CVE-2023-37903), tough-cookie (CVE-2023-26136) and word-wrap (CVE-2023-26115) to patch security vulnerabilities
  • v213.6.55: chore: Add missing corrupted_imago.jpeg fixture
  • v213.6.54: fix(media-library): Add failOn config for processing corrupt image files
  • v213.6.53: fix(lists): Return scheduled_in_inbox with find request
  • v213.6.52: fix(deps): Upgrade @livingdocs/conf to not merge arrays
  • v213.6.51: fix(documents): Fix metadata_id query in document cleanup script
  • v213.6.50: chore: Update nzz tests to node 18
  • v213.6.49: test(document-lists): Test scheduled documents in document lists
  • v213.6.48: fix(indexing): Fix --ids=1,2,3 indexing for the drafts index
  • v213.6.47: fix(indexing): Add try/catch around elasticsearch payload creation to prevent full bulk failures if one document is faulty
  • v213.6.46: fix(dependencies): Upgrade vm2 to fix security vulnerabilities CVE-2023-32314
  • v213.6.45: chore(data-migrations): Support new date range structure on data migration document filter query
  • v213.6.44: fix: also support camel case in systemdata for a Data Migration
  • v213.6.43: fix: desk-net status sync back without config
  • v213.6.42: fix(logging): Make dev string formatter more reliable with custom input
  • v213.6.41: fix(retresco): Fix retresco date comparison during publish, write a test
  • v213.6.40: fix(search): Search secondary channels again
  • v213.6.39: fix(retresco): Check if document is published before accessing properties in Retresco enrichment, include a test for unpublished documents
  • v213.6.38: fix(project-config): Enhance content type & media type sync logs with project id context
  • v213.6.37: fix(project-config): Set higher request body size for the project config post endpoints
  • v213.6.36: fix(retresco): Add workaround to allow republish when data migrations or imports have created a draft, but no changes were applied to the document
  • v213.6.35: fix: trigger new release
  • v213.6.34: fix: fix data migration memory leak (report at the end) with a lot of migrated documents
  • v213.6.33: fix: add x-compressed-zip extension
  • v213.6.32: fix(project-configs): Sync content_type_ids and media_type_ids of static project configs during server start
  • v213.6.31: fix(retresco): Allow Retresco Re-enrich concurrency configuration via integrations.retresco.reenrichConcurrency
  • v213.6.30: fix(vm2): Upgrade vm2 module to patch a security vulnerability
  • v213.6.29: fix(blob-storage): Fix blob storage download logic to await the file before streaming it
  • v213.6.28: fix(routing): Fix routing indexing behavior that breaks CLI tasks when routing.indexing.enabled is enabled without worker role
  • v213.6.27: fix: log invalid metadata type in contentType[].publicationIndex config
  • v213.6.26: fix(blob-storage): Azure Blob Storage config Schema validation didn’t include custom computeKey() function
  • v213.6.25: chore: Use the new elasticsearch environment variable with the drone tests
  • v213.6.24: fix: extend airship log
  • v213.6.23: fix(link-directive): Include target property to LinkDirective schema
  • v213.6.22: chore: Add a comment about elasticsearch version conflicts in the delete_by_query call
  • v213.6.21: fix(dashboard): allow allowQuickPublish option for publish state dashboard cell
  • v213.6.20: fix(sort): correctly support arrays
  • v213.6.19: chore: Log warnings about deleted content types that are still present on postgres
  • v213.6.18: fix(dataSource): allow dataSources to return integers as values
  • v213.6.17: fix(redis): Coerce strings to numbers. There was an inconsistency with some integers where tonumber('0') fails as it requires a base with that.
  • v213.6.16: fix: improve isTestFile regex
  • v213.6.15: test: Fix test description in app/features/retresco/retresco-api.test.js
  • v213.6.14: fix(password-validation): Generic error (5XX) was used for Password input verification and error properties where removed, replaced with validationError which will return clearer 4XX error
  • v213.6.13: chore(revisions): remove code duplication
  • v213.6.12: fix: update framework version
  • v213.6.11: fix(distribution-planning): Remove document content from response
  • v213.6.10: fix(lib): Get require("~lib") to work again with newer npm versions
  • v213.6.9: test(distribution-planning): Create documents in series again to fix expectations
  • v213.6.8: chore(framework): Update @livingdocs/framework version
  • v213.6.7: chore: PR feedback
  • v213.6.6: fix(document-lists): Support list updates with a lot of document ids
  • v213.6.5: fix: Fix axios 1 querystring compatibility in the document search
  • v213.6.4: fix(queue): Fix waiting delay increment when a fetch returned an empty result set
  • v213.6.3: fix(redis): Fix redis support in the repl

Livingdocs Editor Patches

  • v90.33.101: code(comments): always use the context from editable data

  • v90.33.100: fix: switch webpack devtool setting to have less errors

  • v90.33.99: fix(security): Update semver (CVE-2022-25883), word-wrap (CVE-2023-26115) and tough-cookie (CVE-2023-26136) to patch security vulnerabilities

  • v90.33.98: fix(lists): Include scheduled when calculating sort order

  • v90.33.97: fix(dashboards): Reset pagination when resetting filters

  • v90.33.96: fix(drop-handler): check if children allowed

  • v90.33.95: fix(publish control): show publication date only when a visiblePublicationDate is available (the article has been published before)

  • v90.33.94: fix(back button): ignore kanban boards from potential navigation targets for user clarity

  • v90.33.93: fix(document lists): show correct label on card after publish control schedule is removed

  • v90.33.92: fix: clone dashboard config before modifying

  • v90.33.91: chore: Add scheduledOrPublished support on legacy documentState filter

  • v90.33.90: fix(quick publish): correctly show quick publish button if allowed

  • v90.33.89: fix(dashboards): ensure no errors are logged when legacy dashboards are used

  • v90.33.88: chore(legacy-search): Skip tests that call _fetchDocumentList

  • v90.33.87: fix(dates): Fix relative date formatting and write tests for it

  • v90.33.86: fix(dependencies): Upgrade engine.io and socket.io-parser to fix security vulnerabilities CVE-2023-31125 and CVE-2023-32695, respectively

  • v90.33.85: fix(li-publish-control-embargo): keep UTC date

  • v90.33.84: fix(redirect): state given over URL

  • v90.33.83: fix: treat filter v2 options with exists as valid selection

  • v90.33.82: fix(li-publish-control-embargo): respect setTimeout max delay value

  • v90.33.81: fix(document creation): set metadata title property with useAsTitle during creation

  • v90.33.80: fix(display filters): wait for all filters initialized to compute usable listV2 filters

  • v90.33.79: fix(editable teasers): apply overrides when inserting a component from clipboard

  • v90.33.78: fix(publish control): don’t show publish/unpublish buttons in wrong state until panel reopen

  • v90.33.77: fix(tasks): show all started tasks in publish control panel, not just currently accepted ones

  • v90.33.76: fix(teaser preview): Layout

  • v90.33.75: fix(display filters): don’t render container for listV2 filters with no options

  • v90.33.74: fix(kanban boards): correctly apply filters for initial search

  • v90.33.73: fix(legacy dashboards): wait for filter ready for initial load to take filter values from cache into account

  • v90.33.72: fix(srcissors): Update srcissors to not include dev dependencies

  • v90.33.71: fix(publish control): allow opening publish control panel when text in editable is selected

  • v90.33.70: fix(publish control): disable unpublish buttons for foreign locked documents

  • v90.33.69: fix: remove session from MediaLibraryEntry

  • v90.33.68: chore(resolve conflicts): li_proposal

  • v90.33.67: fix(images): Debounce image crop changes by 500ms to prevent burst requests against the image service

  • v90.33.66: fix(document createion flow): still disabled in channels

  • v90.33.65: fix(filter bar item): min height added

  • v90.33.64: fix: improve crop normalization and update srcissors

  • v90.33.63: fix(dependencies): Update webpack to patch vulnerability

  • v90.33.62: fix(dashboards): enhance multi-channel behavior for dashboards/create flows

  • v90.33.61: fix(li-tree): keep invalid items in tree and mark as unsaved

  • v90.33.60: fix(metadata): Keep automatic metadata source for fallback title

  • v90.33.59: fix(display filter): restore search by typing functionality for listv2 filters

  • v90.33.58: fix(dashboard permissions): angular dashboard init correctly called

  • v90.33.57: fix: prevent syncing empty metadata title

  • v90.33.56: fix(image-cropper): account for missing width

  • v90.33.55: fix(menu): fix drag and drop handler - quick fix

  • v90.33.54: fix: Do not rely on axios serialization of metadata and filters attributes. It has depth limits

  • v90.33.53: Update app/features/publish/publish-control/publish-control-info/li-publish-control-visible-date.vue

  • v90.33.52: fix(rel-attribute): rel property was being overwritten by the ...partialLinkAttributes contents

  • v90.33.51: fix(display filter): pass the correct config object to display filter fetch functions

  • v90.33.50: fix(draft): Use remote metadata source when updating metadata

  • v90.33.49: fix(image): Use crop in getUpdatedAutomaticCrops() calculation

  • v90.33.48: fix(li-component-link): Fix error where links to other documents would fail to save the document

  • v90.33.47: fix(use_embedded_overrides): Fix “Has local changes” for editable teasers - make sure it shows when there are changes for editable teasers that have been edited for the first time

  • v90.33.46: fix(li-tree): allow unparsable links

  • v90.33.45: fix(li-comment-mention): fix undefined session console error

  • v90.33.44: fix(teasers): allow component creation by document drop with any param handle for the document reference

  • v90.33.43: fix(dashboards): take componentOptions.allowQuickPublish into account for liTableDashboardCellPublishState if defined

  • v90.33.42: fix(dashboards): show quick publish only when reasonable

  • v90.33.41: fix(li-integer): correctly treat 0 value

  • v90.33.40: fix(buy-in): improve wording

  • v90.33.39: fix(li-link-edit): Pass all linkAttributes properties to be included in a tag

  • v90.33.38: fix(li-table-dashboard-cell-context-menu): filter out hidden actions

  • v90.33.37: fix(embedded documents): allow document references on any param, not just ‘article’

  • v90.33.36: fix(menu tool): apply filters.menuList when not using legacy dashboards

  • v90.33.35: fix(document selection): ensure filters are applied when using legacy dashboards

  • v90.33.34: chore(context-menu): Remove unnecessary hover logic

  • v90.33.33: fix: add favicon.ico and apple-touch-icon

  • v90.33.32: fix(image_form): hide download button when no crops are available

  • v90.33.31: fix(vue): Fix default parameter of components that should fallback to an empty object

  • v90.33.30: fix(insert panel): Spacing

  • v90.33.29: fix(creation flow): Made content type boxes keep their size

  • v90.33.28: fix: remove unnecessary, layout breaking app__notifications div

  • v90.33.27: fix: pass the correct config object to custom angular display filters

  • v90.33.26: fix(create): correctly check if contentType on defaultChannel to use the right code path during creation

  • v90.33.25: fix(desknet): Fix automatic placement errors due to schedule properties

  • v90.33.24: fix: bump framework version

  • v90.33.23: fix(document tooltip): shows scheduled docs

  • v90.33.22: fix(dashboards): don’t show the open task count since we have a separate cell for this now

  • v90.33.21: fix(distribution-planning): Use yyyy-MM-dd for fixed date request

  • v90.33.20: fix(buy-in): remove 2nd line of empty state

  • v90.33.19: fix(dashboards): Don’t load document content in table dashboards

  • v90.33.18: fix(task list): show only the assigned user, never the requester

  • v90.33.17: fix(li-buy-in): add planning system guard

  • v90.33.16: fix: remove animations from overflow table rows

  • v90.33.15: fix(li-list-assignments): avoid flickering after list was selected

  • v90.33.14: fix(dashboards): correctly apply filter state from store on inintial search

  • v90.33.13: fix(distribution flyouts): Overflow and layout

  • v90.33.12: fix(li-meta-integer-filter): don’t emit change if no integer selected

  • v90.33.11: fix(framework): Update @livingdocs/framework version to include latest fix for imgIX URL generation

  • v90.33.10: fix(kanban board): reloads results correctly when result is less than page size

  • v90.33.9: fix(distribution-planning): Don’t show unconfigured content types

  • v90.33.8: fix(publish control): ensure button state changes on publish/draft creation

  • v90.33.7: fix(distribution dashboard): Time cell


    Icon Legend

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