---
title: September 2026
versions:
  cdsjs: 10.1.1+
  cdsdk: 10.1.2+
  cdsc: 7.1.0+
  cdsmtxs: 4.1.0+
  java: 5.1.0+
---

# September 2026

<ReleaseBadges />

[[toc]]



## CAP Native AI


### **New:** Top-Level Section in Capire

With this release, capire introduces a new top-level guides section [_Native AI_](/@external//guides/ai) to cover all AI-related topics in one place.

[
  ![Screenshot of the new top-level section's cover page](assets/sep26/new-native-ai-section.png){.ignore-dark style="width: 500px; border-radius: 20px; border: 1px solid #345;"}
](/@external/guides/ai)


### **New:** XTravels Sample

The [_XTravels_ sample](/@external/guides/ai/xtravels-sample.md) demonstrates how to integrate and use multiple MCP services and CAP-level agents in a cohesive travel booking scenario. It provides a hands-on example for developers to understand the practical application of these new capabilities. A must-try for anyone looking to explore CAP Native AI in a real-world context.

[
  ![Screenshot of the Xtravels sample's cover page section](/@external/guides/ai/xtravels-subagents.drawio.svg?raw)
](/@external/guides/ai/xtravels-sample.md)


### **New:** CAP-level Agents <Gamma/>

We newly released plugins to build [_CAP-level Agents_](/@external/guides/ai/cap-agents.md) – both for Node.js and Java. Simply annotate your CDS services with `@agent` to turn them into full-blown agents. These agents run ReAct (Reasoning and Acting) loops within your CAP server and are served via _Agent-to-Agent Protocol (A2A)_. You can optionally accompany them with `AGENTS.md` and `SKILL.md` files.

```cds
@agent service TravelAgentService { ... }
```
```zsh
srv/travel-agent/
 ├── AGENTS.md
 ├── skills/
 │ ├── flight-booking/SKILL.md
 │ ├── itinerary/SKILL.md
 │ └── planning/SKILL.md
 ├── service.cds
 └── service.js
```

A built-in experimental chat preview is available for local development:

[
  ![Screenshot of the experimental chat preview for local development](/@external/guides/ai/chat-preview-bookshop.png){style="width: 600px"}
](/@external/guides/ai/cap-agents.md)

> [!note] CAP Java <Alpha/>
While the Node.js version is already quite mature and tested in productive projects, the Java variant of CAP-level Agents is new, still in _Alpha_, with more limited features.

[Learn more about **CAP-level Agents**.](/@external/guides/ai/cap-agents.md){.learn-more}
[Learn more about **CAP Java agents**.](/@external/java/ai#agents){.learn-more}


### MCP Adapter now GA <GA/>

The [_MCP Protocol Adapters_](/@external/guides/ai/cap-mcp.md) for both Node.js and Java, which were introduced as beta in the [June 26 release](./jun26#mcp-adapter) are now **generally available**, and introduce several improvements and fixes over the previous beta release:

- The [`describe`](/@external/guides/ai/cap-mcp.md#-describe-service) tool's output has been streamlined for token efficiency.
- The [`query`](/@external/guides/ai/cap-mcp.md#-query-entity) tool now uses CQL, which LLMs use most efficiently.
- The [`call`](/@external/guides/ai/cap-mcp.md#-call-action) action tool has been renamed from `call_action` to `call`.

Fixes for the Node.js version include:

- _Generated_ `.drafts` and `.texts` entities were erroneously exposed, now they're skipped.
- _Composition_ targets were skipped erroneously, now they're correctly served.
- _CodeList_ targets were erroneously auto-exposed, now they're skipped.

> [!tip] CQL = SQL++ => well understood by LLMs
> As LLMs are well trained for SQL, they're quick to understand [_CQL_](/@external/cds/cql.md), and generate impressive queries – including path expressions and nested projections. They work much more fluently and efficiently than with [_CQN_](/@external/cds/cqn.md), or _OData_, which are less familiar to them.

For example, here's a CQL query generated by Claude Sonnet 4.5 when it was asked to _"fetch authors with their books written"_:

```cql
SELECT from Authors {
  ID, name, books {
    title, genre.name as genre
  }
}
```

Also the version for CAP Java is now generally available and can be added by including the `cds-adapter-mcp` dependency to your `srv/pom.xml`:

```xml
<dependency>
  <groupId>com.sap.cds</groupId>
  <artifactId>cds-adapter-mcp</artifactId>
  <scope>runtime</scope>
</dependency>
```

> [!tip] Updated Documentation
Learn more in the [_MCP Services_](/@external/guides/ai/cap-mcp.md) guide, which has been significantly updated to reflect these changes and provide guidance on using the new features effectively.




### Embeddings for Node.js


In [April](apr26#vector-embeddings), we rolled out [_CAP-Native Vector Embeddings_](/@external/guides/ai/embeddings) for CAP Java – CAP Node.js now follows. As with the Java variant, it supports the built-in `Vector` type and related vector functions with SAP HANA in production, and with SQLite in [local inner-loop development](/@external/guides/integration/inner-loops.md), as usual for CAP.

```cds
entity Incidents { // ...
  embedding : Vector = vector_embedding( // [!code focus]
    'Title: ' || title || ', Summary: ' || summary,
    'DOCUMENT', 'SAP_GXY.20250407'
  ) stored;
}
```

::: important [See below for additional setup for CAP Node.js](#native-vector-embeddings)
:::

> [!tip] Updated Documentation
> We also took this opportunity to give the [_Vector Embeddings_](/@external/guides/ai/embeddings) guide a thorough update, reflecting the latest capabilities and best practices for using vector embeddings in CAP-based projects.

[
  ![Screenshot of the table of contents of the updated guide](assets/sep26/updated-embeddings-guide.png){.ignore-dark style="width: 500px; border-radius: 20px; border: 1px solid #345;"}
](/@external/guides/ai/embeddings)


### Capire 4 AI Evolution

Following up on providing [AI-friendly capire content](../2025/jan25#ai-friendly-content-in-capire) through [_/llms.txt_](/llms.txt){target="_blank"}, this release adds further enhancements that make capire easier to use for AI assistants and coding agents:

#### Markdown Page Variants

Any capire page can now be accessed in a Markdown variant, which AI tools process much more efficiently than HTML. Clients simply append `.md` to a page's URL – for example, [_/get-started/bookshop.md_](/@external/get-started/bookshop.md){target="_blank"} — or request it with [_Accept: text/markdown_](https://acceptmarkdown.com) header.
{.indent}

#### Markdown Sitemap

A complete, Markdown-based map of the whole Capire structure is made available through [_/sitemap.md_](/sitemap.md){target="_blank"}. The map allows AI tools (and humans) to quickly find what's available and go directly to the right page, drastically saving time and tokens.
{.indent}

#### Outdated Release Notes

Older release notes (grouped under _Archive_ in the sidebar) now show a _"historic"_ banner and appear as _archived_ in [_/llms.txt_](/llms.txt){target="_blank"}. With that, AI assistants are less likely to suggest potentially incorrect advice from old release notes.
{.indent}


## CDS Language

### Simple Boolean Expressions

Boolean expressions (for example, comparisons) used as columns in a view definition are now automatically wrapped in `CASE WHEN …` when generating HANA SQL. This change is necessary because HANA doesn't allow bare predicates in the select list.

```cds
entity BooksInStock as select from Books { title,
  stock > 0 as in_stock // [!code focus]
}
```

Resulting HANA SQL:

```sql
CREATE VIEW BooksInStock AS SELECT title,
  case -- [!code focus]
    when stock > 0 then true -- [!code focus]
    when not stock > 0 then false -- [!code focus]
  end as in_stock -- [!code focus]
FROM Books
```


### Extending `WHERE` clauses

You can now extend a view that already has a `WHERE` or `HAVING` clause. The new condition is combined with `AND`:

```cds
entity PremiumBooks as select from Books where price > 11;
extend PremiumBooks with where title like '%of%';
// effective: where price > 11 and title like '%of%'
```


The compiler adds parentheses automatically when needed to preserve the correct operator precedence.

This change removes the restriction from [Extending Views with CQL Clauses](apr26#extending-views-with-cql-clauses) (April 2026).



### Keys in Nested Projections

The `key` keyword is now supported inside [nested _inline_ projections](/@external/cds/cdl#views):

```cds
entity BooksWithAuthor as projection on Books {
  key ID,
  author.{
    key ID as authorID,  // [!code ++]
    name,
    dateOfBirth
  }
}
```

Before you had to list the elements individually to achieve the same effect:

```cds
entity BooksWithAuthor as projection on Books {
  key ID,
  key author.ID as authorID,  // [!code ++]
  author.name,
  author.dateOfBirth
}
```


## CAP Runtimes

### Ranked Fuzzy Search

On SAP HANA, both CAP runtimes (Java and Node.js) now automatically sort [fuzzy search](/@external/guides/services/served-ootb#fuzzy-search) results by relevance (match score). Client-provided `$orderby` always takes precedence. No application code changes are required.

<video src="./assets/sep26/ranked-search_compressed.mp4" autoplay loop muted webkit-playsinline playsinline class="bright"/>


## CAP Node.js


### Native Vector Embeddings <Gamma/>

In [April](apr26#vector-embeddings), we rolled out [_CAP-Native Vector Embeddings_](/@external/guides/ai/embeddings) for CAP Java – CAP Node.js now follows. To use vector embeddings with SQLite, you need to install the [`@cap-js/ai`](https://github.com/cap-js/ai) plugin, plus ONNX-related packages:

```sh
npm add -D \
  @cap-js/ai \
  @cap-js/sqlite \
  @huggingface/hub \
  @huggingface/tokenizers \
  onnxruntime-node
```

With the plugin, SQLite can generate embeddings with an [ONNX](https://onnx.ai) model, mirroring what CAP Java offers through LangChain4j.

No configuration is needed. The plugin downloads a default embedding model on the first start. See the [`@cap-js/ai`](https://github.com/cap-js/ai#local-vector-embeddings-with-sqlite-experimental) readme for version requirements, model selection, and configuration.



### Destinations w/o Cloud SDK <Beta />

So far, the [_Node-native Fetch API_](apr26#node-native-fetch-api), as introduced in April 2026, couldn't resolve [SAP BTP Destinations](https://help.sap.com/docs/connectivity/sap-btp-connectivity-cf/http-destinations). Hence, in production, [SAP Cloud SDK](https://sap.github.io/cloud-sdk) was still required. With this release, we added built-in support for resolving destinations with these limitations:

- [x] [ProxyType = `Internet`](https://help.sap.com/docs/connectivity/sap-btp-connectivity-cf/http-destinations#proxy-types)
- [x] [Authentication = `NoAuthentication`](https://help.sap.com/docs/connectivity/sap-btp-connectivity-cf/no-authentication-699f0d10fdaf41a8b92367036a7ed1ff)
- [x] [Authentication = `BasicAuthentication`](https://help.sap.com/docs/connectivity/sap-btp-connectivity-cf/basic-authentication-4af3980f96fc467a8f0edad2c7f23f2f)
- [x] [Authentication = `OAuth2ClientCredentials`](https://help.sap.com/docs/connectivity/sap-btp-connectivity-cf/oauth-client-credentials-authentication) -> _newly supported_{.green}


> [!important] Using SAP Cloud SDK
> Install [`@sap-cloud-sdk/http-client`](https://www.npmjs.com/package/@sap-cloud-sdk/http-client) in your project, to have that used automatically instead of the built-in native fetch client. Do so if you use an  authentication type that's not supported yet — for example, `OnPremise` connectivity.


## CAP Java

### JSON Batch Requests <Beta/>

So far, CAP Java only supported `multipart/mixed` OData batch requests.
With this release, we add initial support for [OData v4.01 JSON batch request format](https://docs.oasis-open.org/odata/odata-json-format/v4.01/odata-json-format-v4.01.html#sec_BatchRequestsandResponses).

> [!tip] Benefits:

- **ABAP Compatibility** - Aligns with the default batch calling style used by ABAP systems when invoking remote OData v4 services.
- **Security Inspection** - JSON batch requests can be inspected by the OWASP ModSecurity Core Rule Set, unlike `multipart/mixed` requests.

> [!warning] Current Limitations
> Advanced features such as `dependsOn` for specifying inter-request dependencies aren't yet supported.


### Expands with Excludes

The CAP Java CDS query builder now supports expanding all elements of an association while **excluding** specific ones. Instead of listing every element to include, exclude the ones you don't need with `expand().excluding(e)`:

```java
Select.from(BOOKS).columns(
  b -> b.title(),
  b -> b.author().expand().excluding(a -> a.age())
);
```

The untyped string form is also supported:
<!-- cds-mode: ignore -->
```java
.to("books").expand().excluding("year");
```

[Learn more about using `expand` in CQL statements](/@external/java/working-with-cql/query-api#expand){.learn-more}

### Hierarchies Sorting

The default sort order of siblings within a hierarchy view now respects the annotation.

```cds
@cds.default.order: '<element, ...>'
```

If no such annotation is present, the `order by` of the projection is used as a fallback.

[Convenient for use with Fiori Tree Views](/@external/guides/uis/fiori#fiori-tree-views){.learn-more}


### Toolkit Optimizations

Several updates to the [`cds-maven-plugin`](/@external/java/developing-applications/building#cds-maven-plugin) improve performance in different areas:

#### Faster Maven Builds

Build-related goals are now thread-safe, enabling true parallel execution via multi-threaded Maven builds (using the `-T` parameter) or the Maven Daemon (`mvnd`). Parallel builds can yield significantly faster overall build times.
{.indent}

#### Watch Fast Mode

The `watch` goal provides a new fast mode enabled with the `-Dfast` property, for faster turnaround times after certain kinds of code changes.
{.indent}

#### Class Generation Extended

The `generate` goal (with `generateClasses` enabled) now also generates static implementations for event context interfaces, including their inner interfaces. This change extends the existing approach for entity accessor interfaces and enables faster, reflection-free access without relying on dynamic proxies.
{.indent}

[Learn more about _Code Generation Features_](/@external/java/developing-applications/building#code-generation-features){.learn-more}


<div id="spii" />

## CAP Tools

<div id="jobworkers"/>

### Faster `cds` Completions

Shell completion for `cds` commands is now faster. Completions are pre-generated as static scripts at install time instead of being evaluated on every keystroke. This change eliminates the startup overhead of loading the full CDS runtime on each tab press. Debugger output that previously appeared in debug shells during completion no longer appears.

To activate it, run:

```sh
cds add completion
```

This command replaces the previously installed completion hook with the new static scripts for your shell (Bash, Zsh, fish, or PowerShell). After running the command, reload your shell configuration (for example, `source ~/.bashrc` or `source ~/.zshrc`) as the command output instructs.

::: tip Shell not detected?
If your shell isn't detected automatically, use the `--shell` flag to specify it:

```sh
cds add completion --shell <bash | zsh | fish | gitbash | ps>
```
:::

[`cds completion` in the CDS CLI Guide](/@external/tools/cds-cli#cds-completion){.learn-more}

### IntelliJ Plugin v3

Version 3 of the [CDS IntelliJ Plugin](https://plugins.jetbrains.com/plugin/25209-sap-cds-language-support) adds CDS 10 language support.

In addition, it adds four new formatting options:

| Option | Effect |
|--------|--------|
| `annotationInNewLine` | Starts elements on a new line after annotations. |
| `asProjectionInNewLine` | Starts `as projection on` and `as select from` on a new line. |
| `conditionInNewLine` | Puts `ON` conditions on a separate line. |
| `maxAlignmentWhitespace` | Suppresses an alignment when it would insert more than the configured number of blank spaces, preventing columns from drifting far apart. |

Configure these options in *Settings > Editor > Code Style > CDS*, or add them to your _.cdsprettier.json_ file.


## CAP Plugins

### ORD Plugin

The [ORD plugin](https://github.com/cap-js/ord) `@cap-js/ord@1.5.0` now supports generating [ORD](https://sap.github.io/open-resource-discovery/) resource definitions for **OData**, **REST**, **GraphQL**, **MCP**, and **INA** protocols.

ORD metadata endpoints can be secured with **CF mTLS** certificate-based authentication for production deployments.

Resource file generation during `cds build` now runs in parallel by default, using half of the available CPU cores.

[Find more details on GitHub.](https://github.com/cap-js/ord){.learn-more}


#### Java ORD Plugin Open Source

The plugin providing out-of-the-box Open Resource Discovery (ORD) metadata exposure has been released as open source and is now in the [`cds-feature-ord`](https://github.com/cap-java/cds-feature-ord) repository. The plugin is no longer part of the core CAP Java (`cds-services`) distribution and follows its own versioning and release cadence. However, `cds-services` continues to maintain a compatible version reference in its `pom.xml`. Applications that don't pin a specific version of the ORD plugin automatically receive a compatible version, making this transition transparent for CAP Java applications.



### Attachments

Both Java and Node.js now support **single attachments**. Instead of a list of attachments, an attachment can now be a single field defined directly on an entity using the `Attachment` type. CDS flattens its properties onto the parent entity (for example, `profilePicture_content`, `profilePicture_mimeType`).

::: code-group
```cds [Node.js]
using { Attachment } from '@cap-js/attachments';

entity Employees : cuid {
  name           : String;
  profilePicture : Attachment;
}
```
```cds [Java]
using { Attachment } from 'com.sap.cds/cds-feature-attachments';

entity Employees : cuid {
  name           : String;
  profilePicture : Attachment;
}
```
:::

#### @cap-js/attachments (Node.js)

Version 4 is a major release with breaking changes:

- **Cloud storage SDKs are now optional peer dependencies.** Install only the provider that you need (`@aws-sdk/client-s3`, `@azure/storage-blob`, or `@google-cloud/storage`). A clear error is raised at startup if a required package is missing.
- **Configuration key renamed:** `attachments.outbox` → `outboxed`. The legacy key still works but logs a deprecation warning.
- **`Content-Disposition: attachment` is now the default** for served attachments, preventing browsers from rendering uploaded content (such as SVG or HTML files) inline. Inline serving is opt-in.
- Replaced `axios` with the native Fetch API, reducing external dependencies.
- Fixed a race condition that could leave an attachment stuck in _Scanning_ status and exhaust the connection pool under concurrent rescans.
- Fixed non-draft `PATCH` operations to correctly support deletion of attachment arrays.

#### cds-feature-attachments (Java)

- **Breaking: Java 21 is now the minimum required version.**
- The `Attachments` aspect is now available at the top level — usable without the `sap.attachments` namespace.
- **`Content-Disposition: attachment` is now the default** for served attachments, mirroring the Node.js behavior. To allow inline preview, opt in via annotation on the `content` field. Pairing with `@Core.AcceptableMediaTypes` is recommended.
- New independent `MalwareScannerService` for standalone content scanning.
- Translation support for the `ScanStates` entity.
- AWS Object Store now applies S3 server-side encryption (AES256) by default.

[Learn more about the Attachments Plugin.](/@external/plugins/index.md#attachments){.learn-more}

### Notifications

#### @cap-js/notifications (Node.js)

Version 1 is a major release that completely restructures how the plugin is used:

- **CDS annotations** — Use `@notification` directly in your CDS model as an alternative to JSON config. `cds build` automatically compiles annotated events to `notification-types.json`.
- **E-mail delivery** — Define e-mail templates with Mustache syntax via `@notification.email.subject` and `@notification.email.html` annotations.
- **Batch API** — Send multiple notifications in a single outbox event.
- **i18n support** — Use `{i18n>key}` syntax in annotations.
- **Dynamic priority** — Set priority dynamically via `@notification.priority` with runtime expressions.
- **Opt-out** — Disable the plugin entirely via <Config>cds.requires.notifications.enabled: false</Config>.

#### **New:** cds-feature-notifications (Java) <Alpha />

The Java Notifications plugin is now available as an initial alpha release, bringing the same capabilities to CAP Java:

- `@notification` annotations for declarative notification type definitions, e-mail templates (Mustache syntax), and i18n support.
- Local mode logs notifications to the console without requiring an ANS service binding. Production mode sends to SAP Alert Notification Service via the persistent outbox.
- Navigation target parameters for SAP Fiori Launchpad deep links.
- Optional database storage for sent notifications and a cooldown mechanism to prevent duplicate delivery.

[Learn more about the Notifications Plugin.](/@external/plugins/index.md#notifications){.learn-more}

### **New**{.green} n8n Plugin <Alpha />

The new [`@cap-js/n8n`](https://github.com/cap-js/n8n) (Node.js) and [`cds-feature-n8n`](https://central.sonatype.com/artifact/com.sap.cds/cds-feature-n8n) (Java) plugins let you trigger [n8n](https://n8n.io) workflows directly from CAP applications.

[Learn more about the n8n Plugin.](/@external/plugins/index.md#n8n){.learn-more}
