Starter repository for building abap2UI5 apps — UI5 applications written purely in ABAP. Comes with the validation gates and AI-assistant setup preconfigured, so a new app project starts with everything the abap2UI5 ecosystem has learned about developing with (and by) AI agents.
src/zcl_app_001— a working starter app (input, bound table, event) following the canonical template ofAGENTS.md- abaplint — syntax/style checks with the abap2UI5 framework resolved as a dependency, no SAP system needed
- abap2UI5-linter — checks every
built view statically (unknown/deprecated/too-new controls and members,
binding mistakes, builder-tree defects, chain layout) and renders it
headless with a real
XMLView.create - CI (
.github/workflows/check.yml) running both gates on every push/PR — abaplint from this repo'spackage-lock.json, the view checks through the linter's own GitHub Action (abap2UI5/linter, SHA-pinned), which brings the UI5 runtime and the browser the render gate needs AGENTS.md— the complete app-building reference for AI assistants, plus a.claude/settings.jsonpermission allowlist so autonomous sessions run the gates without prompts
- Click Use this template on GitHub (or fork/clone).
- Install the abap2UI5 framework in
your system via abapGit, then install this repo
the same way. The starter app needs framework 1.143.0 or newer — that
is the release the local gates lint against, pinned in
abaplint.jsonc. - Create an ICF endpoint for the framework's HTTP handler (see the
documentation) and open
<endpoint>?app_start=zcl_app_001. - Make it yours (below), then build your app following
AGENTS.md.
After Use this template the repository is still called app-template: the
name is in .abapgit.xml, the ABAP package still says abap2UI5 app, and the
app is still ZCL_APP_001. One command changes all of it:
npm run rename -- --class zcl_my_app --package "My App" --repo my-appAdd --dry to see what it would touch first. It rewrites the class in the
ABAP and the CLSNAME in its .clas.xml — renaming only one of the two
gives you an object abapGit imports under one name and ABAP activates under
another, which is the mistake this exists to prevent. (xml_consistency in
abaplint.jsonc catches it either way.)
What it renames is written down in template.json, not in the script: the
MCP server and the
VS Code extension hand out this
same template, and they read the same file — so a project started any of the
three ways is the same project.
Three decisions the script deliberately leaves to you:
- Your namespace.
abaplint.jsoncrequires^ZCL_or^ZCX_, which is the customer namespace every system has. If you develop in a registered namespace (/ACME/) or behind a company prefix (ZAB_), changeobject_namingthere first — you make this choice once and live with it for years. - The LICENSE, which still reads Copyright (c) 2026 abap2UI5. It is MIT, so you may keep it, change the holder, or replace it entirely. It is your project now.
- The ABAP package.
src/package.devc.xmlcreates one package. Whether that is$TMPor a transportable package is decided when abapGit first pulls the repository into your system, not here.
Both gates are npm devDependencies, so CI and your machine run the same versions:
npm ci # once - installs abaplint and the linter
npx playwright install chromium # once - only for the render gate
npm run check # both gates, expect 0 issues
npm run check:abap # abaplint only
npm run check:abap2ui5:fast # linter without the render gate (no browser)
npm run fix # apply the linter's mechanical corrections
npm run check:pin # the framework release named in one place onlycheck:pin is the small gate around the one pin nothing else can move: the
framework release in abaplint.jsonc is a tag inside an abaplint dependency,
which Dependabot cannot read, and the same number is repeated in this README
and in AGENTS.md. It fails when the three disagree, and tells you (without
failing) when a newer framework release is out.
Settings (paths, UI5 floor, distribution, rule severities, fail level) live in
abap2ui5lint.jsonc; every rule id is documented at
abap2ui5.github.io/linter.
Prefer no project install? npx @abap2ui5/linter src --no-render runs the
static half straight from npm.
- VS Code extension (Marketplace, Open VSX) — F9 launches a class in an embedded preview against a real system; the linter's findings arrive as editor diagnostics with quick fixes while you type, plus completion for the UI5 API and the class's own binding paths, a template gallery for new apps, and the reconstructed XML view beside the code.
- mcp-server — MCP server giving AI agents the full loop: deploy the class, build the transpiled Node backend, run the app headless and look at a screenshot.
- AGENTS.md — the complete app-building reference (also for humans)
- Documentation — the rendered docs site
- Samples — curated example apps (bindings, events, popups, navigation)
- samples-controls — the official UI5 demo kit rebuilt 1:1 as gate-verified abap2UI5 apps
- samples-stack — abap2UI5 alongside what your system already runs: OData, Smart Controls, RAP (with and without draft), business events, stateful sessions and locks, AMC/APC WebSockets, the MIME repository, the Fiori Launchpad. Reach for it when your app needs data or a stack the plain framework makes no assumption about