September 2026
CAP Native AI
New: Top-Level Section in Capire
With this release, capire introduces a new top-level guides section Native AI to cover all AI-related topics in one place.
New: XTravels Sample
The XTravels sample 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.
New: CAP-level Agents Gamma
We newly released plugins to build CAP-level Agents – 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.
@agent service TravelAgentService { ... }srv/travel-agent/
├── AGENTS.md
├── skills/
│ ├── flight-booking/SKILL.md
│ ├── itinerary/SKILL.md
│ └── planning/SKILL.md
├── service.cds
└── service.jsA built-in experimental chat preview is available for local development:
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.Learn more about CAP Java agents.
MCP Adapter now GA GA
The MCP Protocol Adapters for both Node.js and Java, which were introduced as beta in the June 26 release are now generally available, and introduce several improvements and fixes over the previous beta release:
- The
describetool's output has been streamlined for token efficiency. - The
querytool now uses CQL, which LLMs use most efficiently. - The
callaction tool has been renamed fromcall_actiontocall.
Fixes for the Node.js version include:
- Generated
.draftsand.textsentities 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.
CQL = SQL++ => well understood by LLMs
As LLMs are well trained for SQL, they're quick to understand CQL, and generate impressive queries – including path expressions and nested projections. They work much more fluently and efficiently than with CQN, 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":
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:
<dependency>
<groupId>com.sap.cds</groupId>
<artifactId>cds-adapter-mcp</artifactId>
<scope>runtime</scope>
</dependency>Updated Documentation
Learn more in the MCP Services 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, we rolled out CAP-Native Vector 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, as usual for CAP.
entity Incidents { // ...
embedding : Vector = vector_embedding(
'Title: ' || title || ', Summary: ' || summary,
'DOCUMENT', 'SAP_GXY.20250407'
) stored;
}Updated Documentation
We also took this opportunity to give the Vector Embeddings guide a thorough update, reflecting the latest capabilities and best practices for using vector embeddings in CAP-based projects.
Capire 4 AI Evolution
Following up on providing AI-friendly capire content through /llms.txt, 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 — or request it with Accept: text/markdown header.
Markdown Sitemap
A complete, Markdown-based map of the whole Capire structure is made available through /sitemap.md. 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.
Outdated Release Notes
Older release notes (grouped under Archive in the sidebar) now show a "historic" banner and appear as archived in /llms.txt. With that, AI assistants are less likely to suggest potentially incorrect advice from old release notes.
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.
entity BooksInStock as select from Books { title,
stock > 0 as in_stock
}Resulting HANA SQL:
CREATE VIEW BooksInStock AS SELECT title,
case
when stock > 0 then true
when not stock > 0 then false
end as in_stock
FROM BooksExtending WHERE clauses
You can now extend a view that already has a WHERE or HAVING clause. The new condition is combined with AND:
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 (April 2026).
Keys in Nested Projections
The key keyword is now supported inside nested inline projections:
entity BooksWithAuthor as projection on Books {
key ID,
author.{
key ID as authorID,
name,
dateOfBirth
}
}Before you had to list the elements individually to achieve the same effect:
entity BooksWithAuthor as projection on Books {
key ID,
key author.ID as authorID,
author.name,
author.dateOfBirth
}CAP Runtimes
Ranked Fuzzy Search
On SAP HANA, both CAP runtimes (Java and Node.js) now automatically sort fuzzy search results by relevance (match score). Client-provided $orderby always takes precedence. No application code changes are required.
CAP Node.js
Native Vector Embeddings Gamma
In April, we rolled out CAP-Native Vector Embeddings for CAP Java – CAP Node.js now follows. To use vector embeddings with SQLite, you need to install the @cap-js/ai plugin, plus ONNX-related packages:
npm add -D \
@cap-js/ai \
@cap-js/sqlite \
@huggingface/hub \
@huggingface/tokenizers \
onnxruntime-nodeWith the plugin, SQLite can generate embeddings with an ONNX 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 readme for version requirements, model selection, and configuration.
Destinations w/o Cloud SDK Beta
So far, the Node-native Fetch API, as introduced in April 2026, couldn't resolve SAP BTP Destinations. Hence, in production, SAP Cloud SDK was still required. With this release, we added built-in support for resolving destinations with these limitations:
Using SAP Cloud SDK
Install @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.
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/mixedrequests.
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):
Select.from(BOOKS).columns(
b -> b.title(),
b -> b.author().expand().excluding(a -> a.age())
);The untyped string form is also supported:
.to("books").expand().excluding("year");Learn more about using expand in CQL statements
Hierarchies Sorting
The default sort order of siblings within a hierarchy view now respects the annotation.
@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
Toolkit Optimizations
Several updates to the 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.
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.
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.
Learn more about Code Generation Features
CAP Tools
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:
cds add completionThis 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.
Shell not detected?
If your shell isn't detected automatically, use the --shell flag to specify it:
cds add completion --shell <bash | zsh | fish | gitbash | ps>cds completion in the CDS CLI Guide
IntelliJ Plugin v3
Version 3 of the CDS IntelliJ Plugin 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 @cap-js/ord@1.5.0 now supports generating ORD 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.
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 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).
using { Attachment } from '@cap-js/attachments';
entity Employees : cuid {
name : String;
profilePicture : Attachment;
}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: attachmentis 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
axioswith 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
PATCHoperations to correctly support deletion of attachment arrays.
cds-feature-attachments (Java)
- Breaking: Java 21 is now the minimum required version.
- The
Attachmentsaspect is now available at the top level — usable without thesap.attachmentsnamespace. Content-Disposition: attachmentis now the default for served attachments, mirroring the Node.js behavior. To allow inline preview, opt in via annotation on thecontentfield. Pairing with@Core.AcceptableMediaTypesis recommended.- New independent
MalwareScannerServicefor standalone content scanning. - Translation support for the
ScanStatesentity. - AWS Object Store now applies S3 server-side encryption (AES256) by default.
Learn more about the Attachments Plugin.
Notifications
@cap-js/notifications (Node.js)
Version 1 is a major release that completely restructures how the plugin is used:
- CDS annotations — Use
@notificationdirectly in your CDS model as an alternative to JSON config.cds buildautomatically compiles annotated events tonotification-types.json. - E-mail delivery — Define e-mail templates with Mustache syntax via
@notification.email.subjectand@notification.email.htmlannotations. - 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.prioritywith runtime expressions. - Opt-out — Disable the plugin entirely via cds.requires.notifications.enabled: false.
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:
@notificationannotations 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.
New n8n Plugin Alpha
The new @cap-js/n8n (Node.js) and cds-feature-n8n (Java) plugins let you trigger n8n workflows directly from CAP applications.


