# Changelog 2026

:::info Open Source Changelogs
For repositories and plugins that are open source, please check out the respective changelogs in the [cap-js organization](https://github.com/cap-js) and the [CAP Community](https://github.com/cap-js-community).
:::

<style scoped >
  em { font-style:normal; font-weight: 500 }
  em:after { content:" —" }
  li { margin: 5px 0; }
</style>

## June 2026

### Added {#jun-26-added}

- _[cds-dk@10.0.1]_ `cds add event-mesh` and `cds add event-mesh-shared` set up configuration and deployment descriptors for Event Mesh of SAP Integration Suite.
- _[cds-dk@10.0.1]_ `cds upgrade` now detects Java/Spring Boot migration issues and integrates OpenRewrite for automated fixes via `--fix`.
- _[cds-dk@10.0.1]_ `cds upgrade --report` writes `report.md` and `report.yaml` to `.cds-upgrade/` for AI agent and human consumption.
- _[cds-dk@10.0.1]_ `cds upgrade` groups findings by capire section with links to the migration guide.
- _[cds-dk@10.0.0]_ `cds upgrade` analyzes project code and configuration for CDS 10 compatibility issues.
- _[cds-dk@10.0.0]_ `cds add react|vue` without `--into` scaffolds the Vite app directly into `app/`; `cds watch` mounts it at `/`.
- _[cds-dk@10.0.0]_ `cds add portal` uses the `sapse/application-content-deployer-buildpack` for Kyma to simplify HTML5 repo content and SAP BTP Portal service deployment.
- _[cds-dk@10.0.0]_ `cds add ai` adds out-of-the-box AI integration with `@cap-js/ai` via the SAP BTP AI Core service.
- _[cds-dk@10.0.0]_ `cds debug` warns about `http` health checks on Cloud Foundry that would kill the container while paused at a breakpoint.
- _[cds-compiler@7.0.1]_ **compiler:** Special property `$includeAfter` is put into a CSN of flavor `gensrc`/`xtended` to preserve the original
  element order for entities and other structures with `includes` added via an `extend` statement.
- _[cds-compiler@7.0.1]_ **sql:** Default values from structures with a single element are propagated to the flattened leaf element.
- _[cds-compiler@7.0.1]_ **odata:** Default values from structures with a single element are propagated to the flattened leaf element.
- _[cds.java@5.0.0]_ The `add` goal of the `cds-maven-plugin` now generates a `pom.xml` for Maven modules exported via `cds export`.
- _[cds.java@5.0.0]_ The `generate` goal of the `cds-maven-plugin` has a new option `generateClasses` to generate static implementations for accessor interfaces.
- _[cds.java@5.0.0]_ The module `cds-services-code-generator` replaces `cds4j-codegen`.
- _[cds.java@5.0.0]_ Introduced `ContainerDeploymentService` in `cds-feature-mt` as Beta to support additional frameworks for schema evolution in non-sidecar scenarios.
- _[cds.java@5.0.0]_ Support "inline aggregate" expressions in OData v4, e.g. `$apply=aggregate(Sales(amount mul product/taxRate with sum as Tax))`
- _[cds.java@4.9.1]_ Support usage of custom functions in dynamic queries on SQLite with MT.
- _[cds.java@4.9.1]_ Remote OData v4 services now support `$count` in `$expand()`.
- _[cds.java@4.9.1]_ Logs for 401 errors in Remote OData services now include the value of the `www-authenticate` header, if available.
- _[cds.java@4.9.1]_ Support `onBehalfOf` configuration for IAS app-to-app destinations, allowing control over the authentication strategy (`currentUser`, `systemUser`, `systemUserProvider`) when calling remote APIs through destinations with `cloudsdk.ias-dependency-name`.
- _[cds.java@4.9.1]_ Added `cds.sql.search.localized` with option `view` as replacement for deprecated `cds.sql.search.mode`.
- _[cds4j@5.0.0]_ Extend `CQL.vector_embedding` to accept text as String.
- _[cds4j@5.0.0]_ Support type propagation for `cosineSimilarity` and `l2Distance`.
- _[cds4j@5.0.0]_ Support calculation of aggregates for hierarchies.
- _[cds4j@5.0.0]_ Support filters through to-one associations into `cds.Map` elements.
- _[cds4j@5.0.0]_ Method `CdsStructuredType.elements(Predicate filter)` to get a filtered stream of elements.
- _[cds4j@5.0.0]_ Emulate SAP HANA SCORE search-syntax on other databases.
- _[cds4j@5.0.0]_ SAP HANA:
  + improve search of UUIDs and fuzzy search in large strings.
  + allow fuzzy search in hierarchy queries.
- _[cds4j@5.0.0]_ Removed Beta from CdsJsonConverter
- _[cds4j@5.0.0]_ Improved performance of large deep insert statements
- _[cds@10.0.2]_ Event Queues: Support for 6-field cron (with seconds)
- _[cds@10.0.1]_ Support for SAP Integration Suite Event Mesh (EMIS) via messaging kinds `event-mesh` and `event-mesh-shared` (beta)
  + In contrast to SAP Event Mesh, multitenancy is out of scope!
- _[cds@10.0.0]_ New annotation `@cds.minify: false` allows to avoid minification of definitions that would otherwise be removed from the model. For example, that would happen to types which are not used anywhere in the model.
- _[cds@10.0.0]_ UCL: Support for integration update operations (`add`, `remove`, `modify`, `rotate`) for tenant mapping notifications.
- _[cds@10.0.0]_ UCL: Accept mTLS certificate from `x-forwarded-client-cert` (XFCC) header for Kubernetes/Istio/Envoy environments, in addition to the existing Cloud Foundry HAProxy headers.
- _[cds@10.0.0]_ Compatibility flag `cds.env.features.compat_srv_getters` (default: `false`) to opt into the deprecated function-call API for `srv.entities`, `srv.events`, `srv.types`, and `srv.actions`. This flag will be removed with cds^11.
- _[cds@10.0.0]_ Mark all CSN `val`s with `param: false`
- _[cds@10.0.0]_ For `CREATE`, `UPDATE`, `UPSERT`, and `DELETE` requests, the generic CRUD handler now consistently returns arrays carrying an `.affected` property with the number of affected rows (instead of `req.data`, or — for `DELETE` — the affected count itself).
  + Opt-out via `cds.env.features.legacy_srv_results: true`. This flag will be removed with cds^11.
- _[cds@10.0.0]_ `redis-messaging`: Support for credentials in GCP-based regions (adds private CA)
- _[cds-mtxs@3.9.4]_ `getCsn` now sets `meta.extended` to `true` or `false` on the returned CSN, indicating whether tenant extensions were applied. If `meta.extended` is set to `false`, the deployment is using the precompiled HANA artifacts instead of running another HANA build.

### Changed {#jun-26-changed}

- _[cds-dk@10.0.1]_ `@sap/cds-dk` now comes with `bundleDependencies` for reproducible installs.  This is a replacement for the `npm-shrinkwrap.json` that is no longer supported by NPM 12 and higher.
- _[cds-dk@10.0.1]_ `cds init` no longer assumes `--nodejs` when running in SAP Business Application Studio.
- _[cds-dk@10.0.1]_ `cds init` no longer omits the `.vscode` folder when running in SAP Business Application Studio.
- _[cds-dk@10.0.1]_ `cds init/add --nodejs` now creates ESM projects by default.  For CommonJS projects, use `cds init --add cjs`.
- _[cds-dk@10.0.1]_ `cds add data` no longer creates random strings for fields annotated with `@assert.format`.
- _[cds-dk@10.0.1]_ `cds add ias` does not use the `HTML5.` prefix for HTML5 repo settings.
- _[cds-dk@10.0.1]_ `cds add node` now adds a devDependency to `@cap-js/sqlite@^3`
- _[cds-dk@10.0.1]_ `cds upgrade` now produces concise CLI output (count + title per rule) and a structured report with capire-aligned sections.
- _[cds-dk@10.0.0]_ `cds add` and `cds build` create `engines` fields using caret dependencies of LTS Node.js versions, such as `^24`.
- _[cds-dk@10.0.0]_ `cds version` now always prints entries in a new formatting, even in Java projects and when running in BAS. For a stable output that can be parsed by scripts, use `--json`.
- _[cds-dk@10.0.0]_ `cds add hana` does not generate _db/undeploy.json_ any more.
- _[cds-dk@10.0.0]_ `cds build --for hana` generates _gen/db/undeploy.json_, merging an existing _db/undeploy.json_ if present.
- _[cds-compiler@7.0.1]_ **compiler:**
  + Messages reported by compiler backends for non-applied `annotate` statements now mention the original file location if that is unique.
  + The message IDs and texts for undefined references have been consolidated.
- _[cds-compiler@7.0.1]_ **odata:**
  + Non-spec compliant simple identifiers in OData V2 now lead to a warning.
  + Avoid duplicate or incorrect warnings for value help shortcut.
- _[cds-compiler@7.0.1]_ **sql:**
  + Performance of the SQL backend has been improved: wildcard `*` in views and projections is only expanded lazily.
  + No errors are reported anymore for non-persisted entities, as they are irrelevant for database deployment
    (for the message IDs `type-missing-argument`, `type-unexpected-argument`, `ref-unsupported-type`, and `ref-unexpected-args`).
- _[cds.java@5.0.0]_ The minimum required JDK for CAP Java is 21.
- _[cds.java@5.0.0]_ The OpenRewrite recipes in `cds-services-recipes` now use the consolidated package namespace `com.sap.cds.services.migrations` for all recipe names and Java classes (previously mixed between `.recipes` and `.migrations`).
- _[cds.java@5.0.0]_ Renamed `cds.mcp.autoConfig` to `cds.mcp.autoWired`.
- _[cds.java@5.0.0]_ Renamed `cds.taskScheduler.enabled` to `cds.outbox.persistent.scheduler.enabled`.
- _[cds.java@5.0.0]_ Removed deprecated properties `eventContext` and `cqnService` from goal `generate` of the `cds-maven-plugin`.
- _[cds.java@5.0.0]_ The properties `cds.outbox.inMemory.enabled` and `cds.outbox.inMemory.emitDuringChangeSetContext` have been deprecated.
- _[cds.java@5.0.0]_ ~~The default search mode for OData V2 and V4 has been changed to `pass-through`. To restore the old behavior, set `cds.odataV2.search.mode` and `cds.odataV4.search.mode` to `odata-lenient`.~~
- _[cds.java@5.0.0]_ The default value for property `cds.errors.preferServiceException` has been changed from `false` to `true`.
- _[cds.java@5.0.0]_ The default value for property `cds.multiTenancy.serviceManager.cacheRefreshInterval` has been changed from `20` to `60` minutes.
- _[cds.java@5.0.0]_ ~~The number of max requests in a OData V2 batch request has been limited to `10`. To restore the old behavior, set `cds.odataV2.batch.maxRequest` to `-1`.~~
- _[cds.java@5.0.0]_ The default value for property `cds.persistence.changeSet.enforceTransactional` has been changed from `true` to `false`.
- _[cds.java@5.0.0]_ Outboxes for services are now by default unordered. To restore the old behavior, set `cds.outbox.services.<key>.ordered` to `true`.
- _[cds.java@5.0.0]_ The default value for property `cds.query.restrictions.enabled` has been changed from `false` to `true`.
- _[cds.java@5.0.0]_ The default value for property `cds.query.deep-entity-readonly.enabled` has been changed from `false` to `true`.
- _[cds.java@5.0.0]_ The default value for property `cds.sql.toOnePath.mode` has been changed from `always-join` to `optimize`.
- _[cds.java@5.0.0]_ The default value for property `cds.sql.hana.search.fuzzy` has been changed from `false` to `true`.
- _[cds.java@5.0.0]_ The deprecated property `cds.sql.hana.optimizationMode` has been removed. 
- _[cds.java@5.0.0]_ Removed deprecated `Exits` classes from `cds-feature-mt`.
- _[cds.java@5.0.0]_ Changed default JDK in `cds-services-archetype` for new CAP Java projects to JDK 25.
- _[cds.java@5.0.0]_ Removed deprecated goal `install-cdsdk` from `cds-maven-plugin`.
- _[cds.java@5.0.0]_ The default authentication mode is now model-relaxed for local development. In production environments, the secure-by-default behavior is preserved by automatically applying model-strict.
- _[cds.java@5.0.0]_ Changed the default Node.js version in the `cds-maven-plugin` to current LTS 24.x.
- _[cds.java@5.0.0]_ Bumped minimum required Maven version of the `cds-maven-plugin` to 3.9.10.
- _[cds.java@5.0.0]_ Removed Maven modules `repackaged/odata-v2-lib` and `repackaged/odata-v4-lib`.
- _[cds.java@5.0.0]_ OData v2: log forbidden char in DEBUG level.
- _[cds.java@5.0.0]_ Removed `cds.odataV2.searchMode` and `cds.odataV4.searchMode` and introduced `cds.sql.search.syntax` with options `HANA` (default) and `ODATA`.
- _[cds.java@5.0.0]_ Removed `cds.sql.search.mode` and introduced `cds.sql.search.localized` with option `view`; `generic` mode is not supported anymore.
- _[cds4j@5.0.0]_ Removed support for SAP HANA JSON Document Store.
- _[cds4j@5.0.0]_ Removed modules `cds4j-codegen` and `cds4j-maven-plugin`.
- _[cds4j@5.0.0]_ Removed support for search via the `CONTAINS` function in HANA legacy mode.
- _[cds4j@5.0.0]_ Values contained in an annotation with expression value are now treated as constants.
- _[cds4j@5.0.0]_ Removed config option `cds.sql.collate`. Collation now always applies to all string elements (previously the `"localized-strings"` value restricted collation to localized elements only).
- _[cds4j@5.0.0]_ Removed deprecated `exists(Select<?> subQuery)` method from `Modifier`.
- _[cds4j@5.0.0]_ Removed deprecated `isAbstract` method in `CdsEntity`.
- _[cds4j@5.0.0]_ Removed deprecated `CqnPassThroughSearchPredicate`, instead use `CqnSearchStringPredicate`.
- _[cds4j@5.0.0]_ Removed higher auto-weighting of key element in fuzzy search.
- _[cds4j@5.0.0]_ Removed `CqnTransformation.getKind()` and the `CqnTransformation.Kind` enum (beta)
- _[cds4j@5.0.0]_ Replaced config option `cds.sql.search.mode: localized-view` with `cds.sql.search.localized: view`; `generic` mode is not supported anymore.
- _[cds@10.0.0]_ Node.js 22 is now the minimum required Node.js version. Version 20 is no longer supported.
- _[cds@10.0.0]_ `cds.features.compat_texts_entities` is changed to _false_ and will be removed in an upcoming version.
- _[cds@10.0.0]_ `cds.features.ieee754compatible` is changed to _true_ to return strings for Decimal/Int64 for all db services.
- _[cds@10.0.0]_ `cds.i18n.fatjson` is changed to _false_ and will be removed in an upcoming version.
- _[cds@10.0.0]_ Advanced Event Queue Scheduling via Scheduling Service on by default (if both `db` and `queue` are available)
- _[cds@10.0.0]_ `cds.fiori.direct_crud` is split into the two feature flags `cds.fiori.bypass_draft` and `cds.fiori.draft_new_action`
  +  `cds.fiori.bypass_draft` allows the modification of active instances. It is now enabled by default
  +  `cds.fiori.draft_new_action` introduces the `draftNew` action to create new drafts. It is still disabled by default (as before)
- _[cds@10.0.0]_ REST adapter: bulk `POST` of multiple entries is now dispatched as a single `INSERT` instead of one dispatch per entry.
  + Set `cds.env.features.bulk_inserts_via_rest: false` to revert to the legacy per-entry dispatch. This flag will be removed with cds^11.
- _[cds@10.0.0]_ `req.query` is deprecated for bound actions/ functions and will be removed in cds^11. Use `req.subject` instead.
- _[cds@10.0.0]_ Generic Handlers: Static `handle_*` methods that registered preflight handlers were replaced by non-static `handle_*` functions that are called before `handle`
  + Fully backwards-compatible: In case of a custom static `handle_*` method that overrides a built-in one, the respective `handle_*` function is not called
- _[cds@10.0.0]_ Updated default configuration for `persistent-queue`:
  + `legacyLocking` default changed from `true` to `false`
  + `maxAttempts` default reduced from `20` to `10`
  + `storeLastError` option removed (now always `true` implicitly)
- _[cds@10.0.0]_ Protocol adapters are now real classes, The `.router` contains now the protocol router (previously it was returned from the constructor itself).
- _[cds@10.0.0]_ `cds.validate` now return the error code in `.code` instead of `.message`.
- _[cds@10.0.0]_ Errors are now logged in default language instead of the plain developer texts.
- _[cds@10.0.0]_ OData parser accepts `/^[0-9a-z-]{1,36}$/i` as UUID
- _[cds@10.0.0]_ Flows: `@from` is checked in parallel to any other before handler
- _[cds@10.0.0]_ RemoteService: Clearing keys from payload (`req.data`) is now done in generic `on` handler instead of an extra `before` handler
- _[cds@10.0.0]_ Undocumented `srv.reject(event, path)` registers a standard `before` handler
- _[cds@10.0.0]_ **[internal]** Refactored core service implementation (`srv-dispatch`, `srv-handlers`, `cds.Service`) for improved code clarity and maintainability
- _[cds-mtxs@4.0.1]_ Migration from `@sap/cds-mtx` has been removed.
- _[cds-mtxs@4.0.1]_ Calling endpoint `POST /-/cds/sms-provisioning/upgrade` now requires more permissions.
- _[cds-mtxs@4.0.1]_ Annotation `@Common.FieldControl` is now also blocked for extensions.
- _[cds-mtxs@4.0.1]_ Annotations `@Capabilities.*` are now also blocked for extensions.
- _[cds-mtxs@4.0.1]_ The MTX sidecar now logs a warning if `cds.sql` is configured differently in both the project root and the sidecar. By setting `cds.env.requires['cds.xt.ModelProviderService']['use-root-sql-config'] === true`,
you can enforce the configuration of the project root.
- _[cds-mtxs@3.9.4]_ In case of multiple instances on Cloud Foundry, the initial creation of the `t0` tenant is only done by instance 0.
- _[cds-mtxs@3.9.4]_ Service Broker errors are logged with more detailed descriptions in the Service Manager client.

### Fixed {#jun-26-fixed}

- _[cds-dk@10.0.1]_ `cds subscribe`, `cds unsubscribe`, and `cds upgrade` default to mock credentials on localhost, removing the need for explicit `-u user:password`.
- _[cds-dk@10.0.1]_ `cds bind` will throw an error when `--to` is specified without providing a path.
- _[cds-dk@10.0.1]_ `cds build --for hana` now correctly relocates generated _.hdbsynonymconfig_ files containing `*.configure` properties (e.g. `schema.configure`).
- _[cds-dk@10.0.1]_ `cds add html5-repo` and `cds add app-frontend` detect UI5 modules per app via each app's `@ui5/cli` devDependency, instead of relying on a project-wide flag.
- _[cds-dk@10.0.1]_ Removed undocumented `dp-cli` data product import method. Use `dp-metadata` repository import or direct JSON file import instead.
- _[cds-dk@10.0.1]_ `cds add html5-repo`, `cds add app-frontend`, and `cds add typescript` now add `ui5-tooling-transpile-task` to existing `ui5.yaml` for TypeScript projects.
- _[cds-dk@10.0.1]_ `cds version` no longer fails if `@sap/cds` < 9.8 is installed.
- _[cds-dk@10.0.1]_ `cds build` no longer fails with `EEXIST` when the MTX sidecar has its own `.npmrc`, and dereferences symlinks during copy so `gen/` is self-contained and portable.
- _[cds-dk@10.0.1]_ `cds upgrade` no longer fails when ast-grep exits with non-zero on certain file patterns.
- _[cds-dk@10.0.1]_ Removed undocumented `dp-cli` data product import method. Use `dp-metadata` repository import or direct JSON file import instead.
- _[cds-dk@10.0.1]_ `cds import` for OData v2 now can import annotations.
- _[cds-dk@10.0.1]_ `cds lint` no longer silently swallows any error.
- _[cds-dk@10.0.0]_ `cds bind` now correctly handles CF org, space, and service instance names containing commas.
- _[cds-dk@10.0.0]_ `cds up` deploys to Kyma with `helm --atomic`, so failed deployments no longer block the next run.
- _[cds-dk@10.0.0]_ `cds add vue` uses correct placeholder values for book and author in `App.vue`.
- _[cds-dk@10.0.0]_ `cds build --production` now also bundles _message.properties_ files from plugins.
- _[cds-dk@10.0.0]_ `cds push` provides support for CAP plugins.
- _[cds-dk@10.0.0]_ `cds add dynatrace` in combination with `nodejs` makes sure the `nodejs` MTA changes are correctly applied.
- _[cds-dk@10.0.0]_ The `NO_COLOR` environment variable also accepts values other than `true`.
- _[cds-dk@9.9.3]_ `cds import` for OData v2 now can import annotations.
- _[cds-dk@9.9.3]_ `cds watch` on Windows no longer restarts the server for read-only file opens (antivirus, Windows Search indexer, TypeScript loaders like tsx). A mtime guard now confirms a file was actually written before emitting a `change` event.
- _[cds-dk@8.9.13]_ CVE-2025-15284: update `express` to fix vulnerability with `qs` <6.14.1
- _[eslint-plugin-cds@4.2.4]_ `auth-valid-restrict-grant` no longer crashes on JOINs with three or more tables.
- _[cds-compiler@7.0.1]_ **sql:**
  + An error is reported for subqueries that select only virtual elements. This avoids late errors during database deployment.
  + Parameter references in nested inlines are now handled correctly.
- _[cds-compiler@6.9.3]_ **api:** New compiler option `noErrorForUnknownAnnotateTarget` downgrades errors to warnings
for `annotate` statements with security-relevant annotations (`@restrict`, `@requires`, `@ams`)
whose target does not exist.
- _[cds.java@5.0.0]_ OData error targets that reference a plain composition name (e.g. `values/amount`) are now automatically rewritten to the service-layer infix-filter alias (e.g. `initialSlice/amount`), so that Fiori clients can correctly resolve the target path for inline error highlighting.
- _[cds.java@5.0.0]_ SELECT from SELECT queries (subqueries in the FROM clause) no longer fail when columns of inner queries are aliased and used in the outer subquery.
- _[cds.java@4.9.1]_ Content-Disposition headers now use RFC 5987 `filename*` encoding for non-ASCII filenames, ensuring correct display in browsers for files with special characters.
- _[cds.java@4.9.1]_ Empty `If-Match` and `If-None-Match` headers are now treated as invalid and rejected with `421` error code.
- _[cds.java@4.9.1]_ Enhanced resiliency to `cds-feature-kafka` when registering a consumer group ID and topic registration.
- _[cds4j@5.0.0]_ Fixed a bug in `groupBy` transformation for `@odata.draft.enabled` entity, causing a `ClassCastException`, when `IsActiveEntity` or `HasActiveEntity` are used as groups.
- _[cds4j@5.0.0]_ Decimal retrieved from SQLite are truncated to adhere to the declared scale.
- _[cds4j@5.0.0]_ Fixed a bug in optimized to-one expands where `null` values in nested rows were not included in results.
- _[cds@10.0.2]_ `cds.env` omits default values from plugins if requested
- _[cds@10.0.2]_ `$filter=<nav> eq/ne/gt/lt/ge/le <value>` on collection-valued navigation properties now returns 400 instead of crashing with 500
- _[cds@10.0.2]_ `$filter=<nav> gt/lt/ge/le <value>` on single-valued navigation properties now returns 400 instead of crashing with 500
- _[cds@10.0.2]_ If `cds.env.query.limit.max` is increased beyond the default of 1000 and no explicit `cds.env.query.limit.default` is set, the default page size now follows `max` instead of staying capped at 1000.
- _[cds@10.0.2]_ Propagate `DraftUUID` et al. to nested children on deep PATCH
- _[cds@10.0.2]_ Missing `username`/`password` on `BasicAuthentication` destinations in the native-fetch remote client now default to empty strings
- _[cds@10.0.1]_ Do not crash for app configurations or tests setting `cds.requires` to a nullish value.
- _[cds@10.0.1]_ A custom `cds.env.protocols.odata-v4.path` is now correctly applied to services using the `odata` protocol shortcut (or no explicit `@protocol` annotation).
- _[cds@10.0.1]_ `$count` is not allowed on service root or single instances
- _[cds@10.0.1]_ `$batch` URLs with sub-sequent segments will now be parsed as usual URLs
- _[cds@10.0.1]_ Gaps in CSRF token handling of native-fetch client
- _[cds@10.0.1]_ `srv.schedule()` always creates singleton tasks
- _[cds@10.0.1]_ Initial timestamp of scheduled task with cron expression
- _[cds@10.0.0]_ The prebuilt edmx were erroneously bypassed and recompiled at runtime in multitenant apps
- _[cds@10.0.0]_ Sending a plain object instead of an array for a `Composition of many` now correctly returns 400
- _[cds@10.0.0]_ Adding clauses on `cds.clone`d queries behaved inconsistently.
  For example:
  ```js
  let q1 = SELECT.from`Books`.where`ID>1`.orderBy`genre.name`
  let q2 = cds.ql.clone(q1).where`stock>9`.orderBy`title`
  ```
  Before, the `where` clause was appended, but `orderBy` was overridden instead of appended.
  With the fix, both `where` and `orderBy` are appended, so that q2 is effectively:
  ```sql
  SELECT from Books where ID>1 and stock>9 order by genre.name, title
  ```
  Set `cds.features.compat_clone_appends = true` to revert to the erroneous former behavior. Note though this will be removed in a future release.
- _[cds@10.0.0]_ `$expand=*` with query options (e.g. `$expand=*($expand=...)`) no longer crashes the server but returns 400
- _[cds@10.0.0]_ `compile.for.nodejs` did not consistently ignore `@Common.Text` annotations with expression values when deriving `@cds.search` fields
- _[cds@10.0.0]_ `cds.utils.inspect` respects custom options again
- _[cds@10.0.0]_ Erroneously prefixed paths being applied to database service handlers during handler registration
- _[cds@10.0.0]_ `.texts` entities incorrectly appearing in `cds.entities` / `srv.entities` when `compat_texts_entities` is not enabled
- _[cds@10.0.0]_ Race condition between async and sync handlers rejecting errors simultaneously under `Promise.all` — sync handlers are now consistently wrapped as async during registration
- _[cds@10.0.0]_ Query options for bound actions/ functions (e.g., `$select`) are validated against the return type of said bound action/ function
- _[cds@9.9.2]_ `srv.model` propagation in extensibility scenarios
- _[cds@9.9.2]_ Restored `err.target:'in'` during draft activation with `cds.fiori.draft_messages=false` to avoid the `MULTIPLE_ERRORS` popup
- _[cds@9.9.2]_ `resolveView` prioritizes the original foreign key `parent_ID` if exposed multiple times, e.g., through `*, parent.ID as parentId`
- _[cds-mtxs@4.0.1]_ Default value 3 for `cds.requires.multitenancy.jobs.clusterSize` is now effective for upgrade. When using HANA TMS v2, the default for `clusterSize` is set to 1.
- _[cds-mtxs@4.0.1]_ Parallel single-tenant upgrades no longer fail with `tar: Cannot open: File exists` when extensibility is disabled.
- _[cds-mtxs@3.9.4]_ Command `cds-mtx upgrade '*'` now also works with setting `cds.requires.multitenancy.jobs.clusterSize` > 1.
- _[cds-mtxs@3.9.4]_ Clients for multiple instances of the Service Manager no longer interfere with each other.
- _[cds-mtxs@3.9.4]_ Retry handling has been improved for the HANA TMS v2 client.

### Removed {#jun-26-removed}

- _[cds-dk@10.0.0]_ `cds extend` is removed as it was only kept for `@sap/cds-mtx` compatibility.
- _[cds-dk@10.0.0]_ `cds migrate` is removed as `@sap/cds-mtx` to `@sap/cds-mtxs` migration is now effectively complete.
- _[cds-dk@10.0.0]_ `cds login`, `cds logout`, `cds pull`, `cds push`: the project-folder argument and the `--directory` (`-d`) option are removed; run these commands from the project directory instead.
- _[cds.java@5.0.0]_ Removed deprecated property `cds.errors.combined`. Error messages are now combined by default.
- _[cds@10.0.0]_ `cds.compile.to.hdbcds()` — use `cds.compile.to.hdbtable()` instead
- _[cds@10.0.0]_ `cds.context.http.req.authInfo` - use `cds.context.user.authInfo` instead
- _[cds@10.0.0]_ Legacy compat option `cds.compile.to.hdbcds()` — use `cds.compile.to.hdbtable()` instead.
- _[cds@10.0.0]_ Legacy compat option `cds.User.tokenInfo` - Use `cds.User.authInfo.token` instead.
- _[cds@10.0.0]_ Legacy compat flag for `ASSERT_NOT_NULL` error code of `@mandatory` validation - use `ASSERT_MANDATORY` ass `code` instead.
- _[cds@10.0.0]_ Legacy compat flag `cds.features.compat_save_drafts` → use `['CREATE', 'UPDATE', 'UPSERT']` instead of the `SAVE` event for `.drafts`
- _[cds@10.0.0]_ Legacy compat flag `cds.features.consistent_params=false` is now finally removed — adapt the implementation instead.
- _[cds@10.0.0]_ Legacy compat flag `cds.features.odata_metadata_compat` is now finally removed — adapt the implementation instead.
- _[cds@10.0.0]_ Legacy compat flag `cds.sql.transitive_localized_views` is now finally removed — no action necessary.
- _[cds@10.0.0]_ Legacy compat flag `async_handler_compat` feature flag and the associated compat wrapping logic from `srv-handlers`; sync handlers are now always wrapped unconditionally.
- _[cds@10.0.0]_ `DISCARD` event as a special-cased branch — it is now mapped to `CANCEL` via the standard events alias table
- _[cds@10.0.0]_ Internal function `getDBTable` used by old cds-dbs versions
- _[cds@10.0.0]_ Internal `_initial` phase
- _[cds@10.0.0]_ Removed support for `async activate()` functions returned from `cds-plugin.js` modules, which was never documented, and deprecated since Oct 2023. If you need to run async code during plugin loading, just return a promise as default export.

## May 2026

### Added {#may-26-added}

- _[cds-mtxs@3.9.3]_ Error on missing extension table if extensibility is enabled and `cds.requires['cds.xt.ExtensibilityService']['error-on-missing-extension-table']` is set.

### Changed {#may-26-changed}

- _[cds-dk@9.9.1]_ `cds add lint` now adds a dependency on `eslint@10`, instead of `eslint@9`.

### Fixed {#may-26-fixed}

- _[cds-dk@9.9.2]_ Dependency updates, e.g. for CVE-2026-8723.
- _[cds-dk@9.9.2]_ `cds build --for mtx-sidecar` warns if `resources.tgz` was not created, hinting to run `npm add -D tar` as a workaround on Windows.
- _[cds-dk@9.9.1]_ `cds add test` now uses version 1 of `@cap-js/cds-test`.
- _[cds-dk@9.9.1]_ `cds add vue` uses correct placeholder values for book and author in `App.vue`.
- _[cds-dk@9.9.1]_ `cds debug` support for latest Chrome versions.
- _[cds-dk@9.9.1]_ `cds watch` runs ESM projects with `tsx` again, so that `.js` import are rewritten to `.ts`. This got broken in 9.9.0, but used to work in 9.8.
- _[cds-dk@9.9.1]_ `cds add` only adds the `event-mesh.json` if a facet requiring the file is run.
- _[eslint-plugin-cds@4.2.3]_ Don't fail if the `tree-sitter` dependency cannot be installed. This might happen in WebContainer environments where native modules cannot be loaded.
- _[eslint-plugin-cds@4.2.2]_ `auth-valid-restrict-grant` now also considers inherited actions.
- _[cds-compiler@6.9.2]_ **api:** when the environment variable `CDSC_TRACE_API` is set,
  the compiler writes a trace for calls of API functions;
  it now has more information, and also traces the exit of the API function.
- _[cds-compiler@6.9.1]_ **compiler:**
  + make an element added via `extend` correctly shadow an element from an include
  + do not issue a warning for a correct use of `$projection`
- _[cds-compiler@6.9.1]_ **odata:**
  + do not generate wrong ReferentialConstraints for unmanaged Composition without a partner
  + render Partner attribute on forward association correctly
- _[cds@9.9.1]_ `cds.features.compat_texts_entities` erroneously influenced the OData service document
- _[cds@9.9.1]_ Newly introduced `EXPAND_MAX_LEVELS_EXCEEDED` errors did not have a default message
- _[cds@9.9.1]_ Incorrect resolving of parameter aliases for OData functions
- _[cds@9.9.1]_ OData Batch: Call error middlewares during error serialization
- _[cds@9.9.1]_ `cds.features.count_as_string` in lean draft
- _[cds-mtxs@3.9.2]_ When reusing HANA tenants with HANA TMS v2, the HANA tenant labels are no longer lost.
- _[cds-mtxs@3.9.2]_ `/-/cds/model-provider/getCsn` for non-existing tenants returns a model again instead of throwing an error.
- _[cds-mtxs@3.9.1]_ More robust behavior of the `cds.xt.serviceManager` API if no Service Manager or HANA TMS credentials are configured.
- _[cds-mtxs@3.9.1]_ Synchronous SMS subscription now returns the application url with the correct JSON format.
- _[cds-mtxs@3.9.1]_ Transient database errors in ETag determination are no longer silently swallowed.
- _[cds-mtxs@3.9.1]_ Undocumented programmatic `cds-mtx` API usage does not serve MTX services multiple times.
- _[cds-mtxs@3.9.1]_ It is now possible to register on the `bootstrap` event in the `cli.js` file to handle that event when running the `cds-mtx` command.
- _[cds-mtxs@3.9.1]_ Parallel calls of the database upgrade API are now more robust against race conditions.
- _[cds-mtxs@3.9.1]_ MTX sidecar no longer crashes when triggering an upgrade and legacy tenant `__META__` still exists.
- _[cds-mtxs@3.9.1]_ Database connection errors with `status` 404 throw without retries.

## April 2026

### Added {#apr-26-added}

- _[cds-dk@9.9.0]_ `cds build` routes `.hdbsynonymconfig` files with `*.configure` properties to the `cfg/` folder for HDI template substitution.
- _[cds-dk@9.9.0]_ `cds deploy` also supports `-b` as a shortcut for `--resolve-bindings`.
- _[cds-dk@9.9.0]_ `cds import` now supports `--resolve-bindings`.
- _[vscode-cds@9.9.0]_ WorkspaceSymbols API: `/x` to get index flags
- _[vscode-cds@9.9.0]_ WorkspaceSymbols: also include models defined in build tasks
- _[cds-compiler@6.9.0]_ **compiler:**
  - add support for extending views/projections with several SQL clauses:
    `where`, `group by`, `having`, `order by`, `limit`
  - allow extending derived enum types/elements by adding enum symbols
  - inside `extend … with enum {…}`, it is now possible to use `extend existingEnumSymbol with @Anno`,
    like it is already possible inside `extend … with {…}`
  - when the new options `v7KeyPropagation` is set, the propagation of the `key` property in queries is simplified,
    and the `key` property is not propagated when including structures into types
- _[cds-compiler@6.9.0]_ **odata:** set `meta.compilerCsnFlavor` in the OData transformed CSN
- _[cds-compiler@6.9.0]_ **seal**: set `meta.compilerCsnFlavor` in the SEAL transformed CSN
- _[cds-compiler@6.9.0]_ **effective:** set `meta.compilerCsnFlavor` in the effective CSN
- _[cds-compiler@6.9.0]_ **sql:**
  - set `meta.compilerCsnFlavor` in SQL transformed CSN
  - allow single-leafed structures within a `list` on the left-hand side of the `IN` operator.
    For example `(author, struct) in (...)` becomes `(author_ID, struct_leaf) in (...)`.
  - support `cds.Vector` on Postgres and H2
- _[cds.java@4.9.0]_ The i18n message key used with `@assert` is now also used as error code on resulting validation errors.
- _[cds.java@4.9.0]_ Support OData v4 [Date and Time](https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_DateandTimeFunctions) functions: `date`, `time`.
- _[cds.java@4.9.0]_ Protocol annotations like `@odata`, `@hcql`, etc. now also support specifying the path for that protocol, e.g. `@odata: 'browse'`.
- _[cds.java@4.9.0]_ The property `cds.protocols.defaults` now lets you specify the list of default protocols each ApplicationService is serving. By default an ApplicationService serves protocols "odata-v2" and "odata-v4". Value "*" adds all available protocols as default.
- _[cds.java@4.9.0]_ Enabled to opt-in for RFC BAPI transaction commit work & wait, instead of commit work that is executed after each RFC call.
- _[cds.java@4.9.0]_ Added new OpenRewrite recipes for deprecated apis that will be removed with CAP 5.0.
- _[cds.java@4.9.0]_ H2/SQLite: Support vector functions in DDL (beta).
- _[cds4j@4.9.0]_ Support functions to extract date and time components from temporal: `date`, `time`.
- _[cds4j@4.9.0]_ Introduce caching for builder proxies.
- _[cds4j@4.9.0]_ Support for the SAP HANA functions `years_between`, `months_between`, `days_between`, `seconds_between`, and `nano100_between`. The functions are emulated on non-SAP HANA databases.
- _[cds4j@4.9.0]_ SAP HANA:
  - support fallback to non-hex SQL on "HEX enforced but cannot be selected" errors on SAP HANA QRC 1/2026.
  - use native JDBC/ngdbc support for `cds.Vector` in `String` and `float[]` format.
- _[cds4j@4.9.0]_ Support `cds.Vector` on H2, SQLite and PostgreSQL.
- _[cds4j@4.9.0]_ Support `CQL.vector_embedding` on SAP HANA, H2 and SQLite.
- _[cds4j@4.9.0]_ Support `CQL.l2Normalize` on SAP HANA, PostgreSQL, H2 and SQLite. (beta)
- _[cds4j@4.9.0]_ Support selects from pseudo table. (beta)
- _[cds@9.9.0]_ Event Queue Scheduling:
  - Support for `srv.schedule.task(event, data)` to create so-called "singleton tasks" that exist only once as well as `srv.unschedule.task(event)` to remove them again
  - Support for cron expressions as argument for `.every()`, e.g., `.every('*/5 * * * 2')` for "Every 5 minutes, only on Tuesday"
  - Support for `cds.appid` for isolating microservices in shared HDI scenarios
    - The experimental option `targetPrefix` is temporarily kept to allow flushing tasks that rely on it, but will be removed soon
  - Streamlined aggregation of `queued` service effective configuration
- _[cds@9.9.0]_ Advanced Event Queue Scheduling via Scheduling Service (Beta; enable via `cds.requires.scheduling = true`)
  - Efficient leftover processing by maintaining a schedule in `t0` (requires `@sap/cds-mtxs^3.9`)
  - Revised event processing (ongoing)
  - Only applicable with queue kind `persistent-queue` (which is the default)
- _[cds@9.9.0]_ In addition to `.csv` files, and `.json` files, initial data can now also be provided via `.yaml` files
  - Limitation: Only supported in Node.js runtimes, so far, not yet by `cds build` for Java, and for production deployments to HANA
- _[cds@9.9.0]_ Support `$select` and `$expand` from draft actions: `draftNew`, `draftPrepare`, `draftActivate`, and `draftEdit`
- _[cds@9.9.0]_ Enable referencing action request responses in `dependsOn` of subsequent requests in the same batch
- _[cds@9.9.0]_ Import files the ESM way in ESM projects, e.g. to support mocking in Vitest
- _[cds@9.9.0]_ Node.js-native `fetch`-based HTTP client for remote service consumption (beta)
  - Used automatically when `@sap-cloud-sdk/http-client` is not installed or forced via `cds.remote.native_fetch = true`
  - Known limitations:
    - Resolving destinations via the BTP Destination Service is not supported
    - Only basic authentication is supported
- _[cds@9.9.0]_ `cds.infer.elements` now also supports SQL-style casts, wildcard overrides and `excluding` clauses
- _[cds@9.9.0]_ Support for restricting the levels of `$expand` (beta)
  - `@Capabilities.ExpandRestrictions.MaxLevels` defines the maximum allowed depth of an `$expand` starting from the annotated entity
  - Additionally, `@Capabilities.ExpandRestrictions.Expandable: false` is interpreted as `@Capabilities.ExpandRestrictions.MaxLevels: 0`
  - Finally, there is global config option `cds.query.restrictions.expand.maxLevels`
- _[cds@9.9.0]_ Kafka: `cds.requires.messaging.config = { ... }` allows custom Kafka client config for development scenarios
- _[cds-mtxs@3.9.0]_ It is now possible to create additional instances of the internal Service Manager Client or HANA TMS v2 client to access alternative services. Instances can be created using `cds.xt.containerManager.newInstance(serviceCredentials)`.
- _[cds-mtxs@3.9.0]_ Environment variables `APPLICATION_ID`, `APPLICATION_VERSION_INFO`, and `DEPLOY_ID` are now forwarded to the HDI deploy environment.
- _[cds-mtxs@3.9.0]_ Database deployment can be individually disabled for `cds.xt.SmsProvisioningService` or `cds.xt.SaasProvisioningService` for hybrid scenarios. It can be confiured by e. g. `cds.requires['cds.xt.SmsProvisioningService'] = { "subscribe": { "skip-db": true } }`. This is only available for synchronous subscription.
- _[cds-mtxs@3.9.0]_ `cds.outbox.Messages` to model of `t0`.
- _[cds-mtxs@3.9.0]_ Subscription payloads may now include a `custom_label` in the `_.hdi.create` options to attach additional labels to HANA containers and, for the service-manager, also to bindings. Example: `_.hdi.create.custom_label = 'my_key=my_value'`.

### Changed {#apr-26-changed}

- _[cds-dk@9.9.0]_ `cds add html5-repo` creates destinations as part of the app deployer module instead of initial destinations in the destination service.
- _[cds-dk@9.9.0]_ `axios` is removed from `dependencies`.
- _[cds-dk@9.9.0]_ `cds init` no longer generates database-specific extensions (`db/hana/`, `db/sqlite/`) and their profile-based configuration in the sample template.
- _[vscode-cds@9.9.0]_ removed `https-proxy-agent` in favour of native VS Code / fetch proxy handling.
- _[vscode-cds@9.9.0]_ `CAP Release Notes` page shows a lightning bolt logo as dimmed background when loading fails.
- _[vscode-cds@9.9.0]_ Zoom direction in Analyze Dependencies was flipped on macOS to have a more natural UX
- _[cds-compiler@6.9.0]_ **compiler:**
  - add `compilerVersion` to CSN meta
  - issue a warning if a structure in an annotation value would have the same CSN representation as an expression
  - issue warnings for extends on built-in types
  - warn on duplicate members from includes via extend
- _[cds-compiler@6.9.0]_ **odata:**
  - update OData vocabularies: Common, Core, UI
  - using `@readonly` with an expression value on entities or aspects is no longer silently accepted and now produces an error
- _[cds.java@4.9.0]_ `cds-feature-bdc` enforces an allow-list for Formation Type Ids (e.g. `cds.bdc.formationTypeIds`) in production profiles from now on.
- _[cds.java@4.9.0]_ The MTX sidecar health check now uses a configurable timeout instead of a hard-coded 1s limit. Set `cds.multitenancy.health-check.timeout` (type: `Duration`, default: `1s`) to adjust the threshold for your environment.
- _[cds.java@4.9.0]_ The switch `cds.draft.post-active` now defaults to `true`. In case it is set to `false` or not set all POST requests to entities with draftNew action will create a new active instance.
- _[cds.java@4.9.0]_ Improved error handling in `cds-adapter-mcp` to prevent stack traces and internal details from leaking in error responses.
- _[cds4j@4.9.0]_ Path segments for to-one associations no longer contain a filter.
- _[cds@9.9.0]_ I18n keys in `@assert` error messages are now used as error codes. The generic `ASSERT` error key is no longer used if the `message` is not an i18n key.

### Fixed {#apr-26-fixed}

- _[cds-dk@9.9.0]_ `cds add xsuaa --plan broker` does not use plan `application` in approuter scenarios.
- _[cds-dk@9.9.0]_ `cds add postgres` for Kyma no longer adds an invalid `values.yaml` entry for `postgres-db-deployer`.
- _[cds-dk@9.9.0]_ `cds init/add esm` now also fills `package.json` with proper content.
- _[cds-dk@9.9.0]_ `cds deploy --to hana --resolve-bindings` no longer overwrites credentials of all hana-tagged `VCAP_SERVICES` entries with the target container's service key when multiple HDI bindings are present.
- _[cds-dk@9.9.0]_ `cds add data` now adds a newline character at the end of csv files to make appending content easier.
- _[cds-dk@9.8.3]_ Dependency updates, e.g. for CVE-2026-33937.
- _[cds-dk@9.8.3]_ `cds add xsuaa --plan broker` does not use plan `application` in approuter scenarios.
- _[cds-dk@8.9.13]_ CVE-2025-15284: update `express` to fix vulnerability with `qs` <6.14.1
- _[vscode-cds@9.9.0]_ Prevent error when scanning for LSP-restart settings in configuration.
- _[vscode-cds@9.9.0]_ support CDS lookup dirs defined in subfolders e.g. pom.xml (resolve cds env per project root instead of workspace root)
- _[vscode-cds@9.9.0]_ WorkspaceSymbols: NodeJS V8 crashed for very large workspaces
- _[vscode-cds@9.9.0]_ WorkspaceSymbols: filter out symbols from ignored files
- _[vscode-cds@9.9.0]_ add quotes around the binary in the default cds-typer command to support paths with non-alphanumeric characters
- _[cds-compiler@6.9.0]_ **compiler:**
  - don't introduce a strange `cast` property in the CSN for a column with an expand on a to-many association
  - while crawling tokens for LSP, allow extensions without name
- _[cds-compiler@6.9.0]_ **effective:** don't absolutify paths in filters in annotations
- _[cds-compiler@6.9.0]_ **sql:** properly resolve references in annotation values and `on` conditions for a column inside an expand without base reference
- _[cds.java@4.9.0]_ HCQL V2: placeholder `$key` is no longer added to the HCQL request.
- _[cds.java@4.9.0]_ Further improved performance of inactive draft delete during save.
- _[cds.java@4.9.0]_ Fixed a bug, causing tenant-related properties (iss, subDomain) not getting propagated to the new `RequestContext` when calling `systemUser()`.
- _[cds.java@4.9.0]_ `cds-feature-change-tracking` performance is improved when large number of entities are inserted.
- _[cds.java@4.9.0]_ Fixed a bug, causing DraftMessages for composition of one to return invalid message targets.
- _[cds.java@4.9.0]_ Fixed a bug, causing `@Core.MediaType` and `@Core.ContentDisposition.Filename` annotations with expression syntax (e.g., `@Core.MediaType: (mimeType)`) to not resolve correctly after type flattening.
- _[cds4j@4.9.0]_ Fixed constant timestamp values in SQL statements. They are now set in UTC independently of the JVM's time zone.
- _[cds4j@4.9.0]_ Fixed broken SQL if a hierarchy view has a sort order specified by order by.
- _[cds4j@4.9.0]_ Fixed SQL error on SAP HANA when using `CASE WHEN` with a constant boolean condition on the select list.
- _[cds@9.9.0]_ Calculation of `nextLink` based on `$skipToken` for requests with `$top` and/or `$skip`
- _[cds@9.9.0]_ Stale entries in `.cds-services.json` are removed reliably, so that `cds mock/watch` no longer try to connect to dead servers
- _[cds@9.9.0]_ Configuration shortcuts like `cds.requires[service] = true` always preserve object configuration from other sources
- _[cds@9.9.0]_ `cds-serve --project <dir> --service <name>` now honors the explicit service instead of defaulting to `all`
- _[cds@9.9.0]_ Handle expression values for `@Core.MediaType`, like `@Core.MediaType: (mimeType)`
- _[cds@9.9.0]_ Will not add a default target to `MULTIPLE_ERRORS`-type error
- _[cds@9.9.0]_ Enabled creating active composition children using `direct_crud` requests via navigation
- _[cds@9.9.0]_ Removed artifacts of draft metadata from active entity data
- _[cds@9.9.0]_ Prevent type error when encountering an unexpected symbol key in `cds.ApplicationService`
- _[cds@9.9.0]_ Reject requests with `$filter` on operations with primitive return types
- _[cds@9.8.5]_ `compile.for.direct_crud` is resilient against draft-enablement on non-service entities
- _[cds@9.8.5]_ Requests targeting a view with parameters are now correctly send to remote OData services
- _[cds@9.8.5]_ `TypeError` due to unchecked access when handling `PUT` on collection via navigation
- _[cds@9.8.5]_ Null value sorting in draft-enabled scenarios now matches database behavior (NULLS FIRST for ASC, NULLS LAST for DESC)

### Removed {#apr-26-removed}

- _[vscode-cds@9.9.0]_ Unsupported `play` button for CDS queries in the `CAP Release Notes` page.

## March 2026

### Added {#mar-26-added}

- _[cds-dk@9.8.2]_ `cds init` now removes the `.vscode` folder when creating projects in SAP Business Application Studio in order to restore compatibility with other project generators. This is a temporary solution likely to be reverted in cds-dk 10.
- _[cds-dk@9.8.0]_ `cds up --overlay <file|name> (Cloud Foundry) now resolves MTA extension descriptors (<name>.mtaext) from the project root.`
- _[cds-dk@9.8.0]_ `cds add postgres` now supports Kyma with automatic database provisioning and IP whitelisting.
- _[cds-dk@9.8.0]_ `cds deploy --to hana --store-credentials` now warns about the deprecated option `--store-credentials`.
- _[cds-dk@9.8.0]_ `cds import` now uses the default options defined via `cds.import.options[<from>] = {option: 'value'}`
- _[cds-dk@9.8.0]_ `cds version` now shows version of `@sap/eslint-plugin-cds`.
- _[cds-dk@9.8.0]_ `cds version --json` returns a stable output format as JSON.
- _[cds-compiler@6.8.0]_ **api:** basic experimental support for code completion in `cds repl`
- _[cds-compiler@6.8.0]_ **compiler:**
  - retain original meta property in CSN
  - add compilerCsnFlavor to meta property
- _[cds-compiler@6.8.0]_ **sql:**
  - Add support for `cds.Vector`
  - Allow migration from cds.String to cds.LargeString
  - Fiori Tree Views in the database backend
  - For postgres: warning for identifiers that exceed the databases length limit
- _[cds.java@4.8.0]_ Support aggregate functions in `@assert`.
- _[cds.java@4.8.0]_ Setting `cds.messaging.services.<key>.queue.config.channel: null` for a Kafka channel-based messaging service now disables the default channel. If no channel is explicitly configured for an event using `@kafka.channel` the topic itself is used as channel.
- _[cds.java@4.8.0]_ Improved performance of queries merging active and inactive data (e.g. "All" Fiori list-report filter), when reading draft-enabled entities for a user with a lot of drafts.
- _[cds.java@4.8.0]_ Improved performance of inactive draft delete during draft save.
- _[cds.java@4.8.0]_ The `add` goal of the `cds-maven-plugin` now adds a dependency to `cf-java-logging-support-servlet` for feature APPLICATION_LOGGING.
- _[cds.java@4.8.0]_ HCQL adapter and HCQL client for remote services now support HCQL V2.
- _[cds.java@4.8.0]_ Actions annotated with `@Common.DraftRoot.NewAction` now have a default `@On` handler.
- _[cds.java@4.8.0]_ Setting `cds.drafts.postActive` causes plain POST requests to a draft-enabled entity (without explicit `IsActiveEntity`) to create an active instance, in case the entity has a draft new action.
- _[cds.java@4.8.0]_ Support OData v4/v2 [Date and Time](https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_DateandTimeFunctions) functions: `year`, `month`, `day`, `hour`, `minute`, `second`.
- _[cds.java@4.8.0]_ Improved layout of change tracking UI on mobile devices.
- _[cds.java@4.8.0]_ Setting `cds.environment.deployment.appid` allows to define an identifier for the applications using the persistent outbox on shared databases.
- _[cds4j@4.8.0]_ Support aggregate functions on associations in expressions of calculated elements, by moving them into a subquery.
- _[cds4j@4.8.0]_ Support functions to extract date and time components: `year`, `month`, `day`, `hour`, `minute`, `second`.
- _[cds@9.8.0]_ Calculated elements are now properly calculated in draft state. So far, the elements have been treated as regular elements ignoring the calculation.
  - In case this causes issues, you can opt-out with `cds.fiori.calc_elements = false` until cds10
- _[cds@9.8.0]_ $compute supports decimal constants
- _[cds@9.8.0]_ Support `/$metadata` requests in OData batch
- _[cds@9.8.0]_ Support for `@odata.bind` parameters in collection bound actions
- _[cds@9.8.0]_ Support for renaming of foreign keys of managed associations while resolving views
- _[cds@9.8.0]_ Support for `Prefer: return=minimal` header in generic draft actions
- _[cds@9.8.0]_ OData batch: Parallel processing of atomicity groups via `cds.odata.max_batch_parallelization=<number>` (default: `1`)
  - Only applicable if `$batch` request exclusively contains `GET` requests
  - Note: Parallel processing of atomicity groups is in conflict with OData specification for `multipart/mixed`!
  - Additional experimental feature: Bundle independent `GET` requests into single transaction via `cds.odata.group_parallel_gets=true`
- _[cds@9.8.0]_ `hcql`: request raw stream via http header `Accept: application/octet-stream`
- _[cds-mtxs@3.8.0]_ If not needed, CSV data deployment with extensions can be disabled with `cds.requires['cds.xt.ExtensibilityService'].activate['skip-csv'] = true`. This improves the performance when pushing extensions if many extensions already exist.

### Changed {#mar-26-changed}

- _[cds-dk@9.8.0]_ `cds add multitenancy` does not add an explicit `java` profile to the main app any more.
- _[cds-dk@9.8.0]_ `cds deploy` and `cds bind` support Kyma-by-default for projects with Kyma-only deployment descriptors.
- _[cds-dk@9.8.0]_ `cds deploy --to hana --on k8s` now supports deploying to SAP HANA using an existing Kubernetes service binding, allowing non-default Kyma naming conventions.
- _[cds-dk@9.8.0]_ `cds import` now correctly imports Views with Parameters from a given OData EDMX service definition.
- _[cds-dk@9.8.0]_ `cds import` now interprets empty navigation path references as if it would be a null value.
- _[cds-compiler@6.8.0]_ **compiler:**
  - improve warning in case of invalid type for key
  - simplify syntax error text when expecting Comparison and Operator tokens
  - improve support for code completion with `case` expressions, queries, and subqueries
- _[cds.java@4.8.0]_ Generated `package.json` for new projects no longer contains a `description`, `repository` and `license`.
- _[cds4j@4.8.0]_ Changed the fallback mode of expand to `parent-keys`.
- _[cds4j@4.8.0]_ A query that uses a ref as substring|prefix|suffix in `contains`|`startWith`|`endsWith` is now rejected. Only literals or parameters may be used.
- _[cds@9.8.0]_ Destination caching is no longer modified at runtime. Caching configuration is now managed by the Cloud SDK.
- _[cds@9.8.0]_ `cds.env` now supports for credentials lookup Kubernetes secrets with a structure like `${SERVICE_BINDING_ROOT}/${SERVICE}/${INSTANCE}/${BINDING}`. Previously only one level between the root and the binding was possible.
- _[cds@9.8.0]_ Allow using ESlint 10 by opening version range `^9 || ^10` for `@eslint/js`
- _[cds@9.8.0]_ Outbound `hcql` requests always via `POST`

### Fixed {#mar-26-fixed}

- _[cds-dk@9.8.2]_ `cds add workzone` for Kyma correctly adds the `html5-apps-repo-runtime` to its `Chart.yaml`.
- _[cds-dk@9.8.2]_ `cds add app-front` in combination with `cds add ias` correctly includes all `IASDependencyName` settings.
- _[cds-dk@9.8.2]_ `cds build` has improved performance in some scenarios.
- _[cds-dk@9.8.1]_ `cds build` plugins correctly formats a thrown `BuildError` in the logs.
- _[cds-dk@9.8.1]_ `cds version` also reports a cds-dk installation in Java projects that don't have such a dependency in their `package.json`.
- _[cds-dk@9.8.0]_ `cds bind` reports additional error information while accessing Cloud Foundry services.
- _[cds-dk@9.8.0]_ `cds version` now works again if executed in subfolders of Java projects without a `pom.xml` file.
- _[cds-dk@9.8.0]_ `cds add workzone` in combination with `cds add ias` adds the `HTML5.IASDependencyName` for the `srv-api`.
- _[cds-dk@9.8.0]_ `cds add lint` now creates an ESLint config file again.
- _[cds-dk@9.8.0]_ `cds import` now correctly handles enum types as keys in EDMX v4 import.
- _[cds-dk@9.8.0]_ `cds push` now shows the correct passcode URL when the subdomain changes between logins.
- _[vscode-cds@9.8.0]_ running CDS Typer in WSL projects
- _[vscode-cds@9.8.0]_ formatter: indentation of annotations to entities with annotated actions
- _[cds-compiler@6.8.0]_ **sql:**
  - do not report validation errors on entities marked as `@cds.persistence.skip`
  - normalize named arguments for portable functions
  - properly flatten associations for temporal unique constraints
- _[cds.java@4.8.0]_ Fixed a bug, causing the IAS tenant host not getting propagated to Cloud SDK if the issuer does not include a protocol scheme.
- _[cds.java@4.8.0]_ Fixed a bug, causing incorrect predicates in remote OData adapter for expressions with `false` literals.
- _[cds.java@4.8.0]_ Fixed a bug, causing errors in case custom `EventContext` interfaces were (package) private.
- _[cds.java@4.8.0]_ Fixed a bug, causing draft data created from a deep update to have `IsActiveEntity` and `HasDraftEntity` set to `null`.
- _[cds.java@4.8.0]_ Fixed a bug, causing incorrect executions of cds-maven-plugin `build` and `resolve` goals, when executed from the root directory.
- _[cds.java@4.8.0]_ Fixed a bug, causing drafts to be created in OData V4, even if `IsActiveEntity` was explicitly set to `true` in a preceeding URL segment.
- _[cds.java@4.8.0]_ Fixed a bug, causing TenantProviderService.readTenantInfos to throw an exception with TMSv2.
- _[cds4j@4.8.0]_ Fixed parsing of calculated elements with value `null`.
- _[cds4j@4.8.0]_ Fixed SQL error due to missing CTEs when using `exits` on runtime views in infix filters.
- _[cds4j@4.8.0]_ Fixed SQL error when using `exists` predicates in calculation expressions.
- _[cds4j@4.8.0]_ Fixed a bug forcing runtime view mode `resolve` for queries using `lock(null)` (incl. queries parsed from cqn).
- _[cds4j@4.8.0]_ `matchesPattern` is correctly parsed from and to JSON when the flags are omitted.
- _[cds4j@4.8.0]_ Hierarchical selects now optimize the select list, resulting in simpler queries.
- _[cds@9.8.4]_ `res.statusCode` of batch sub-requests did not consider potential modifications during `srv.on('error')`
- _[cds@9.8.4]_ Restore login challenge for late `401` with mocked authentication in `$batch`
- _[cds@9.8.4]_ Batched request fails when depended upon atomicity group fails
- _[cds@9.8.3]_ OData batch parallel processing: Drain remaining queue when aborting
- _[cds@9.8.2]_ Compatibility with `@eslint/js^10`
- _[cds@9.8.1]_ OData batch parallel processing: Preserve request sequence for OData v2
- _[cds@9.8.1]_ In inbound messaging, only load the extended model if there is a tenant
- _[cds@9.8.1]_ Ensure `cds.fiori.direct_crud` is considered during `cds build`
- _[cds@9.8.0]_ OData JSON batch:
  - Response value formatting and escaping for non `application/json` responses
  - Setting correct `content-type` header value for all content types
- _[cds@9.8.0]_ `content-length` is now set for OData multipart/mixed batch subrequest responses
- _[cds@9.8.0]_ Connection issues when a Kafka cluster has been created with public endpoints
- _[cds@9.8.0]_ Fix duplicated columns in case of `$expand=*`
- _[cds@9.8.0]_ Unhandled promise rejection in `cds.spawn` if extended model could not be loaded
- _[cds@9.8.0]_ Set `msg.tenant` & `msg.event` of messages received from Kafka, based on the stringified header values
- _[cds@9.8.0]_ `$expand=*` expands only the exposed associations
- _[cds@9.8.0]_ Broken `odata-v2` formatting for values used in `beween- and`, `in` and `lambda` type expressions
- _[cds@9.8.0]_ Appending `/$value` to an entity that is not a media entity returns `400 Bad Request`
- _[cds@9.8.0]_ In Jest test runs in ESM projects, files are now loaded properly
- _[cds@9.8.0]_ Correctly resolve dependencies in workspace setups where the CAP project is not at the root
- _[cds@8.9.9]_ Requests targeting a view with parameters are now correctly send to remote OData services
- _[cds-mtxs@3.8.1]_ More accurate exception handling if the extension table `cds.xt.Extensions` cannot be read.
- _[cds-mtxs@3.8.1]_ For HANA, tenant subscription now stores the tenant database `schema` in `cds.xt.Tenants`.
- _[cds-mtxs@3.8.1]_ The annotation allowlist correctly handles allowed parent annotations.
- _[cds-mtxs@3.8.0]_ The extension linter for annotations on structured types does not throw a `TypeError`.
- _[cds-mtxs@3.8.0]_ The response when getting extensions using `/-/cds/Extensions/<id>` now also contains the `status`.

## February 2026

### Added {#feb-26-added}

- _[cds-dk@9.7.0]_ `cds debug` is now supported for Kubernetes/Kyma deployments.
- _[cds-dk@9.7.0]_ `cds init --nodejs` as a shortcut for `cds init --add nodejs`.
- _[cds-dk@9.7.0]_ Support for express 5 (in addition to express 4).
- _[cds-dk@9.7.0]_ `cds deploy --to hana` now supports `--out` to specify the output directory for generated files.
- _[cds-dk@9.7.0]_ `cds mock <service>` as a shortcut for `cds serve --mocked --project <service> --in-memory? --port 0`.
- _[cds-dk@9.7.0]_ `cds add ias` adds a URL for local approuter testing to `redirect-uris` if approuter is configured.
- _[cds.java@4.7.0]_ Added resilient connection handling in `cds-feature-kafka` for the case that the Kafka cluster is not available when a microservice starts.
- _[cds.java@4.7.0]_ Improved handling of `@assert` and dynamic `@mandatory`/`@inapplicable` on managed associations.
- _[cds.java@4.7.0]_ Added support for `publishPrefix` and `subscribePrefix` in configuration for `cds-feature-kafka`.
- _[cds.java@4.7.0]_ Added support for Event Hub integration via `mvn cds:add -Dfeature=EVENT_HUB`
- _[cds.java@4.7.0]_ Reduced database lock conflicts when processing messages of unordered outboxes by skipping locked entries.
- _[cds4j@4.7.0]_ Allow using `$now` as default value for elements of type `Date`.
- _[cds4j@4.7.0]_ Support function `ceil` as synonymn for `ceiling`.
- _[cds4j@4.7.0]_ Allow supplying foreign-key values for path-based inserts via the data entries.
- _[cds4j@4.7.0]_ Draft-enclosed associations now retain `@cascade` annotations.
- _[cds4j@4.7.0]_ SAP HANA, PostgreSQL and H2: Support `Select.lock(mode, CqnLock.Wait.SKIP_LOCKED)`, which returns immediately and yields only rows that are not currently locked (non-blocking).
- _[cds@9.7.0]_ Support for express 5 (in addition to express 4)
- _[cds@9.7.0]_ New config option `cds.requires.db.data` to configure source folders for initial data and test data CSV files
- _[cds@9.7.0]_ Enterprise Messaging now caches access tokens to support high-throughput message processing from Event Mesh
- _[cds@9.7.0]_ Automatically add `@Common.DraftRoot.NewAction` for each draft-enabled entity during `compile.for.odata` via `cds.fiori.direct_crud=true`
- _[cds@9.7.0]_ Support for `null` value in `@odata.bind`
- _[cds@9.7.0]_ Validation of flow annotations at compile step

### Changed {#feb-26-changed}

- _[cds-dk@9.7.0]_ `cds version` received major enhancements: It's now fully based on the `npm ls` command and always prints a tabular output. Also some new flags were added; check `cds version --help` for details.
- _[cds-dk@9.7.0]_ `cds deploy --to k8s` increased the timeout to wait for the HDI container creation from 120 to 180 seconds.
- _[cds-dk@9.7.0]_ `cds add` facets now abort when executed in a folder that is neither a Node.js nor a Java project.
- _[cds-dk@9.7.0]_ `cds add lint` now also adds the .java extension to the files that are linted within VSCode.
- _[cds-dk@9.7.0]_ `cds init` now restricts project names to 64 characters maximum, requiring them to start with an alphanumeric character or `_`, and contain only alphanumeric characters, `_`, and `-`.
- _[cds-dk@9.7.0]_ `cds import` now generates an on condition for associations if the navigation property in an imported OData v4 service has a referential constraint.
- _[cds-dk@9.7.0]_ `cds build` does not ignore wildcarded folders like `app/*` any more.
- _[cds-dk@9.7.0]_ `cds env --resolve-bindings/-b` also considers local service bindings.
- _[cds.java@4.7.0]_ `Update` statements triggered from `draftActivate` now include a key filter in the statement's `ref`.
- _[cds.java@4.7.0]_ `cds-feature-flow` now rejects the statements for flow-annotated actions without full key in the infix filter.
- _[cds@9.7.0]_ Colors are enabled by default in GitHub Actions workflows
- _[cds@9.7.0]_ `queue`: Manually update `lastAttemptTimestamp` of outbox messages (instead of relying on `@cds.on.update: $now`)
- _[cds@9.7.0]_ `express` is no longer a peer dependency of `@sap/cds` but a regular one. Applications that want to pin it or require it in their custom code, should declare the dependency on their own.
- _[cds@9.7.0]_ `hcql` response format: `{ data: [], errors: [] }`
- _[cds-mtxs@3.7.1]_ Provisioning service calls now skip `cds.xt.DeploymentService` operations if it is disabled, logging only a warning.

### Fixed {#feb-26-fixed}

- _[cds-dk@9.7.2]_ `cds build --for mtx-sidecar` correctly resolves `@source` in custom MTX sidecar services.
- _[cds-dk@9.7.2]_ `cds build` now utilises caching for workspace resolution, which will speed up build times for projects with many workspaces.
- _[cds-dk@9.7.2]_ `cds add` commands don't augment Helm Charts if not managed by CAP.
- _[cds-dk@9.7.2]_ `cds add approuter` for Kyma configures token exchange for managed approuter scenarios.
- _[cds-dk@9.7.2]_ `cds bind` reports additional error information while accessing Cloud Foundry services.
- _[cds-dk@9.7.1]_ `cds add completion` now works without specifying the project runtime.
- _[cds-dk@9.7.1]_ `cds add xsuaa` correctly adds the the binding for the `html5-apps-deployer` on Kyma.
- _[cds-dk@9.7.1]_ `cds version` prints an older format in a legacy situation.
- _[cds-dk@9.7.1]_ `cds add nodejs` is automatically added in BAS scenarios for compatibility if no other runtime is specified.
- _[cds-dk@9.7.1]_ `cds add data -n` works correctly for `Composition of one` scenarios.
- _[cds-dk@9.7.0]_ `cds add sqlite --for production` adds `@cap-js/sqlite` to `dependencies`.
- _[cds-dk@9.7.0]_ `cds build --ws` fixes a race condition.
- _[cds-dk@9.7.0]_ `cds build` now places the `i18n` folder in the generated output in nested locations.
- _[cds-dk@9.7.0]_ `cds build --for mtx-sidecar` loads CAP plugins from the MTX sidecar instead of the main app for generating the sidecar CSN.
- _[cds-dk@9.7.0]_ `cds add ias` uses a matching `IASDependencyName` for the application content deployer.
- _[cds-dk@9.7.0]_ `cds add ias` uses a more generic `redirect-uris` pattern.
- _[cds-dk@9.7.0]_ `cds import` no longer generates a managed association for navigation properties of imported OData v4 services if the foreign key, the managed association would generate, already exists.
- _[cds-dk@9.7.0]_ `cds add multitenancy` for Java correctly creates a `package-lock.json` in _mtx/sidecar_.
- _[cds-dk@9.7.0]_ `cds add xsuaa` works properly when executed after `cds add workzone`.
- _[cds-dk@8.9.14]_ CVE-2026-25639: Update `axios` version to 1.13.5
- _[eslint-plugin-cds@4.2.1]_ Removed usage of deprecated API in `lib/utils/rules.js`
- _[eslint-plugin-cds@4.2.0]_ Use ESLint API supported by versions `9` and `10`.
- _[eslint-plugin-cds@4.1.2]_ No longer crash on .java files larger than 32 kB.
- _[eslint-plugin-cds@4.1.2]_ Weaken `java/cql-class-targets` to only warn when a string literal is passed as parameter.
- _[eslint-plugin-cds@4.1.2]_ `assoc2many-ambiguous-key` no longer falsely warns about 1-n joins when an infix filter reduces the joined relation to a single row.
- _[cds-compiler@6.7.3]_ **sql:** do not resolve path navigations to virtual elements which resulted in an internal error.
- _[cds-compiler@6.7.2]_ **compiler:** Just issue warning for `using` declaration referring to nothing
  (fixes regression introduced with v6.7.0 if there is a file containing
  a `namespace` declaration, but no definitions)
- _[cds-compiler@6.7.2]_ **effective:** clean up internal Symbols from meta section
- _[cds-compiler@6.7.2]_ **sql:** clean up internal Symbols from meta section
- _[cds.java@4.7.0]_ Avoid extra parenthesis in `filter` predicate of `$apply` in remote OData.
- _[cds.java@4.7.0]_ Reduced the number of database calls to set session variables (on Postgres)
- _[cds.java@4.7.0]_ Fixed a bug, that caused skipping CQN Predicate `FALSE` in remote OData.
- _[cds.java@4.7.0]_ Fixed a bug, causing duplicated draft messages in case of entities with compound keys.
- _[cds.java@4.7.0]_ Fixed a bug, causing duplicated draft messages in case of String-based targets.
- _[cds.java@4.7.0]_ Fixed a bug, causing HTTP status `500` instead of `400` (not supported) when setting the `Content-Type: application/pdf` header for OData v4 action.
- _[cds4j@4.7.0]_ Fixed exception on averaging over associations when using the static query builder API.
- _[cds4j@4.7.0]_ Fixed refs with `$self` in exists predicates.
- _[cds4j@4.7.0]_ Fixed "No element found" exception on statements using match predicates (exists, any, all) in subqueries.
- _[cds4j@4.7.0]_ Fixed projection resolution in results:
  - for null values when paths are aliased by the first segment.
  - for paths whose last segment equals another element in the projection.
- _[cds4j@4.7.0]_ Fixed a bug in recursive hierarchy on HANA, causing sporadic incorrect sort order of elements.
- _[cds4j@4.7.0]_ Fixed an exception when using `exists` predicates in runtime views.
- _[cds@9.7.1]_ `DELETE` requests nulling a `@mandatory` property
- _[cds@9.7.1]_ Correctly call remote collection bound action for `odata-v4` services
- _[cds@9.7.1]_ Flow annotation validation at compile time strictly follows the documentation: only enum status values are allowed
  - Status value validation can be disabled via `cds.features.skip_flows_validation=true`
- _[cds@9.7.0]_ Correctly respond with status `404` when `@cds.api.ignore` annotated action is requested
- _[cds@9.7.0]_ Ensure plugin debug emitted with `DEBUG=all`
- _[cds@9.7.0]_ Prevent app crash when `JSON.parse` of operation parameters fails
- _[cds@9.7.0]_ Generate correct UI annotations for Status Transition Flows when building and compiling
- _[cds@9.7.0]_ Remote services: Prefer `cds.context.user?.authInfo?.token?.jwt` over JWT in HTTP header of incoming request
- _[cds@9.7.0]_ References to child elements in `@Common.Text` annotations will now be checked. The reference will not be included in `@cds.search`, in case ...
  - ... the reference can not be found in the annotated entity's associations
  - ... the referenced entity is annotated with `@cds.persistence.skip`
  - ... the referenced field does not exist in the referenced entity
  - References to children of children will be ignored.
- _[cds@9.7.0]_ OData parser: Ignore superfluous brackets
- _[cds@9.7.0]_ Prevent app crash in case of `req.reject()` during draft activate triggered via OData batch
- _[cds@9.7.0]_ `cds minify` no longer removes services if their actions are kept
- _[cds@9.7.0]_ Better error when subquery can't be resolved for the current service
- _[cds@9.7.0]_ Flows: Record transition to default value on `INSERT`/ `UPSERT`
- _[cds@9.7.0]_ Error response properties of OData batch subrequests are now formatted identically to properties in single OData error responses
- _[cds@9.7.0]_ Prevent `@Common.numericSeverity` from appearing in persistent draft messages (in addition to the correct property `numericSeverity`)
- _[cds-mtxs@3.7.1]_ HANA deployment parameters set via the `HDI_DEPLOY_OPTIONS` environment are now correctly evaluated.

### Removed {#feb-26-removed}

- _[cds@9.7.0]_ `@cds.on.update: $now` from `cds.outbox.Messages.lastAttemptTimestamp`


## January 2026

### Added {#jan-26-added}

- _[vscode-cds@9.7.0]_ Multi-Cursor support for range selection
- _[vscode-cds@9.7.0]_ Folding range for consecutive `using` statements
- _[vscode-cds@9.6.3]_ Progress reporting for persistency
- _[vscode-cds@9.6.0]_ (Experimental) persistency of where-used index
  This feature allows to persist/restore where-used indexes on a per-file basis to speed up indexing of large projects
  with many root models. It is currently experimental and must be enabled via user setting `cds.workspace.persistency.enabled`.
  There are a couple of user settings to fine tune the behavior
  - `cds.workspace.persistency.enabled`: general enablement. All other settings have no effect if this is disabled.
  - `cds.workspace.persistency.persistAfterSave`: when a file is saved its index is persisted.
  - `cds.workspace.persistency.persistAfterCompile`: when (closed) CDS files are compiled (also as part of another model compilation) their index gets persisted.
  - `cds.workspace.persistency.restoreBeforeCompile`: when CDS files are part of a compilation their persisted index is used if matching
  - `cds.workspace.persistency.restoreAfterStartup`: restore all persisted indexes after start-up
  - `cds.workspace.persistency.indexAllAfterStartup`: index all files not yet persisted
  - `cds.workspace.persistency.garbageCollectOrphanedIndexesAfterStartup`: index files are written per content. Delete index files with outdated content after start-up
  - `cds.workspace.persistency.garbageCollectOrphanedIndexesAfterNSaves`: Delete index files with outdated content after specified number of `Save` requests
  - `cds.workspace.persistency.reindexAfterCompileIfRestored`: If files are part of a compilation and a matching index exist, still index again.  
- _[cds-compiler@6.7.0]_ to.hdi: Support .hdbprojectionview for Data Product Production
- _[cds-mtxs@3.7.0]_ Immediate deletion of TMS HANA tenants can be enabled with configuration `cds.requires['cds.xt.DeploymentService'].hdi.create.immediate_deletion = true`
(combined with `cds.requires['cds.xt.DeploymentService'].hdi.create.cleanup_hana_tenants = true`)
- _[cds-mtxs@3.7.0]_ Container credential determination with TMS v2 is accelerated by using `$top=1` for the container query.

### Changed {#jan-26-changed}

- _[cds-dk@9.6.1]_ All commands use colored logs in GitHub Actions workflows by default.
- _[vscode-cds@9.7.0]_ Persistency of where-used index is now beta
- _[vscode-cds@9.7.0]_ User setting categories in settings UI
- _[cds-compiler@6.7.0]_ compiler: Change internal processing sequence (extensions and entity generation) for
    potentially upcoming compiler features; messages for erroneous models might differ slightly
- _[cds-compiler@6.7.0]_ for.odata/to.edm(x): Enhancements for Fiori Tree Views: support managed associations with explicit foreign keys,
    raise messages when the `@hierarchy` annotation cannot be applied.
- _[cds-mtxs@3.7.0]_ MTXS is now using fewer requests when getting container credentials from HANA TMS v2.
- _[cds-mtxs@3.6.2]_ Maximum chunk size when retrieving container bindings from service-manager is reduced to 1000.

### Fixed {#jan-26-fixed}

- _[cds-dk@9.6.1]_ CVE-2025-15284: update `express` to fix vulnerability with `qs` <6.14.1.
- _[cds-dk@9.6.1]_ `cds watch` is more efficient on Linux with respect to `inotify` events. This fixes some crash and stall situations on Linux, especially in SAP Business Application Studio where resources are shared.
- _[cds-dk@9.6.1]_ `cds build --production` correctly includes `message.properties` from i18n files provided by CAP plugins.
- _[cds-dk@9.6.1]_ `cds add sample` fixes a warning about unused imports in _app/common.cds_.
- _[cds-dk@9.6.1]_ `cds init` fixes some rare argument parsing errors.
- _[vscode-cds@9.7.0]_ Show `CAP Release Notes` automatically only if timestamp of page changed.
- _[vscode-cds@9.7.0]_ Formatter: align element names after `key` keyword only
- _[vscode-cds@9.6.3]_ Some minor fixes
- _[vscode-cds@9.6.0]_ Syntax highlighting in bracketed expressions
- _[cds-compiler@6.7.1]_ compiler: Properly accept aspects as composition targets in an `extend`
  (fixes regression introduced with v6.7.0)
- _[cds-compiler@6.7.0]_ to.sql: portable hana functions `*_between` with dates
- _[cds-compiler@6.6.2]_ for.effective: Don't resolve backlinks in aspects
- _[cds@9.6.4]_ `queue`: Too eager removal of control data from deserialized task
- _[cds@9.6.4]_ Stop overriding existing `cds.requires.[service].credentials` configurations using values from `.cds-services.json`
- _[cds@9.6.3]_ `queue`: Exactly-once guarantee only with `legacyLocking: false`
- _[cds@9.6.2]_ Consider `@mandatory.message` for the error message, when a mandatory action / function parameter is not provided
- _[cds@9.6.2]_ Respond with error code `400` when receiving requests that use `any()` / `all()` filters on an association to one
- _[cds@9.6.2]_ Error message of unknown property check will no longer include `undefined` to identify structs without a name
- _[cds@9.6.2]_ `enterprise-messaging`: Type error in check for unofficial XSUAA fallback
- _[cds@9.6.2]_ Status Transition Flows: Exclusions for multiple projections
- _[cds-mtxs@3.7.0]_ More stable deletion of HDI container instances via SAP BTP Service Manager.
- _[cds-mtxs@3.7.0]_ Extension validation no longer counts field type changes as new fields.
- _[cds-mtxs@3.7.0]_ Getting a task from the job service no returns `404` for non-existing tasks.
- _[cds-mtxs@3.7.0]_ In combination with `@cap-js/hana` version 2.6.0 pool connection errors with invalid database credentials are handled more gracefully.
- _[cds-mtxs@3.6.2]_ Command `cds-mtx` now correctly passes the services when triggering the 'served' event.
- _[cds-mtxs@3.6.2]_ HDI deployment log files are now safely written in case of process terminations.
- _[cds-mtxs@3.6.2]_ Etag returned by `/-/cds/model-provider/getCsn` now properly reflects model changes again.
- _[cds-mtxs@3.6.2]_ Reading extensions using `/-/cds/extensibility/Extensions` now also works with an outdated schema of the extension table.

### Removed {#jan-26-removed}

- _[vscode-cds@9.6.0]_ User setting `cds.workspace.debounceFastChanges`, now always enabled
