Changelog 2026
Open Source Changelogs
For repositories and plugins that are open source, please check out the respective changelogs in the cap-js organization and the CAP Community.
June 2026
Added
- [cds-dk@10.0.1]
cds add event-meshandcds add event-mesh-sharedset up configuration and deployment descriptors for Event Mesh of SAP Integration Suite. - [cds-dk@10.0.1]
cds upgradenow detects Java/Spring Boot migration issues and integrates OpenRewrite for automated fixes via--fix. - [cds-dk@10.0.1]
cds upgrade --reportwritesreport.mdandreport.yamlto.cds-upgrade/for AI agent and human consumption. - [cds-dk@10.0.1]
cds upgradegroups findings by capire section with links to the migration guide. - [cds-dk@10.0.0]
cds upgradeanalyzes project code and configuration for CDS 10 compatibility issues. - [cds-dk@10.0.0]
cds add react|vuewithout--intoscaffolds the Vite app directly intoapp/;cds watchmounts it at/. - [cds-dk@10.0.0]
cds add portaluses thesapse/application-content-deployer-buildpackfor Kyma to simplify HTML5 repo content and SAP BTP Portal service deployment. - [cds-dk@10.0.0]
cds add aiadds out-of-the-box AI integration with@cap-js/aivia the SAP BTP AI Core service. - [cds-dk@10.0.0]
cds debugwarns abouthttphealth checks on Cloud Foundry that would kill the container while paused at a breakpoint. - [cds-compiler@7.0.1] compiler: Special property
$includeAfteris put into a CSN of flavorgensrc/xtendedto preserve the original element order for entities and other structures withincludesadded via anextendstatement. - [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
addgoal of thecds-maven-pluginnow generates apom.xmlfor Maven modules exported viacds export. - [cds.java@5.0.0] The
generategoal of thecds-maven-pluginhas a new optiongenerateClassesto generate static implementations for accessor interfaces. - [cds.java@5.0.0] The module
cds-services-code-generatorreplacescds4j-codegen. - [cds.java@5.0.0] Introduced
ContainerDeploymentServiceincds-feature-mtas 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
$countin$expand(). - [cds.java@4.9.1] Logs for 401 errors in Remote OData services now include the value of the
www-authenticateheader, if available. - [cds.java@4.9.1] Support
onBehalfOfconfiguration for IAS app-to-app destinations, allowing control over the authentication strategy (currentUser,systemUser,systemUserProvider) when calling remote APIs through destinations withcloudsdk.ias-dependency-name. - [cds.java@4.9.1] Added
cds.sql.search.localizedwith optionviewas replacement for deprecatedcds.sql.search.mode. - [cds4j@5.0.0] Extend
CQL.vector_embeddingto accept text as String. - [cds4j@5.0.0] Support type propagation for
cosineSimilarityandl2Distance. - [cds4j@5.0.0] Support calculation of aggregates for hierarchies.
- [cds4j@5.0.0] Support filters through to-one associations into
cds.Mapelements. - [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-meshandevent-mesh-shared(beta)- In contrast to SAP Event Mesh, multitenancy is out of scope!
- [cds@10.0.0] New annotation
@cds.minify: falseallows 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 forsrv.entities,srv.events,srv.types, andsrv.actions. This flag will be removed with cds^11. - [cds@10.0.0] Mark all CSN
vals withparam: false - [cds@10.0.0] For
CREATE,UPDATE,UPSERT, andDELETErequests, the generic CRUD handler now consistently returns arrays carrying an.affectedproperty with the number of affected rows (instead ofreq.data, or — forDELETE— the affected count itself).- Opt-out via
cds.env.features.legacy_srv_results: true. This flag will be removed with cds^11.
- Opt-out via
- [cds@10.0.0]
redis-messaging: Support for credentials in GCP-based regions (adds private CA) - [cds-mtxs@3.9.4]
getCsnnow setsmeta.extendedtotrueorfalseon the returned CSN, indicating whether tenant extensions were applied. Ifmeta.extendedis set tofalse, the deployment is using the precompiled HANA artifacts instead of running another HANA build.
Changed
- [cds-dk@10.0.1]
@sap/cds-dknow comes withbundleDependenciesfor reproducible installs. This is a replacement for thenpm-shrinkwrap.jsonthat is no longer supported by NPM 12 and higher. - [cds-dk@10.0.1]
cds initno longer assumes--nodejswhen running in SAP Business Application Studio. - [cds-dk@10.0.1]
cds initno longer omits the.vscodefolder when running in SAP Business Application Studio. - [cds-dk@10.0.1]
cds init/add --nodejsnow creates ESM projects by default. For CommonJS projects, usecds init --add cjs. - [cds-dk@10.0.1]
cds add datano longer creates random strings for fields annotated with@assert.format. - [cds-dk@10.0.1]
cds add iasdoes not use theHTML5.prefix for HTML5 repo settings. - [cds-dk@10.0.1]
cds add nodenow adds a devDependency to@cap-js/sqlite@^3 - [cds-dk@10.0.1]
cds upgradenow produces concise CLI output (count + title per rule) and a structured report with capire-aligned sections. - [cds-dk@10.0.0]
cds addandcds buildcreateenginesfields using caret dependencies of LTS Node.js versions, such as^24. - [cds-dk@10.0.0]
cds versionnow 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 hanadoes not generate db/undeploy.json any more. - [cds-dk@10.0.0]
cds build --for hanagenerates 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
annotatestatements now mention the original file location if that is unique. - The message IDs and texts for undefined references have been consolidated.
- Messages reported by compiler backends for non-applied
- [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, andref-unexpected-args).
- Performance of the SQL backend has been improved: wildcard
- [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-recipesnow use the consolidated package namespacecom.sap.cds.services.migrationsfor all recipe names and Java classes (previously mixed between.recipesand.migrations). - [cds.java@5.0.0] Renamed
cds.mcp.autoConfigtocds.mcp.autoWired. - [cds.java@5.0.0] Renamed
cds.taskScheduler.enabledtocds.outbox.persistent.scheduler.enabled. - [cds.java@5.0.0] Removed deprecated properties
eventContextandcqnServicefrom goalgenerateof thecds-maven-plugin. - [cds.java@5.0.0] The properties
cds.outbox.inMemory.enabledandcds.outbox.inMemory.emitDuringChangeSetContexthave been deprecated. - [cds.java@5.0.0]
The default search mode for OData V2 and V4 has been changed topass-through. To restore the old behavior, setcds.odataV2.search.modeandcds.odataV4.search.modetoodata-lenient. - [cds.java@5.0.0] The default value for property
cds.errors.preferServiceExceptionhas been changed fromfalsetotrue. - [cds.java@5.0.0] The default value for property
cds.multiTenancy.serviceManager.cacheRefreshIntervalhas been changed from20to60minutes. - [cds.java@5.0.0]
The number of max requests in a OData V2 batch request has been limited to10. To restore the old behavior, setcds.odataV2.batch.maxRequestto-1. - [cds.java@5.0.0] The default value for property
cds.persistence.changeSet.enforceTransactionalhas been changed fromtruetofalse. - [cds.java@5.0.0] Outboxes for services are now by default unordered. To restore the old behavior, set
cds.outbox.services.<key>.orderedtotrue. - [cds.java@5.0.0] The default value for property
cds.query.restrictions.enabledhas been changed fromfalsetotrue. - [cds.java@5.0.0] The default value for property
cds.query.deep-entity-readonly.enabledhas been changed fromfalsetotrue. - [cds.java@5.0.0] The default value for property
cds.sql.toOnePath.modehas been changed fromalways-jointooptimize. - [cds.java@5.0.0] The default value for property
cds.sql.hana.search.fuzzyhas been changed fromfalsetotrue. - [cds.java@5.0.0] The deprecated property
cds.sql.hana.optimizationModehas been removed. - [cds.java@5.0.0] Removed deprecated
Exitsclasses fromcds-feature-mt. - [cds.java@5.0.0] Changed default JDK in
cds-services-archetypefor new CAP Java projects to JDK 25. - [cds.java@5.0.0] Removed deprecated goal
install-cdsdkfromcds-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-pluginto current LTS 24.x. - [cds.java@5.0.0] Bumped minimum required Maven version of the
cds-maven-pluginto 3.9.10. - [cds.java@5.0.0] Removed Maven modules
repackaged/odata-v2-libandrepackaged/odata-v4-lib. - [cds.java@5.0.0] OData v2: log forbidden char in DEBUG level.
- [cds.java@5.0.0] Removed
cds.odataV2.searchModeandcds.odataV4.searchModeand introducedcds.sql.search.syntaxwith optionsHANA(default) andODATA. - [cds.java@5.0.0] Removed
cds.sql.search.modeand introducedcds.sql.search.localizedwith optionview;genericmode is not supported anymore. - [cds4j@5.0.0] Removed support for SAP HANA JSON Document Store.
- [cds4j@5.0.0] Removed modules
cds4j-codegenandcds4j-maven-plugin. - [cds4j@5.0.0] Removed support for search via the
CONTAINSfunction 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 fromModifier. - [cds4j@5.0.0] Removed deprecated
isAbstractmethod inCdsEntity. - [cds4j@5.0.0] Removed deprecated
CqnPassThroughSearchPredicate, instead useCqnSearchStringPredicate. - [cds4j@5.0.0] Removed higher auto-weighting of key element in fuzzy search.
- [cds4j@5.0.0] Removed
CqnTransformation.getKind()and theCqnTransformation.Kindenum (beta) - [cds4j@5.0.0] Replaced config option
cds.sql.search.mode: localized-viewwithcds.sql.search.localized: view;genericmode 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_entitiesis changed to false and will be removed in an upcoming version. - [cds@10.0.0]
cds.features.ieee754compatibleis changed to true to return strings for Decimal/Int64 for all db services. - [cds@10.0.0]
cds.i18n.fatjsonis 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
dbandqueueare available) - [cds@10.0.0]
cds.fiori.direct_crudis split into the two feature flagscds.fiori.bypass_draftandcds.fiori.draft_new_actioncds.fiori.bypass_draftallows the modification of active instances. It is now enabled by defaultcds.fiori.draft_new_actionintroduces thedraftNewaction to create new drafts. It is still disabled by default (as before)
- [cds@10.0.0] REST adapter: bulk
POSTof multiple entries is now dispatched as a singleINSERTinstead of one dispatch per entry.- Set
cds.env.features.bulk_inserts_via_rest: falseto revert to the legacy per-entry dispatch. This flag will be removed with cds^11.
- Set
- [cds@10.0.0]
req.queryis deprecated for bound actions/ functions and will be removed in cds^11. Usereq.subjectinstead. - [cds@10.0.0] Generic Handlers: Static
handle_*methods that registered preflight handlers were replaced by non-statichandle_*functions that are called beforehandle- Fully backwards-compatible: In case of a custom static
handle_*method that overrides a built-in one, the respectivehandle_*function is not called
- Fully backwards-compatible: In case of a custom static
- [cds@10.0.0] Updated default configuration for
persistent-queue:legacyLockingdefault changed fromtruetofalsemaxAttemptsdefault reduced from20to10storeLastErroroption removed (now alwaystrueimplicitly)
- [cds@10.0.0] Protocol adapters are now real classes, The
.routercontains now the protocol router (previously it was returned from the constructor itself). - [cds@10.0.0]
cds.validatenow return the error code in.codeinstead 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}$/ias UUID - [cds@10.0.0] Flows:
@fromis checked in parallel to any other before handler - [cds@10.0.0] RemoteService: Clearing keys from payload (
req.data) is now done in genericonhandler instead of an extrabeforehandler - [cds@10.0.0] Undocumented
srv.reject(event, path)registers a standardbeforehandler - [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-mtxhas been removed. - [cds-mtxs@4.0.1] Calling endpoint
POST /-/cds/sms-provisioning/upgradenow requires more permissions. - [cds-mtxs@4.0.1] Annotation
@Common.FieldControlis 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.sqlis configured differently in both the project root and the sidecar. By settingcds.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
t0tenant 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
- [cds-dk@10.0.1]
cds subscribe,cds unsubscribe, andcds upgradedefault to mock credentials on localhost, removing the need for explicit-u user:password. - [cds-dk@10.0.1]
cds bindwill throw an error when--tois specified without providing a path. - [cds-dk@10.0.1]
cds build --for hananow correctly relocates generated .hdbsynonymconfig files containing*.configureproperties (e.g.schema.configure). - [cds-dk@10.0.1]
cds add html5-repoandcds add app-frontenddetect UI5 modules per app via each app's@ui5/clidevDependency, instead of relying on a project-wide flag. - [cds-dk@10.0.1] Removed undocumented
dp-clidata product import method. Usedp-metadatarepository import or direct JSON file import instead. - [cds-dk@10.0.1]
cds add html5-repo,cds add app-frontend, andcds add typescriptnow addui5-tooling-transpile-taskto existingui5.yamlfor TypeScript projects. - [cds-dk@10.0.1]
cds versionno longer fails if@sap/cds< 9.8 is installed. - [cds-dk@10.0.1]
cds buildno longer fails withEEXISTwhen the MTX sidecar has its own.npmrc, and dereferences symlinks during copy sogen/is self-contained and portable. - [cds-dk@10.0.1]
cds upgradeno longer fails when ast-grep exits with non-zero on certain file patterns. - [cds-dk@10.0.1] Removed undocumented
dp-clidata product import method. Usedp-metadatarepository import or direct JSON file import instead. - [cds-dk@10.0.1]
cds importfor OData v2 now can import annotations. - [cds-dk@10.0.1]
cds lintno longer silently swallows any error. - [cds-dk@10.0.0]
cds bindnow correctly handles CF org, space, and service instance names containing commas. - [cds-dk@10.0.0]
cds updeploys to Kyma withhelm --atomic, so failed deployments no longer block the next run. - [cds-dk@10.0.0]
cds add vueuses correct placeholder values for book and author inApp.vue. - [cds-dk@10.0.0]
cds build --productionnow also bundles message.properties files from plugins. - [cds-dk@10.0.0]
cds pushprovides support for CAP plugins. - [cds-dk@10.0.0]
cds add dynatracein combination withnodejsmakes sure thenodejsMTA changes are correctly applied. - [cds-dk@10.0.0] The
NO_COLORenvironment variable also accepts values other thantrue. - [cds-dk@9.9.3]
cds importfor OData v2 now can import annotations. - [cds-dk@9.9.3]
cds watchon 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 achangeevent. - [cds-dk@8.9.13] CVE-2025-15284: update
expressto fix vulnerability withqs<6.14.1 - [eslint-plugin-cds@4.2.4]
auth-valid-restrict-grantno 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
noErrorForUnknownAnnotateTargetdowngrades errors to warnings forannotatestatements 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-MatchandIf-None-Matchheaders are now treated as invalid and rejected with421error code. - [cds.java@4.9.1] Enhanced resiliency to
cds-feature-kafkawhen registering a consumer group ID and topic registration. - [cds4j@5.0.0] Fixed a bug in
groupBytransformation for@odata.draft.enabledentity, causing aClassCastException, whenIsActiveEntityorHasActiveEntityare 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
nullvalues in nested rows were not included in results. - [cds@10.0.2]
cds.envomits 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.maxis increased beyond the default of 1000 and no explicitcds.env.query.limit.defaultis set, the default page size now followsmaxinstead of staying capped at 1000. - [cds@10.0.2] Propagate
DraftUUIDet al. to nested children on deep PATCH - [cds@10.0.2] Missing
username/passwordonBasicAuthenticationdestinations 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.requiresto a nullish value. - [cds@10.0.1] A custom
cds.env.protocols.odata-v4.pathis now correctly applied to services using theodataprotocol shortcut (or no explicit@protocolannotation). - [cds@10.0.1]
$countis not allowed on service root or single instances - [cds@10.0.1]
$batchURLs 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 manynow correctly returns 400 - [cds@10.0.0] Adding clauses on
cds.cloned queries behaved inconsistently. For example:jsBefore, thelet q1 = SELECT.from`Books`.where`ID>1`.orderBy`genre.name` let q2 = cds.ql.clone(q1).where`stock>9`.orderBy`title`whereclause was appended, butorderBywas overridden instead of appended. With the fix, bothwhereandorderByare appended, so that q2 is effectively:sqlSetSELECT from Books where ID>1 and stock>9 order by genre.name, titlecds.features.compat_clone_appends = trueto 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.nodejsdid not consistently ignore@Common.Textannotations with expression values when deriving@cds.searchfields - [cds@10.0.0]
cds.utils.inspectrespects custom options again - [cds@10.0.0] Erroneously prefixed paths being applied to database service handlers during handler registration
- [cds@10.0.0]
.textsentities incorrectly appearing incds.entities/srv.entitieswhencompat_texts_entitiesis 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.modelpropagation in extensibility scenarios - [cds@9.9.2] Restored
err.target:'in'during draft activation withcds.fiori.draft_messages=falseto avoid theMULTIPLE_ERRORSpopup - [cds@9.9.2]
resolveViewprioritizes the original foreign keyparent_IDif exposed multiple times, e.g., through*, parent.ID as parentId - [cds-mtxs@4.0.1] Default value 3 for
cds.requires.multitenancy.jobs.clusterSizeis now effective for upgrade. When using HANA TMS v2, the default forclusterSizeis set to 1. - [cds-mtxs@4.0.1] Parallel single-tenant upgrades no longer fail with
tar: Cannot open: File existswhen extensibility is disabled. - [cds-mtxs@3.9.4] Command
cds-mtx upgrade '*'now also works with settingcds.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
- [cds-dk@10.0.0]
cds extendis removed as it was only kept for@sap/cds-mtxcompatibility. - [cds-dk@10.0.0]
cds migrateis removed as@sap/cds-mtxto@sap/cds-mtxsmigration 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()— usecds.compile.to.hdbtable()instead - [cds@10.0.0]
cds.context.http.req.authInfo- usecds.context.user.authInfoinstead - [cds@10.0.0] Legacy compat option
cds.compile.to.hdbcds()— usecds.compile.to.hdbtable()instead. - [cds@10.0.0] Legacy compat option
cds.User.tokenInfo- Usecds.User.authInfo.tokeninstead. - [cds@10.0.0] Legacy compat flag for
ASSERT_NOT_NULLerror code of@mandatoryvalidation - useASSERT_MANDATORYasscodeinstead. - [cds@10.0.0] Legacy compat flag
cds.features.compat_save_drafts→ use['CREATE', 'UPDATE', 'UPSERT']instead of theSAVEevent for.drafts - [cds@10.0.0] Legacy compat flag
cds.features.consistent_params=falseis now finally removed — adapt the implementation instead. - [cds@10.0.0] Legacy compat flag
cds.features.odata_metadata_compatis now finally removed — adapt the implementation instead. - [cds@10.0.0] Legacy compat flag
cds.sql.transitive_localized_viewsis now finally removed — no action necessary. - [cds@10.0.0] Legacy compat flag
async_handler_compatfeature flag and the associated compat wrapping logic fromsrv-handlers; sync handlers are now always wrapped unconditionally. - [cds@10.0.0]
DISCARDevent as a special-cased branch — it is now mapped toCANCELvia the standard events alias table - [cds@10.0.0] Internal function
getDBTableused by old cds-dbs versions - [cds@10.0.0] Internal
_initialphase - [cds@10.0.0] Removed support for
async activate()functions returned fromcds-plugin.jsmodules, 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
- [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
- [cds-dk@9.9.1]
cds add lintnow adds a dependency oneslint@10, instead ofeslint@9.
Fixed
- [cds-dk@9.9.2] Dependency updates, e.g. for CVE-2026-8723.
- [cds-dk@9.9.2]
cds build --for mtx-sidecarwarns ifresources.tgzwas not created, hinting to runnpm add -D taras a workaround on Windows. - [cds-dk@9.9.1]
cds add testnow uses version 1 of@cap-js/cds-test. - [cds-dk@9.9.1]
cds add vueuses correct placeholder values for book and author inApp.vue. - [cds-dk@9.9.1]
cds debugsupport for latest Chrome versions. - [cds-dk@9.9.1]
cds watchruns ESM projects withtsxagain, so that.jsimport are rewritten to.ts. This got broken in 9.9.0, but used to work in 9.8. - [cds-dk@9.9.1]
cds addonly adds theevent-mesh.jsonif a facet requiring the file is run. - [eslint-plugin-cds@4.2.3] Don't fail if the
tree-sitterdependency cannot be installed. This might happen in WebContainer environments where native modules cannot be loaded. - [eslint-plugin-cds@4.2.2]
auth-valid-restrict-grantnow also considers inherited actions. - [cds-compiler@6.9.2] api: when the environment variable
CDSC_TRACE_APIis 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
extendcorrectly shadow an element from an include - do not issue a warning for a correct use of
$projection
- make an element added via
- [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_entitieserroneously influenced the OData service document - [cds@9.9.1] Newly introduced
EXPAND_MAX_LEVELS_EXCEEDEDerrors 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_stringin 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/getCsnfor non-existing tenants returns a model again instead of throwing an error. - [cds-mtxs@3.9.1] More robust behavior of the
cds.xt.serviceManagerAPI 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-mtxAPI usage does not serve MTX services multiple times. - [cds-mtxs@3.9.1] It is now possible to register on the
bootstrapevent in thecli.jsfile to handle that event when running thecds-mtxcommand. - [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
status404 throw without retries.
April 2026
Added
- [cds-dk@9.9.0]
cds buildroutes.hdbsynonymconfigfiles with*.configureproperties to thecfg/folder for HDI template substitution. - [cds-dk@9.9.0]
cds deployalso supports-bas a shortcut for--resolve-bindings. - [cds-dk@9.9.0]
cds importnow supports--resolve-bindings. - [vscode-cds@9.9.0] WorkspaceSymbols API:
/xto 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 useextend existingEnumSymbol with @Anno, like it is already possible insideextend … with {…} - when the new options
v7KeyPropagationis set, the propagation of thekeyproperty in queries is simplified, and thekeyproperty is not propagated when including structures into types
- add support for extending views/projections with several SQL clauses:
- [cds-compiler@6.9.0] odata: set
meta.compilerCsnFlavorin the OData transformed CSN - [cds-compiler@6.9.0] seal: set
meta.compilerCsnFlavorin the SEAL transformed CSN - [cds-compiler@6.9.0] effective: set
meta.compilerCsnFlavorin the effective CSN - [cds-compiler@6.9.0] sql:
- set
meta.compilerCsnFlavorin SQL transformed CSN - allow single-leafed structures within a
liston the left-hand side of theINoperator. For example(author, struct) in (...)becomes(author_ID, struct_leaf) in (...). - support
cds.Vectoron Postgres and H2
- set
- [cds.java@4.9.0] The i18n message key used with
@assertis now also used as error code on resulting validation errors. - [cds.java@4.9.0] Support OData v4 Date and Time 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.defaultsnow 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, andnano100_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.VectorinStringandfloat[]format.
- [cds4j@4.9.0] Support
cds.Vectoron H2, SQLite and PostgreSQL. - [cds4j@4.9.0] Support
CQL.vector_embeddingon SAP HANA, H2 and SQLite. - [cds4j@4.9.0] Support
CQL.l2Normalizeon 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 assrv.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.appidfor isolating microservices in shared HDI scenarios- The experimental option
targetPrefixis temporarily kept to allow flushing tasks that rely on it, but will be removed soon
- The experimental option
- Streamlined aggregation of
queuedservice effective configuration
- Support for
- [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)
- Efficient leftover processing by maintaining a schedule in
- [cds@9.9.0] In addition to
.csvfiles, and.jsonfiles, initial data can now also be provided via.yamlfiles- Limitation: Only supported in Node.js runtimes, so far, not yet by
cds buildfor Java, and for production deployments to HANA
- Limitation: Only supported in Node.js runtimes, so far, not yet by
- [cds@9.9.0] Support
$selectand$expandfrom draft actions:draftNew,draftPrepare,draftActivate, anddraftEdit - [cds@9.9.0] Enable referencing action request responses in
dependsOnof 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-clientis not installed or forced viacds.remote.native_fetch = true - Known limitations:
- Resolving destinations via the BTP Destination Service is not supported
- Only basic authentication is supported
- Used automatically when
- [cds@9.9.0]
cds.infer.elementsnow also supports SQL-style casts, wildcard overrides andexcludingclauses - [cds@9.9.0] Support for restricting the levels of
$expand(beta)@Capabilities.ExpandRestrictions.MaxLevelsdefines the maximum allowed depth of an$expandstarting from the annotated entity- Additionally,
@Capabilities.ExpandRestrictions.Expandable: falseis 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, andDEPLOY_IDare now forwarded to the HDI deploy environment. - [cds-mtxs@3.9.0] Database deployment can be individually disabled for
cds.xt.SmsProvisioningServiceorcds.xt.SaasProvisioningServicefor 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.Messagesto model oft0. - [cds-mtxs@3.9.0] Subscription payloads may now include a
custom_labelin the_.hdi.createoptions 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
- [cds-dk@9.9.0]
cds add html5-repocreates destinations as part of the app deployer module instead of initial destinations in the destination service. - [cds-dk@9.9.0]
axiosis removed fromdependencies. - [cds-dk@9.9.0]
cds initno 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-agentin favour of native VS Code / fetch proxy handling. - [vscode-cds@9.9.0]
CAP Release Notespage 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
compilerVersionto 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
- add
- [cds-compiler@6.9.0] odata:
- update OData vocabularies: Common, Core, UI
- using
@readonlywith an expression value on entities or aspects is no longer silently accepted and now produces an error
- [cds.java@4.9.0]
cds-feature-bdcenforces 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-activenow defaults totrue. In case it is set tofalseor 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-mcpto 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
@asserterror messages are now used as error codes. The genericASSERTerror key is no longer used if themessageis not an i18n key.
Fixed
- [cds-dk@9.9.0]
cds add xsuaa --plan brokerdoes not use planapplicationin approuter scenarios. - [cds-dk@9.9.0]
cds add postgresfor Kyma no longer adds an invalidvalues.yamlentry forpostgres-db-deployer. - [cds-dk@9.9.0]
cds init/add esmnow also fillspackage.jsonwith proper content. - [cds-dk@9.9.0]
cds deploy --to hana --resolve-bindingsno longer overwrites credentials of all hana-taggedVCAP_SERVICESentries with the target container's service key when multiple HDI bindings are present. - [cds-dk@9.9.0]
cds add datanow 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 brokerdoes not use planapplicationin approuter scenarios. - [cds-dk@8.9.13] CVE-2025-15284: update
expressto fix vulnerability withqs<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
castproperty in the CSN for a column with an expand on a to-many association - while crawling tokens for LSP, allow extensions without name
- don't introduce a strange
- [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
onconditions for a column inside an expand without base reference - [cds.java@4.9.0] HCQL V2: placeholder
$keyis 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
RequestContextwhen callingsystemUser(). - [cds.java@4.9.0]
cds-feature-change-trackingperformance 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.MediaTypeand@Core.ContentDisposition.Filenameannotations 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 WHENwith a constant boolean condition on the select list. - [cds@9.9.0] Calculation of
nextLinkbased on$skipTokenfor requests with$topand/or$skip - [cds@9.9.0] Stale entries in
.cds-services.jsonare removed reliably, so thatcds mock/watchno longer try to connect to dead servers - [cds@9.9.0] Configuration shortcuts like
cds.requires[service] = truealways preserve object configuration from other sources - [cds@9.9.0]
cds-serve --project <dir> --service <name>now honors the explicit service instead of defaulting toall - [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_crudrequests 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
$filteron operations with primitive return types - [cds@9.8.5]
compile.for.direct_crudis 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]
TypeErrordue to unchecked access when handlingPUTon 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
- [vscode-cds@9.9.0] Unsupported
playbutton for CDS queries in theCAP Release Notespage.
March 2026
Added
- [cds-dk@9.8.2]
cds initnow removes the.vscodefolder 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 postgresnow supports Kyma with automatic database provisioning and IP whitelisting. - [cds-dk@9.8.0]
cds deploy --to hana --store-credentialsnow warns about the deprecated option--store-credentials. - [cds-dk@9.8.0]
cds importnow uses the default options defined viacds.import.options[<from>] = {option: 'value'} - [cds-dk@9.8.0]
cds versionnow shows version of@sap/eslint-plugin-cds. - [cds-dk@9.8.0]
cds version --jsonreturns 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
- Add support for
- [cds.java@4.8.0] Support aggregate functions in
@assert. - [cds.java@4.8.0] Setting
cds.messaging.services.<key>.queue.config.channel: nullfor a Kafka channel-based messaging service now disables the default channel. If no channel is explicitly configured for an event using@kafka.channelthe 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
addgoal of thecds-maven-pluginnow adds a dependency tocf-java-logging-support-servletfor 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.NewActionnow have a default@Onhandler. - [cds.java@4.8.0] Setting
cds.drafts.postActivecauses plain POST requests to a draft-enabled entity (without explicitIsActiveEntity) 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 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.appidallows 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 = falseuntil cds10
- In case this causes issues, you can opt-out with
- [cds@9.8.0] $compute supports decimal constants
- [cds@9.8.0] Support
/$metadatarequests in OData batch - [cds@9.8.0] Support for
@odata.bindparameters 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=minimalheader 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
$batchrequest exclusively containsGETrequests - Note: Parallel processing of atomicity groups is in conflict with OData specification for
multipart/mixed! - Additional experimental feature: Bundle independent
GETrequests into single transaction viacds.odata.group_parallel_gets=true
- Only applicable if
- [cds@9.8.0]
hcql: request raw stream via http headerAccept: 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
- [cds-dk@9.8.0]
cds add multitenancydoes not add an explicitjavaprofile to the main app any more. - [cds-dk@9.8.0]
cds deployandcds bindsupport Kyma-by-default for projects with Kyma-only deployment descriptors. - [cds-dk@9.8.0]
cds deploy --to hana --on k8snow supports deploying to SAP HANA using an existing Kubernetes service binding, allowing non-default Kyma naming conventions. - [cds-dk@9.8.0]
cds importnow correctly imports Views with Parameters from a given OData EDMX service definition. - [cds-dk@9.8.0]
cds importnow 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
caseexpressions, queries, and subqueries
- [cds.java@4.8.0] Generated
package.jsonfor new projects no longer contains adescription,repositoryandlicense. - [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|endsWithis 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.envnow 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 || ^10for@eslint/js - [cds@9.8.0] Outbound
hcqlrequests always viaPOST
Fixed
- [cds-dk@9.8.2]
cds add workzonefor Kyma correctly adds thehtml5-apps-repo-runtimeto itsChart.yaml. - [cds-dk@9.8.2]
cds add app-frontin combination withcds add iascorrectly includes allIASDependencyNamesettings. - [cds-dk@9.8.2]
cds buildhas improved performance in some scenarios. - [cds-dk@9.8.1]
cds buildplugins correctly formats a thrownBuildErrorin the logs. - [cds-dk@9.8.1]
cds versionalso reports a cds-dk installation in Java projects that don't have such a dependency in theirpackage.json. - [cds-dk@9.8.0]
cds bindreports additional error information while accessing Cloud Foundry services. - [cds-dk@9.8.0]
cds versionnow works again if executed in subfolders of Java projects without apom.xmlfile. - [cds-dk@9.8.0]
cds add workzonein combination withcds add iasadds theHTML5.IASDependencyNamefor thesrv-api. - [cds-dk@9.8.0]
cds add lintnow creates an ESLint config file again. - [cds-dk@9.8.0]
cds importnow correctly handles enum types as keys in EDMX v4 import. - [cds-dk@9.8.0]
cds pushnow 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
- do not report validation errors on entities marked as
- [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
falseliterals. - [cds.java@4.8.0] Fixed a bug, causing errors in case custom
EventContextinterfaces were (package) private. - [cds.java@4.8.0] Fixed a bug, causing draft data created from a deep update to have
IsActiveEntityandHasDraftEntityset tonull. - [cds.java@4.8.0] Fixed a bug, causing incorrect executions of cds-maven-plugin
buildandresolvegoals, when executed from the root directory. - [cds.java@4.8.0] Fixed a bug, causing drafts to be created in OData V4, even if
IsActiveEntitywas explicitly set totruein 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
exitson runtime views in infix filters. - [cds4j@4.8.0] Fixed SQL error when using
existspredicates in calculation expressions. - [cds4j@4.8.0] Fixed a bug forcing runtime view mode
resolvefor queries usinglock(null)(incl. queries parsed from cqn). - [cds4j@4.8.0]
matchesPatternis 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.statusCodeof batch sub-requests did not consider potential modifications duringsrv.on('error') - [cds@9.8.4] Restore login challenge for late
401with 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_crudis considered duringcds build - [cds@9.8.0] OData JSON batch:
- Response value formatting and escaping for non
application/jsonresponses - Setting correct
content-typeheader value for all content types
- Response value formatting and escaping for non
- [cds@9.8.0]
content-lengthis 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.spawnif extended model could not be loaded - [cds@9.8.0] Set
msg.tenant&msg.eventof 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-v2formatting for values used inbeween- and,inandlambdatype expressions - [cds@9.8.0] Appending
/$valueto an entity that is not a media entity returns400 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.Extensionscannot be read. - [cds-mtxs@3.8.1] For HANA, tenant subscription now stores the tenant database
schemaincds.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 thestatus.
February 2026
Added
- [cds-dk@9.7.0]
cds debugis now supported for Kubernetes/Kyma deployments. - [cds-dk@9.7.0]
cds init --nodejsas a shortcut forcds 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 hananow supports--outto specify the output directory for generated files. - [cds-dk@9.7.0]
cds mock <service>as a shortcut forcds serve --mocked --project <service> --in-memory? --port 0. - [cds-dk@9.7.0]
cds add iasadds a URL for local approuter testing toredirect-urisif approuter is configured. - [cds.java@4.7.0] Added resilient connection handling in
cds-feature-kafkafor the case that the Kafka cluster is not available when a microservice starts. - [cds.java@4.7.0] Improved handling of
@assertand dynamic@mandatory/@inapplicableon managed associations. - [cds.java@4.7.0] Added support for
publishPrefixandsubscribePrefixin configuration forcds-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
$nowas default value for elements of typeDate. - [cds4j@4.7.0] Support function
ceilas synonymn forceiling. - [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
@cascadeannotations. - [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.datato 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.NewActionfor each draft-enabled entity duringcompile.for.odataviacds.fiori.direct_crud=true - [cds@9.7.0] Support for
nullvalue in@odata.bind - [cds@9.7.0] Validation of flow annotations at compile step
Changed
- [cds-dk@9.7.0]
cds versionreceived major enhancements: It's now fully based on thenpm lscommand and always prints a tabular output. Also some new flags were added; checkcds version --helpfor details. - [cds-dk@9.7.0]
cds deploy --to k8sincreased the timeout to wait for the HDI container creation from 120 to 180 seconds. - [cds-dk@9.7.0]
cds addfacets now abort when executed in a folder that is neither a Node.js nor a Java project. - [cds-dk@9.7.0]
cds add lintnow also adds the .java extension to the files that are linted within VSCode. - [cds-dk@9.7.0]
cds initnow 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 importnow 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 builddoes not ignore wildcarded folders likeapp/*any more. - [cds-dk@9.7.0]
cds env --resolve-bindings/-balso considers local service bindings. - [cds.java@4.7.0]
Updatestatements triggered fromdraftActivatenow include a key filter in the statement'sref. - [cds.java@4.7.0]
cds-feature-flownow 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 updatelastAttemptTimestampof outbox messages (instead of relying on@cds.on.update: $now) - [cds@9.7.0]
expressis no longer a peer dependency of@sap/cdsbut 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]
hcqlresponse format:{ data: [], errors: [] } - [cds-mtxs@3.7.1] Provisioning service calls now skip
cds.xt.DeploymentServiceoperations if it is disabled, logging only a warning.
Fixed
- [cds-dk@9.7.2]
cds build --for mtx-sidecarcorrectly resolves@sourcein custom MTX sidecar services. - [cds-dk@9.7.2]
cds buildnow utilises caching for workspace resolution, which will speed up build times for projects with many workspaces. - [cds-dk@9.7.2]
cds addcommands don't augment Helm Charts if not managed by CAP. - [cds-dk@9.7.2]
cds add approuterfor Kyma configures token exchange for managed approuter scenarios. - [cds-dk@9.7.2]
cds bindreports additional error information while accessing Cloud Foundry services. - [cds-dk@9.7.1]
cds add completionnow works without specifying the project runtime. - [cds-dk@9.7.1]
cds add xsuaacorrectly adds the the binding for thehtml5-apps-deployeron Kyma. - [cds-dk@9.7.1]
cds versionprints an older format in a legacy situation. - [cds-dk@9.7.1]
cds add nodejsis automatically added in BAS scenarios for compatibility if no other runtime is specified. - [cds-dk@9.7.1]
cds add data -nworks correctly forComposition of onescenarios. - [cds-dk@9.7.0]
cds add sqlite --for productionadds@cap-js/sqlitetodependencies. - [cds-dk@9.7.0]
cds build --wsfixes a race condition. - [cds-dk@9.7.0]
cds buildnow places thei18nfolder in the generated output in nested locations. - [cds-dk@9.7.0]
cds build --for mtx-sidecarloads CAP plugins from the MTX sidecar instead of the main app for generating the sidecar CSN. - [cds-dk@9.7.0]
cds add iasuses a matchingIASDependencyNamefor the application content deployer. - [cds-dk@9.7.0]
cds add iasuses a more genericredirect-urispattern. - [cds-dk@9.7.0]
cds importno 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 multitenancyfor Java correctly creates apackage-lock.jsonin mtx/sidecar. - [cds-dk@9.7.0]
cds add xsuaaworks properly when executed aftercds add workzone. - [cds-dk@8.9.14] CVE-2026-25639: Update
axiosversion 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
9and10. - [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-targetsto only warn when a string literal is passed as parameter. - [eslint-plugin-cds@4.1.2]
assoc2many-ambiguous-keyno 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
usingdeclaration referring to nothing (fixes regression introduced with v6.7.0 if there is a file containing anamespacedeclaration, 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
filterpredicate of$applyin 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
FALSEin 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
500instead of400(not supported) when setting theContent-Type: application/pdfheader 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
$selfin 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
existspredicates in runtime views. - [cds@9.7.1]
DELETErequests nulling a@mandatoryproperty - [cds@9.7.1] Correctly call remote collection bound action for
odata-v4services - [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
- Status value validation can be disabled via
- [cds@9.7.0] Correctly respond with status
404when@cds.api.ignoreannotated action is requested - [cds@9.7.0] Ensure plugin debug emitted with
DEBUG=all - [cds@9.7.0] Prevent app crash when
JSON.parseof 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?.jwtover JWT in HTTP header of incoming request - [cds@9.7.0] References to child elements in
@Common.Textannotations 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 minifyno 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.numericSeverityfrom appearing in persistent draft messages (in addition to the correct propertynumericSeverity) - [cds-mtxs@3.7.1] HANA deployment parameters set via the
HDI_DEPLOY_OPTIONSenvironment are now correctly evaluated.
Removed
- [cds@9.7.0]
@cds.on.update: $nowfromcds.outbox.Messages.lastAttemptTimestamp
January 2026
Added
- [vscode-cds@9.7.0] Multi-Cursor support for range selection
- [vscode-cds@9.7.0] Folding range for consecutive
usingstatements - [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 behaviorcds.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 matchingcds.workspace.persistency.restoreAfterStartup: restore all persisted indexes after start-upcds.workspace.persistency.indexAllAfterStartup: index all files not yet persistedcds.workspace.persistency.garbageCollectOrphanedIndexesAfterStartup: index files are written per content. Delete index files with outdated content after start-upcds.workspace.persistency.garbageCollectOrphanedIndexesAfterNSaves: Delete index files with outdated content after specified number ofSaverequestscds.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 withcds.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=1for the container query.
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
@hierarchyannotation 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
- [cds-dk@9.6.1] CVE-2025-15284: update
expressto fix vulnerability withqs<6.14.1. - [cds-dk@9.6.1]
cds watchis more efficient on Linux with respect toinotifyevents. 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 --productioncorrectly includesmessage.propertiesfrom i18n files provided by CAP plugins. - [cds-dk@9.6.1]
cds add samplefixes a warning about unused imports in app/common.cds. - [cds-dk@9.6.1]
cds initfixes some rare argument parsing errors. - [vscode-cds@9.7.0] Show
CAP Release Notesautomatically only if timestamp of page changed. - [vscode-cds@9.7.0] Formatter: align element names after
keykeyword 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
*_betweenwith 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].credentialsconfigurations using values from.cds-services.json - [cds@9.6.3]
queue: Exactly-once guarantee only withlegacyLocking: false - [cds@9.6.2] Consider
@mandatory.messagefor the error message, when a mandatory action / function parameter is not provided - [cds@9.6.2] Respond with error code
400when receiving requests that useany()/all()filters on an association to one - [cds@9.6.2] Error message of unknown property check will no longer include
undefinedto 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
404for non-existing tasks. - [cds-mtxs@3.7.0] In combination with
@cap-js/hanaversion 2.6.0 pool connection errors with invalid database credentials are handled more gracefully. - [cds-mtxs@3.6.2] Command
cds-mtxnow 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/getCsnnow properly reflects model changes again. - [cds-mtxs@3.6.2] Reading extensions using
/-/cds/extensibility/Extensionsnow also works with an outdated schema of the extension table.
Removed
- [vscode-cds@9.6.0] User setting
cds.workspace.debounceFastChanges, now always enabled