The cap2UI5 Ecosystem
cap2UI5 is not one repository. It is a chain of six — plus the upstream project they all descend from — and almost every file you can see is generated by the one before it. That matters the moment you want to change something or report a bug: editing the obvious place usually means editing a build output, and your change disappears on the next sync.
The repositories
The first row is the upstream project; the six below it are the cap2UI5 chain.
| Repository | What it is | Hand-written? |
|---|---|---|
| abap2UI5/abap2UI5 + abap2UI5/samples | the upstream ABAP original and its sample catalogue | yes — but that is a different project |
| builder-abap2UI5-js | mirrors upstream, transpiles ABAP→JS, assembles the platform-neutral core package abap2UI5 | src/, scripts/, test/ |
| builder-cap2UI5 | assembles the CAP app from its own src/ plus the mirrored core, then publishes it | src/, scripts/, test/ |
| cap2UI5 | the deployable CAP app — what you clone to run it | no, except .github/ |
| builder-cap2UI5-web | bundles the app into a static, backend-less site | yes |
| web-cap2UI5-build | the built playground | no |
| docs | this site | yes |
How a change flows through
abap2UI5 (ABAP)
│ nightly mirror + transpile
▼
builder-abap2UI5-js ── core package `abap2UI5` ──┐
│ mirror
▼
builder-cap2UI5
│ assemble + publish 1:1
▼
cap2UI5 ← the app you deploy
│ trigger
▼
builder-cap2UI5-web
│ esbuild bundle
▼
web-cap2UI5-build → GitHub PagesEach hop is a scheduled GitHub Actions workflow. A change in upstream ABAP reaches the playground without anyone touching a keyboard — and so does a mistake, which is why every hop has a gate (transpile parse gate, load gate, unit-test ratchet, app test suite, browser smoke test).
Where do I report this?
| The problem | The repository |
|---|---|
| an app behaves wrong, a control renders wrong | abap2UI5 if it reproduces there too, otherwise builder-abap2UI5-js |
| a transpiled class is wrong or missing | builder-abap2UI5-js |
| the CAP app: server wiring, service, database, deployment descriptors | builder-cap2UI5 (not the app repo — it is overwritten) |
| the playground is broken or stale | builder-cap2UI5-web |
| these docs are wrong | docs |
Rule of thumb: if the file you want to change lives in a repository that says "generated" above, the fix belongs one hop upstream. Each generated repo's AGENTS.md names its source explicitly.
What this means for your own apps
Everything the pipeline owns is overwritten. Your code must live somewhere it does not reach:
srv/app/in the app repo — but note this folder ships from builder-cap2UI5 and is replaced on every publish, so it suits demos, not real projects.an external folder registered at startup — the safe option:
jsrequire("abap2UI5/register-apps")(__dirname + "/my-apps"); // or: Z2UI5_APP_DIRS=/abs/path/to/my-apps cds-servenever
core/orcore/srv/app/samples/— both are replaced wholesale by the nightly sync.