Attention: If you skipped one or more releases, please also check the release-notes of the skipped ones.
Webinar
- Feature Webinar Recording | Passcode: B?^VPv7.
- Feature Webinar Slides
- Dev Webinar Recording | Passcode: +yp9#sTZ
- Dev Webinar Slides
- Release Newsletter Subscription
System Requirements
Suggested
Name | Version |
---|---|
Node | 18 |
NPM | 8 |
Postgres | 15 |
Elasticsearch OpenSearch | 8.x v2.3.0 |
Redis | 7 |
Livingdocs Server Docker Image | livingdocs/server-base:18.3 |
Livingdocs Editor Docker Image | livingdocs/editor-base:18.5 |
Browser Support | Edge >= 92, Firefox >= 90, Chrome >= 92, Safari >= 15.4, iOS Safari >= 15.4, Opera >= 78 |
Minimal
Name | Version |
---|---|
Node | 16 |
NPM | 8 |
Postgres | 12 |
Elasticsearch OpenSearch | 7.x 1 |
Redis | 6.2 |
Livingdocs Server Docker Image | livingdocs/server-base:16.3 |
Livingdocs Editor Docker Image | livingdocs/editor-base:16.3 |
Browser Support | Edge >= 92, Firefox >= 90, Chrome >= 92, Safari >= 15.4, iOS Safari >= 15.4, Opera >= 78 |
Highlights
Planning System
- PR Server: Document Transform Functions
- PR Editor: Create and transform UI
- PR Editor: Distribution Channel Groups and Navigation Component
- PR Server: Metadata Plugin: li-estimated-time-of-completion
- PR Editor: Metadata Plugin: li-buy-in
- PR Server: Metadata Plugin: li-distribution-schedule
- PR Editor: Metadata Plugin: li-integer - dataProvider support
- PR Editor: Distribution Planning: Table Cells
- PR Editor: Table Dashboard Cell: Buy-In
- PR Editor: Table Dashboard Cell: Distribution
- PR Editor: Distribution Planning (Part 1)
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.
link rel=“sponsored”
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”.
- Documentation
- PR Editor: Anonymized History after specified time
- PR Server: Anonymized History after specified time
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.
cheerio.load
behaves slightly different and automatically appends ‘’ tags. Please follow the upgrade instruction from cheerio https://github.com/cheeriojs/cheerio#loading.- Newlines
\r\n
now get normalized to\n
.
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 Metadata
and 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
- Improve synchronisation of remote metadata changes
- Metadata: li-integer supports dataProvider
- Project Config: Prevent duplicate declarations
- Support custom date formats in legacy elasticsearch mapping
Bugfixes
- Do not send new device emails for archived users
- DisplayFilters: correctly apply url stored state again on reload
- doc-link: Iframely directive prefill fixed
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 version0.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
togetSitemapIndex
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) andword-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 whenrouting.indexing.enabled
is enabled withoutworker
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) andtough-cookie
(CVE-2023-26136) to patch security vulnerabilitiesv90.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
andsocket.io-parser
to fix security vulnerabilities CVE-2023-31125 and CVE-2023-32695, respectivelyv90.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 selectionv90.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 vulnerabilityv90.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
andfilters
attributes. It has depth limitsv90.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
contentsv90.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 ina
tagv90.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
divv90.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 generationv90.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: 🔧