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 checkThat 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 itselfThe 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-appAdd --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
