Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
d6b2b36
chore: Update CLI texts (#2749)
github-actions[bot] Jul 15, 2026
7abbffc
fix typos in tms docu (#2752)
ecklie Jul 16, 2026
ccd9f53
Update dependency adm-zip to ^0.6.0 (#2745)
renovate[bot] Jul 16, 2026
5b5f030
chore: vitepress 2.0.0-alpha.18 (#2755)
chgeo Jul 17, 2026
ebb8db9
Fix content width of shortcuts table (#2756)
chgeo Jul 17, 2026
74ef10a
more details about t0 tenant (#2739)
ecklie Jul 17, 2026
698816d
Update shiki monorepo to v4.3.1 (#2722)
renovate[bot] Jul 17, 2026
f3ce71f
Update dependency @typescript-eslint/parser to v8.64.0 (#2737)
renovate[bot] Jul 17, 2026
6d9eed2
chore(ci): Update workflow dependencies (#2724)
swaldmann Jul 18, 2026
9ea5222
Fix config popup for strings with colons (#2757)
swaldmann Jul 20, 2026
287ab26
Update CODEOWNERS for maha to replace rene (#2758)
renejeglinsky Jul 20, 2026
8c8b3f1
Fix external link icon for Safari (#2762)
chgeo Jul 21, 2026
d01a5a0
Clarify ":1" syntax in infix filter (#2760)
stewsk Jul 22, 2026
d03a0a2
chore: Update CLI texts (#2763)
github-actions[bot] Jul 22, 2026
111a7be
Added dev trace output section to Java observability page (#2753)
davidhunglam Jul 22, 2026
d9e5e10
Improve docs for `cds bind` in tests (#2765)
chgeo Jul 23, 2026
5d28303
Update dependency com.sap.cds:cds4j-api to v5.0.1 (#2766)
renovate[bot] Jul 23, 2026
c913b45
update vite-plugin-cds (#2773)
Akatuoro Jul 24, 2026
83183ff
Update dependency com.sap.cds:cds-services-api to v5.0.1 (#2776)
renovate[bot] Jul 28, 2026
3f38477
Minor adjustments to mcp.md (#2772)
qmacro Jul 28, 2026
82dc883
Add SAP API Policy note to MCP adapter doc (#2764)
maxieckert-sap Jul 28, 2026
c6761c4
Fixed dependency to monaco-editor
danjoa Jul 28, 2026
4541f31
docs: Enhance MCP documentation. (#2743)
mgnther Jul 28, 2026
8e6a6a7
Fine-tuned adherance to API Policy
danjoa Jul 28, 2026
3f01ec9
Update dependency @sap/cds to v10.0.4 (#2774)
renovate[bot] Jul 28, 2026
a00f632
Update dependency @cap-js/cds-typer to v0.40.1 (#2771)
renovate[bot] Jul 28, 2026
82810b8
Update dependency sass to v1.102.0 (#2770)
renovate[bot] Jul 28, 2026
4b6490a
Remove Node/Java toggle and unify cloud foundry deployment docs (#2775)
smahati Jul 28, 2026
0e7b2c9
Update dependency @typescript-eslint/parser to v8.65.0 (#2768)
renovate[bot] Jul 28, 2026
4a0b35e
update the ft provider snippet (#2780)
johannes-vogel Jul 29, 2026
4c32097
chore: Update CLI texts (#2779)
github-actions[bot] Jul 29, 2026
33ae62d
docs: add RestTestClient integration testing example (#2782)
rjayasinghe Jul 30, 2026
d8d0554
Clean up and revise frontmatter like `synopsis` (#2789)
chgeo Jul 31, 2026
2cb880f
Update dependency @cap-js/cds-typer to v0.40.2 (#2786)
renovate[bot] Jul 31, 2026
f1bbff9
Update dependency globals to v17.8.0 (#2783)
renovate[bot] Jul 31, 2026
1f46176
chore: Update Java Properties (#2778)
github-actions[bot] Jul 31, 2026
5677dd8
feat: `sqlite:memory` preset for SQLite in production (#2784)
swaldmann Jul 31, 2026
a444c24
Update dependency monaco-editor to v0.56.0 (#2777)
renovate[bot] Jul 31, 2026
45e396d
Update dependency @sap/cds to v10.0.5 (#2791)
renovate[bot] Jul 31, 2026
c1e4852
Fix click on StatusBadge in dev mode (#2792)
chgeo Jul 31, 2026
5c0ec66
Fix Badge text not to appear in outline (#2793)
chgeo Jul 31, 2026
77f55f8
Restored namespace for FlightsService
danjoa Aug 3, 2026
42c2e50
remove `--ws-pack` from microservices guide (#2796)
swaldmann Aug 4, 2026
73188f5
Update dependency @mdit/plugin-dl to v1.0.3 (#2794)
renovate[bot] Aug 4, 2026
f2eeca3
Update dependency com.sap.cds:cds4j-api to v5.0.2 (#2798)
renovate[bot] Aug 4, 2026
bd60860
Updated API Policy-related disclaimers
danjoa Aug 4, 2026
f263ff7
Merge remote-tracking branch 'origin/cap.cloud.sap' into patch-release
smahati Aug 5, 2026
33a96d2
update version in package.json
smahati Aug 5, 2026
6ce1321
Update dependency com.sap.cds:cds-services-api to v5.0.2 (#2800)
renovate[bot] Aug 5, 2026
e1deac3
MCP: still mark as beta. Note on Java not released yet. (#2803)
chgeo Aug 5, 2026
9ccba4a
Merge remote-tracking branch 'origin/main'
chgeo Aug 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
# We start with defining ownership globally and later on can get more granular.

# General content
* @renejeglinsky @danjoa
* @smahati @danjoa

node.js/ @smahati @renejeglinsky @danjoa
java/ @smahati @renejeglinsky @danjoa
tools/ @chgeo @swaldmann @renejeglinsky
node.js/ @smahati @danjoa
java/ @smahati @danjoa
tools/ @chgeo @swaldmann @smahati

# Infra
.github/ @chgeo @swaldmann
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v7
- name: Setup Pages
uses: actions/configure-pages@v5
uses: actions/configure-pages@v6
- name: Use Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: 22
node-version: 24
cache: 'npm'
- run: npm ci
- run: npm run lint
Expand All @@ -58,4 +58,4 @@ jobs:
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
uses: actions/deploy-pages@v5
11 changes: 3 additions & 8 deletions .vitepress/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,11 +97,6 @@ const config = defineConfig({

vite: {
plugins: [...playground.plugins()],
esbuild: {
supported: {
'top-level-await': true //browsers can handle top-level-await features in special cases
},
},
build: {
chunkSizeWarningLimit: 6000, // chunk for local search index dominates
},
Expand Down Expand Up @@ -139,8 +134,8 @@ const siteURL = new URL(process.env.SITE_HOSTNAME || 'http://localhost:4173/docs
if (!siteURL.pathname.endsWith('/')) siteURL.pathname += '/'
config.themeConfig.capire = {
versions: {
java_services: '5.0.0',
java_cds4j: '5.0.0',
java_services: '5.0.2',
java_cds4j: '5.0.2',
cloud_sec_ams: '3.8.1'
},
gotoLinks: [],
Expand Down Expand Up @@ -169,7 +164,7 @@ config.themeConfig.search = {
tokenize: text => text.split( /[\n\r #%*,=/:;?[\]{}()&]+/u ), // simplified charset: removed [-_.@] and non-english chars (diacritics etc.)
processTerm: (term, fieldName) => {
term = term.trim().toLowerCase().replace(/^\.+/, '').replace(/\.+$/, '')
const stopWords = ['frontmatter', '$frontmatter.synopsis', 'and', 'about', 'but', 'now', 'the', 'with', 'you']
const stopWords = ['frontmatter', '$frontmatter.description', 'and', 'about', 'but', 'now', 'the', 'with', 'you']
if (term.length < 2 || stopWords.includes(term)) return false

if (fieldName === 'text') {
Expand Down
2 changes: 1 addition & 1 deletion .vitepress/theme/components/ConfigInspect.vue
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@

pkgStr.value = JSON.stringify(pkg, null, 2)
rcJsonStr.value = JSON.stringify(pkg.cds??{}, null, 2)
rcJsStr.value = 'exports.' + Object.keys(pkg.cds??{})[0] + ' = ' + (JSON.stringify(Object.values(pkg.cds??{})[0], null, 2)??'').replaceAll('"', '')
rcJsStr.value = 'exports.' + Object.keys(pkg.cds??{})[0] + ' = ' + (JSON.stringify(Object.values(pkg.cds??{})[0], null, 2)??'').replace(/"([^"]+)":/g, '$1:')
rcYmlStr.value = yaml.stringify(pkg.cds)

let envKey = fqn.replaceAll('_', '__').replaceAll(keyDel, '_')
Expand Down
2 changes: 1 addition & 1 deletion .vitepress/theme/components/IndexList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<dl class="index" v-else>
<template v-for="p in pages" :key="p.url">
<dt><a :href="p.url">{{ p.title }}</a></dt>
<dd v-html="p.frontmatter?.synopsis || ''"></dd>
<dd v-html="p.frontmatter?.description || ''"></dd>
</template>
</dl>
</template>
Expand Down
8 changes: 7 additions & 1 deletion .vitepress/theme/components/ShortcutsList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<span class="modal-close" title="Close dialog" @click="visible = false">&times;</span>
<h5 class="no-anchor">Keyboard Shortcuts</h5>
</div>
<div id="shortcuts-list" class="modal-body">
<div id="shortcuts-list" class="modal-body no-wide">
<table>
<tr v-for="cmd in activeCommands" :key="cmd.name">
<td>{{ cmd.name }}</td>
Expand Down Expand Up @@ -194,8 +194,11 @@ td, th {
/* Modal Content */
.modal-content {
position: relative;
display: flex;
flex-direction: column;
overflow: hidden;
resize: both;
box-sizing: border-box;
background-color: var(--vp-c-bg-soft);
margin: 10% auto;
border: 1px solid var(--vp-c-divider);
Expand All @@ -219,6 +222,9 @@ td, th {

/* Modal Body */
.modal-body {
flex: 1 1 auto;
min-height: 0;
overflow: auto;
font-size: 14px;
}

Expand Down
14 changes: 4 additions & 10 deletions .vitepress/theme/components/StatusBadge.vue
Original file line number Diff line number Diff line change
@@ -1,17 +1,11 @@
<template>
<Badge
:type="type"
:text="text"
:title="title"
@click="click" style="cursor: pointer"
/>
<!-- ignore-header: excludes this link's text from the outline/TOC (see VitePress serializeHeader) -->
<a :href="withBase('/releases/#status-badges')" class="ignore-header">
<Badge :type="type" :text="text" :title="title" />
</a>
</template>

<script setup lang="ts">
defineProps<{ type: string, text:string, title:string }>()
import { withBase } from 'vitepress'
function click() {
location.href = withBase('/releases/index#status-badges')
}
</script>
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@

<script setup>
import { ref, watch, onMounted, onUnmounted } from 'vue'
import 'monaco-editor/min/vs/editor/editor.main.css'
import { useData } from 'vitepress'
const { isDark } = useData()
Expand Down
20 changes: 10 additions & 10 deletions .vitepress/theme/components/cds-playground/monaco.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,7 @@ import { shikiToMonaco } from '@shikijs/monaco'

// no correct top-level await in Safari
async function setupMonaco() {
const [monaco, editorWorker, tsWorker] = await Promise.all([
import('monaco-editor/esm/vs/editor/editor.api'),
import('monaco-editor/esm/vs/editor/editor.worker?worker'),
import('monaco-editor/esm/vs/language/typescript/ts.worker?worker'),
import('monaco-editor/esm/vs/basic-languages/javascript/javascript.contribution'),
import('monaco-editor/esm/vs/language/typescript/monaco.contribution'),
import('monaco-editor/esm/vs/language/json/monaco.contribution')
])
const monaco = await import('monaco-editor')

monaco.languages.register({ id: 'javascript' })
monaco.languages.register({ id: 'js' })
Expand All @@ -20,8 +13,15 @@ async function setupMonaco() {

self.MonacoEnvironment = {
getWorker(_, label) {
if (label === 'typescript' || label === 'javascript') return new tsWorker.default()
return new editorWorker.default()
const getWorkerModule = (moduleUrl, label) => {
return new Worker(self.MonacoEnvironment.getWorkerUrl(moduleUrl), {
name: label,
type: 'module'
});
};

if (label === 'typescript' || label === 'javascript') return getWorkerModule('/monaco-editor/esm/vs/language/typescript/ts.worker?worker', label)
return getWorkerModule('/monaco-editor/esm/vs/editor/editor.worker?worker', label);
}
}

Expand Down
2 changes: 1 addition & 1 deletion .vitepress/theme/components/indexFilter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ export default (pages:ContentDataCustom[], basePath:string):ContentDataCustom[]
url: p.url,
title: p.title,
frontmatter: {
synopsis: p.frontmatter.synopsis
description: p.frontmatter.description
},
// this data is inlined in each index page, so omit unnecessary data
src:undefined, html:undefined, excerpt:undefined
Expand Down
16 changes: 16 additions & 0 deletions .vitepress/theme/styles.scss
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,22 @@ img, video.bright {
white-space: nowrap;
}

// Safari may render the invisible Unicode marker used by VitePress as tofu blocks.
// Apply this workaround only to Safari-capable engines.
@supports (font: -apple-system-body) and (-webkit-appearance: none) {
.vp-external-link-icon::after,
.external-link-icon-enabled :is(.vp-doc a[href*='://'], .vp-doc a[target='_blank']):not(:is(.no-icon, svg a, :has(img, svg)))::after {
content: '';
display: inline-block;
width: 11px;
height: 11px;
padding-left: 0;
margin-left: 4px;
line-height: 1;
vertical-align: text-top;
}
}




Expand Down
7 changes: 2 additions & 5 deletions cds/annotations.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
---
# layout: cds-ref
shorty: Annotations
synopsis: >
description: >
Find here a reference and glossary of common annotations intrinsically supported by the CDS compiler and runtimes.
status: released
uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/855e00bd559742a3b8276fbed4af1008.html
---

# Common Annotations

{{ $frontmatter.synopsis }}
{{ $frontmatter.description }}

[Learn more about the syntax of annotations.](./cdl#annotations){.learn-more}

Expand Down
3 changes: 1 addition & 2 deletions cds/aspects.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
---
synopsis: >
description: >
Discusses the differences of the mixin-based approach of Aspects to inheritance as known from languages like Java.
status: released
---

# Aspect-Oriented Modeling
Expand Down
21 changes: 13 additions & 8 deletions cds/cdl.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
---
# shorty: Definition Language
synopsis: >
Specification of the definition language used to model data models and services in an easy and user-centric syntax. Includes a reference and overview of all CDS concepts and features with compact examples.
description: >
Specification of the definition language used to model data models and services in an easy, user-centric syntax, including a reference and overview of all CDS concepts and features with compact examples.
#permalink: /cds/cdl/
uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/855e00bd559742a3b8276fbed4af1008.html
---
Expand Down Expand Up @@ -285,7 +284,7 @@ CDL supports line-end, block comments, and *doc* comments as in Java and JavaScr
/** doc comment */
```

#### Doc Comments
#### Doc Comments

A multi-line comment of the form `/** … */` at an [annotation position](#annotation-targets) is considered a *doc comment*:

Expand Down Expand Up @@ -451,7 +450,7 @@ type EmailAddress : { kind:String; address:String; }

> Keywords `many` and `array of` are mere syntax variants with identical semantics and implementations.

When deployed to SQL databases, such fields are mapped to [LargeString](./types) columns and the data is stored denormalized as JSON array.
When deployed to SQL databases, such fields are mapped to [LargeString](./types) columns and the data is stored denormalized as JSON array.
With OData V4, arrayed types are rendered as `Collection` in the EDM(X).


Expand Down Expand Up @@ -858,7 +857,7 @@ Result result = service.run(Select.from("UsingView"), params);

### Runtime Views { #runtimeviews }

To add or update CDS views without redeploying the database schema, annotate them with [@cds.persistence.skip](../guides/databases/cdl-to-ddl#cdspersistenceskip). This advises the CDS compiler to skip generating database views for these CDS views. Instead, CAP resolves them *at runtime* on each request.
To add or update CDS views without redeploying the database schema, annotate them with [@cds.persistence.skip](../guides/databases/cdl-to-ddl#cdspersistenceskip). This advises the CDS compiler to skip generating database views for these CDS views. Instead, CAP resolves them *at runtime* on each request.

Runtime views must be simple [projections](#as-projection-on), not using *aggregations*, *join*, *union* or *subqueries* in the *from* clause, but may have a *where* condition if they are only used to read.

Expand Down Expand Up @@ -934,7 +933,7 @@ entity Addresses {
```


### Managed (To-One) Associations
### Managed (To-One) Associations
###### managed-associations

For to-one associations, CDS can automatically resolve and add requisite foreign key elements from the target's primary keys and implicitly add respective join conditions.
Expand Down Expand Up @@ -1154,7 +1153,7 @@ entity P_Authors as projection on Authors {
In this example, in addition to `books` projection `P_Authors` has a new association `availableBooks`
that points only to those books where `stock > 0`.

If the filter condition effectively reduces the cardinality of the association
If the filter condition effectively reduces the cardinality of the association (or composition)
to one, you should make this explicit in the filter by adding a `1:` before the condition:

```cds
Expand All @@ -1164,6 +1163,12 @@ entity P_Employees as projection on Employees {
}
```

::: warning `:1` doesn't itself reduce the cardinality
The `:1` syntax itself has no effect on the cardinality. It is only an information by the developer
that the specified condition reduces the cardinality of the association or composition to one.
:::


Filters usually are provided only for to-many associations, which usually are unmanaged.
Thus publishing with a filter is almost exclusively used for unmanaged associations.
Nevertheless you can also publish a managed association with a filter. This will automatically
Expand Down
3 changes: 1 addition & 2 deletions cds/common.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
---
# layout: cds-ref
synopsis: >
description: >
Introduces <i>@sap/cds/common</i>, a prebuilt CDS model shipped with <i>@sap/cds</i> that provides common types and aspects.
uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/855e00bd559742a3b8276fbed4af1008.html
---
Expand Down
4 changes: 2 additions & 2 deletions cds/compiler/hdbcds-to-hdbtable.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
# layout: cds-ref
status: released
description: >
Step-by-step instructions for migrating SAP HANA database deployments from the deprecated `hdbcds` format to `hdbtable`.
---

# Moving From _.hdbcds_ To _.hdbtable_
Expand Down
19 changes: 7 additions & 12 deletions cds/compiler/v2.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,13 @@
---
shorty: Compiler v2
synopsis: >
This document describes the upgrade to compiler version 2, released March 2021. As both compiler version 1 and version 2 are out of maintenance by now,
we expect that all projects have already upgraded. If in doubt, run `cds v` to find out which version of the CAP modules you have in use.

# layout: cds-ref
status: released
description: >
Describes the upgrade to CDS compiler version 2 (released March 2021), which is now out of maintenance and expected to already be in use by all projects.
---

<!-- Keep this page, as _many_ links point to it! -->

# Upgrade to Compiler v2

{{ $frontmatter.synopsis }}
{{ $frontmatter.description }}

CDS compiler version 2 brings numerous improvements, which allow us to significantly streamline model processing going forward.
Changes mostly affect internal implementations of the compiler and nonpublic parts of the artifacts produced by the compiler (CSN, EDMX, ...), hence are unlikely to be observed by users of CDS.
Expand Down Expand Up @@ -636,7 +631,7 @@ CAP Java supports using CDS models that have been compiled with the CDS complier

For every entity that has *localized* elements the CDS compiler [behind the scenes](../../guides/uis/localized-data#behind-the-scenes) generates a corresponding "texts" entity that holds the translated texts. The name of this entity changes with CDS compiler v2.

::: warning
::: warning
With compiler v1 the "texts" entity is generated with the suffix `_texts`, while the compiler v2 uses the suffix `.texts`!
:::

Expand Down Expand Up @@ -711,7 +706,7 @@ CAP Java allows to [provide initial data](../../guides/databases/initial-data) t
mv bookshop-Books_texts.csv bookshop-Books.texts.csv
```

::: warning
::: warning
If a CSV file has already been deployed to a productive SAP HANA schema it can't be renamed any longer. To support this situation cds deploy as well as the CSV data loader in CAP Java still suppport CSV files with a `_texts` suffix.
:::

Expand Down Expand Up @@ -754,7 +749,7 @@ In this example, the return type of the `cancel` function is automatically expos

With compiler v1 this change was also reflected in the CSN. With compiler v2 this is not the case any longer.

::: warning
::: warning
If types are used in a service that are defined outside of the service the [generated accessor interface](../../java/cds-data#generated-accessor-interfaces) will change when upgrading from compiler v1 to v2!
:::

Expand Down Expand Up @@ -838,7 +833,7 @@ OData, however, does not support anonymous types. Hence, the compiler will autom

In this example the compiler generated the type `Person_emails` in the OData service `hr`.

::: warning
::: warning
If an inline defined type is used in a service the [generated accessor interface](../../java/cds-data#generated-accessor-interfaces) will change (an inner interface is generated) when upgrading from compiler v1 to v2!
:::

Expand Down
Loading
Loading