Working Off-Stack ​
An abap2UI5 app usually starts as a class typed straight into a system, living there and nowhere else. That is fine for a first app and not fine for a second one: nothing versions it, nobody reviews it, and the mistakes an abap2UI5 app makes — a control that does not exist on the release your users are on, a binding pointing at nothing — are invisible to the ABAP compiler and show up as a blank screen.
A real project is the same class in a git repository that abapGit pulls into the system, with the checks running before it gets there. abap2UI5/app-template is that repository, already assembled.
What it gives you ​
src/zcl_app_001 |
a working app — an input, a bound table, an event — in the canonical shape its AGENTS.md describes |
abaplint.jsonc |
ABAP syntax and style, with the framework resolved as a dependency, so it compiles the app without an SAP system |
abap2ui5lint.jsonc |
the abap2UI5 linter — the view your ABAP builds, judged against the UI5 API and against your own class |
.github/workflows/check.yml |
both gates on every push and pull request, at the versions package-lock.json pins — so CI and your machine run the same thing |
AGENTS.md |
the conventions an AI assistant should follow in this project, plus a .claude/settings.json allowlist so it can run the gates without asking |
From template to first green check ​
Press Use this template on GitHub, then:
git clone <your new repository>
cd <your new repository>
npm ci
npm run check
That is the first green check, and no SAP system was involved. Two more commands are worth knowing:
npm run check:abap2ui5:fast # skip the browser half — seconds, not a minute
npm run fix # apply the corrections the linter can make itself
The full check loads every view in a headless browser, which needs Chromium
once: npx playwright install chromium.
Make it yours ​
Fresh from the template the repository is still called app-template, the
ABAP package still says abap2UI5 app, and the app is still ZCL_APP_001.
One command changes all three:
npm run rename -- --class zcl_my_app --package "My App" --repo my-app
Add --dry first to see what it would touch. It renames the class in the ABAP
and the CLSNAME in its .clas.xml sidecar — changing only one gives you
an object abapGit imports under one name and ABAP activates under another.
Two things it deliberately leaves to you: the namespace (abaplint.jsonc
requires ^ZCL_ or ^ZCX_; change object_naming there if you develop behind
a company prefix or a registered namespace), and the LICENSE, which still
names abap2UI5 as the copyright holder.
Then into the system ​
Install the framework and then your own repository,
both with abapGit. The starter app needs framework
1.143.0 or newer — that is the release the gates lint against. Open
<your endpoint>?app_start=zcl_my_app and you are looking at the same app the
checks just passed.
Next Steps ​
- Tooling — the editor and agent side of the same loop
- abap2UI5 linter — what the view gate actually checks, and how to adopt it on a codebase that already exists