---
title: January 2023 Release
description: Technical Release Notes for release-2023-01
---
**Attention:** If you skipped one or more releases, please also check the release-notes of the skipped ones.
## Webinar
* [Feature Webinar Recording](https://us02web.zoom.us/rec/share/njfTVMspn7_cU2VBLw8Io1QcDukoFvlbHm5TwYJJ_iJNabGMMOHkAWdtatCiYwpl.rAkqpWECUhxoUtg5) | Passcode: y1Dw?P0X
* [Feature Webinar Slides](https://docs.google.com/presentation/d/1_XFPtkkRGRmYY5-815pLSCkT0k7E5Vso2djNUawE3oA)
* [Dev Webinar Recording](https://us02web.zoom.us/rec/share/GyxbikJWTDFZPbEp35NILsLwBhBknXPQgEogS2yGCjpSIMeLpj9xcHfT_cw3CHde.wKqlN0R9lrt9dFUP) | Passcode: jq%sBK7B
* [Dev Webinar Slides](https://docs.google.com/presentation/d/1QFep2oTseMQmMsJGh2aESHOLXkfapvDqZVtonmHBfC8)
* [Release Newsletter Subscription](https://confirmsubscription.com/h/j/61B064416E79453D)
## 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 >= 80, Firefox >= 74, Chrome >= 80, Safari >= 13.1, iOS Safari >= 13.4, Opera >= 67|
### 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 >= 80, Firefox >= 74, Chrome >= 80, Safari >= 13.1, iOS Safari >= 13.4, Opera >= 67|
## Highlights
### Home Screen
Project home screen with multiple Table Dashboards and Document Creation Flow buttons on it.
* [Documentation](/reference/project-config/editor-settings/llms.txt#home-screen)
* [PR: Editor](https://github.com/livingdocsIO/livingdocs-editor/pull/6082)
## Breaking Changes :fire:
### Migrate the Postgres Database :fire:
It's a simple/fast migration with no expected data losses.
```sh
# run `livingdocs-server migrate up` to update to the newest database schema
# migration 184-increase-webhook-handle-length.js
# limit webhook handle to 50 characters
# migration 185-li-get-leaf-of-revision-history.js
# add psql function li_get_leaf_of_revision_history
livingdocs-server migrate up
```
### Drop support for node v14
🔥 Drop support for node 14, use node v18 instead.
### Drop support for Redis < v6.2
🔥 The minimal required Redis version is v6.2.
### Upgrade to elasticsearch client v8
🔥 The response structure changed in the new client. If you have custom code that accesses elasticsearch, you'll need to update it accordingly:
```diff
- const {body} = await elasticsearchClient.search({
+ const body = await elasticsearchClient.search({
index: 'li-documents',
q: `document.id:${this.doc.id}`
})
```
Please see the examples of elasticsearch how to use it: https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/get_examples.html
🔥 The elasticsearch client configuration changed slightly. Please consult the elasticsearch client configuration documentation: https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/basic-config.html
```diff
search: {
elasticsearchClient: {
node: 'https://127.0.0.1:9200/',
auth: {username: 'admin', password: 'admin'},
- ssl: {rejectUnauthorized: false}
+ tls: {rejectUnauthorized: false}
}
},
```
### Stricter search queries
- 🔥 Filters on unavailable properties throw an error.
- 🔥 Elasticsearch `exists` queries on objects not supported anymore. Please use a specific sub-property instead.
e.g. To filter for documents that have no category assigned, you need to use `category.reference.id` instead of `category` in the editor search filter:
```diff
{
id: 'without-category',
label: 'Without category',
type: 'metadata',
- key: 'category',
+ key: 'category.reference.id',
value: {exists: false}
}
```
References: [Server PR](https://github.com/livingdocsIO/livingdocs-server/pull/5000)
### Don't expose error_details in 5xx response
🔥 5XX responses will no longer contain `body.error_details` object, still the whole error response will be logged.
References: [Server PR](https://github.com/livingdocsIO/livingdocs-server/pull/4988)
### Remove metadata plugin li-media-language
🔥 Remove metadata plugin `li-media-language`, use `li-metadata-translations` instead.
References: [Server PR](https://github.com/livingdocsIO/livingdocs-server/pull/4899)
### Remove deprecated document.path
Since a long time we deprecated the DB property `documents.path`, because there is no real feature behind that property.
:fire: `contentTypes[].editor.deliveryLinks` do not support`:path` placeholder
:fire: editor model `draft.path` is not accessible anymore
References: [Server PR](https://github.com/livingdocsIO/livingdocs-server/pull/5001)
### Support removal of metadata properties by assigning null
🔥 Before this change, assigning null values resulted in a metadata schema error.
Now it's accepted and it removes the metadata property. Therefore it's not possible anymore to save the value null as metadata property value.
```js
// before
metadata.myField = null // throws
// now
metadata.myField = null // delete metadata.myField
```
References: [Server PR](https://github.com/livingdocsIO/livingdocs-server/pull/5007)
### Mandatory project_id in documentApi.find
🔥 Make `project_id` mandatory in `documentApi.find`
References: [Server PR](https://github.com/livingdocsIO/livingdocs-server/pull/5017)
### Fix firstPublicationDate to documents table (Post Deployment) :fire:
This script was backported to release-2022-11, so it has been added again for release-2023-01 in case anyone missed it. If you already ran the script with the previous release upgrade you do not need to run it again.
If you have unpublished a document while running release-2022-07 or release-2022-09 then you may have inaccurate values for the `document.systemdata.firstPublicationDate`. Below is a comparison of the change in the four most recent versions:
First publish:
release-2022-07 and release-2022-09: Set `firstPublicationDate`
release-2022-05 and release-2022-11: Set `firstPublicationDate`
Republish while published:
release-2022-07 and release-2022-09: Keep `firstPublicationDate`
release-2022-05 and release-2022-11: Keep `firstPublicationDate`
Unpublish:
release-2022-07 and release-2022-09: Remove `firstPublicationDate`
release-2022-05 and release-2022-11: Keep `firstPublicationDate`
Republish after unpublish:
release-2022-07 and release-2022-09: Set `firstPublicationDate`
release-2022-05 and release-2022-11: Keep `firstPublicationDate`
Essentially the old behaviour and the new "fixed" behaviour is to set `firstPublicationDate` once and never modify it. This property will still exist even when the document is unpublished. For release-2022-07 and release-2022-09 the difference in behaviour was that the `firstPublicationDate` would be cleared on unpublish and set again at the next publish.
If you would like to correct the `firstPublicationDate` property for all of your articles you can run:
```bash
node ./node_modules/@livingdocs/server/db/manual-migrations/009-fix-first-publication-date.js
```
This script performs the following actions:
1. Check that `first_publication_id` has been set (same as the script 007-populate-first-publication-data.js)
2. Move `firstPublicationDate` from `data` to `data.publishControl`
3. Remove `data.firstPublicationDate`
4. If `firstPublicationDate` is not set then use the value from the first publication
5. If `firstPublicationDate` is set then use the value from the first publication when the first publication is older
It is highly recommended that you run this script because it is performing a data migration as well as fixing the values.
References: [Server PR](https://github.com/livingdocsIO/livingdocs-server/pull/4957)
## Deprecations
### Deprecate Dashboard Display Filters
These Dashboard Display Filters get deprecated:
- `coreApi.searchFilters.register`
- `coreApi.searchFilters.registerList`
- `coreApi.searchFilters.registerAngularComponent`
Update the deprecated filter to the supported [Display Filters](/customising/advanced/editor-configuration/display-filter/llms.txt) 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)
Breaking Change: `release-2023-03`
References: [Editor PR](https://github.com/livingdocsIO/livingdocs-editor/pull/6150)
## Other Changes
### Features
* [Load drafts in includes](https://github.com/livingdocsIO/livingdocs-server/pull/4936)
* [Add server config 'httpServer.showStackTraces'](https://github.com/livingdocsIO/livingdocs-server/pull/4926)
* [Support Dailymotion for oEmbed include](https://github.com/livingdocsIO/livingdocs-server/pull/4910)
### Improvements
* [TLS Support in Redis](https://github.com/livingdocsIO/livingdocs-server/pull/4982)
* [Add `acceptedCharacterDifference` property to `li-target-length` metadata plugin](https://github.com/livingdocsIO/livingdocs-editor/pull/6029)
### Bugfixes
* [Publish screen back button returns to custom data record dashboard after create](https://github.com/livingdocsIO/livingdocs-editor/pull/5959)
* [Handle focal point in metadata forms](https://github.com/livingdocsIO/livingdocs-editor/pull/5953)
* [Fix date sort order on users admin screen](https://github.com/livingdocsIO/livingdocs-editor/pull/6054)
## Patches
Here is a list of all patches after the release has been announced.
### Livingdocs Server Patches
- [v208.3.65](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.65): fix(woodwing): The blob-store createReadStream returns a promise, await it
- [v208.3.64](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.64): fix(indexing): Also index systemMetadata properties present in the static mapping
- [v208.3.63](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.63): fix(documents): Fix `metadataEntity` typo
- [v208.3.62](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.62): chore: Disable nzz-downstream tests as it's using release-2023-03 already
- [v208.3.61](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.61): fix(indexing): Fix `--ids=1,2,3` indexing for the drafts index
- [v208.3.60](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.60): fix(indexing): Add try/catch around elasticsearch payload creation to prevent full bulk failures if one document is faulty
- [v208.3.59](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.59): chore(data-migrations): Support new date range structure on data migration document filter query
- [v208.3.58](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.58): fix: also support camel case in systemdata for a Data Migration
- [v208.3.57](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.57): fix: desk-net status sync back without config
- [v208.3.56](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.56): fix(project-config): Enhance content type & media type sync logs with project id context
- [v208.3.55](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.55): fix(project-config): Set higher request body size for the project config post endpoints
- [v208.3.54](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.54): fix: fix data migration memory leak (report at the end) with a lot of migrated documents
- [v208.3.53](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.53): fix: add x-compressed-zip extension
- [v208.3.52](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.52): fix(project-configs): Sync content_type_ids and media_type_ids of static project configs during server start
- [v208.3.51](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.51): fix(vm2): Upgrade `vm2` module to patch a security vulnerability
- [v208.3.50](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.50): fix(blob-storage): Fix blob storage download logic to await the file before streaming it
- [v208.3.49](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.49): fix(routing): Fix `routing` indexing behavior that breaks CLI tasks when `routing.indexing.enabled` is enabled without `worker` role
- [v208.3.48](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.48): fix: log invalid metadata type in contentType[].publicationIndex config
- [v208.3.47](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.47): fix(security): Fix security vulnerabilities from `xml2js` and `vm2`
- [v208.3.46](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.46): fix(blob-storage): Azure Blob Storage config Schema validation didn't include custom `computeKey()` function
- [v208.3.45](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.45): fix: extend airship log
- [v208.3.44](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.44): fix(link-directive): Include `target` property to LinkDirective schema
- [v208.3.43](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.43): chore: Add a comment about elasticsearch version conflicts in the delete_by_query call
- [v208.3.42](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.42): fix(sort): correctly support arrays
- [v208.3.41](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.41): fix(redis): Coerce strings to numbers. There was an inconsistency with some integers where `tonumber('0')` fails as it requires a base with that.
- [v208.3.40](https://github.com/livingdocsIO/livingdocs-server/releases/tag/v208.3.40): fix(redis): Add breaking change message and code for unsupported redis