web-abap2UI5
A build pipeline and the page it deploys: the abap2UI5abap2UI5One ABAP class implementing z2ui5_if_app is the whole app: the browser loads a generic UI5 shell once, and every interaction after that is an HTTP roundtrip back into ABAP.community org, abap backend downported, transpiled to JavaScript and webpacked into one script that runs inside a browser tab, with no server and no SAP system behind it.
Seeing abap2UI5abap2UI5One ABAP class implementing z2ui5_if_app is the whole app: the browser loads a generic UI5 shell once, and every interaction after that is an HTTP roundtrip back into ABAP.community org, abap run normally means a system to install it in. This repository clones the framework and its samples at a pinned commit, downports them with abaplintabaplintStatic analysis for ABAP that runs outside a system on serialised source in a repository, so ABAP checks run in a pull request and in CI before the code ever reaches a system.community org, abap, transpiles them with @abaplint/transpiler@abaplint/transpilerTranspiles ABAP 7.02 syntax to ES6 JavaScript, so ABAP code and its unit tests run on Node.js in CI without an ABAP system, with optional SQLite, PostgreSQL, Snowflake or SAP HANA drivers.community org, abap and webpacks the result into a single bundle: at runtime app/web.mjs starts the transpiled backend, issues an in-memory HTTP GET against the same z2ui5_cl_http_handler that serves real systems and writes the returned page, while sql.js, SQLiteSQLiteAn embedded SQL database engine used as a selectable local cache store by CAP caching plugins. compiled to wasm, stands in for the database. There is no static frontend copy in the bundle, so frontend and backend are always the same abap2UI5 commit; the deployed result is a static site on GitHubGitHubA hosted git service: repositories, pull requests with reviews, and branch rulesets that decide what may reach a branch. Things here that push objects out of an SAP system, or keep a review record outside it, call its API and open their pull requests on it. Pages. The same transpiled backend can also be served by express on port 3000 with npm run serve:express, and npm run media -- --app <app-class> records an abap2UI5 app as video and screenshots against the published build or any other page that starts apps via ?app_start=.
Facts
Where it sits
Who is behind it
In the atlas: maintains 18@abap2UI5maintainerLars HvamContributes to this
In the atlas: maintains 13, contributes to 92, wrote 1@larshpoblomov-devContributes to this
In the atlas: maintains 4, contributes to 44@oblomov-dev2 contributors
Before choosing this
Conditions
PracticalFunctional boundary
It is not the framework and takes no framework fixes: those belong upstream in abap2UI5, and nothing under src/, downport/, output/ and build/ here is a source file. The build is frozen on pinned commits with no scheduled rebuild, so it does not show what abap2UI5 main does today, samples in subfolders of the samples repository are excluded because they require a real SAP system, and a known upstream transpiler issue leaves check_on_init( ) always false, so backend-built view XML may not be returned.
What it declares
Every artifact
- Type
- Web tool
- Origin
- By a community org
- Runtime
- Node.jsbuild time
As a web tool
- Access
- does not say
- What it sends to its vendor
- does not say
Connections
Running the whole stack on a laptop against real bindings
Framework core: module loader, MVC runtime, binding, routing, theming
Transpiles ABAP to JavaScript to run on Node.js
UI5 apps written as one ABAP class, rendered by a generic shell
Static analysis for ABAP source outside a system
Shim running an ABAP ICF handler behind an Express 4.x server
Core ABAP artifacts for code transpiled by @abaplint/transpiler
A command-line converter for audio and video. Where it is installed on the machine, web-abap2UI5web-abap2UI5A build pipeline and the page it deploys: the abap2UI5 backend downported, transpiled to JavaScript and webpacked into one script that runs inside a browser tab, with no server and no SAP system behind it.community org, abap's media pipeline uses it to write the .mp4 and .gif of a recorded app beside the .webm and .png it always produces.
An embedded SQL database engine used as a selectable local cache store by CAP caching plugins.
Download
README
quoted from abap2UI5/web-abap2UI5 under MIT, readweb-abap2UI5
Live demo: abap2ui5.github.io/web-abap2UI5-build — the complete abap2UI5 backend, downported, transpiled to JavaScript and running inside your browser tab. No server, no SAP system.
The build is frozen: abap2UI5, samples, the open-abap libraries and the UI5 release are pinned in ci/pins.json, there is no scheduled rebuild, and the demo only changes when this repository does. It is deployed to web-abap2UI5-build (GitHub Pages). Contributor and agent guidance lives in AGENTS.md.
Functionality
- Downporting with abaplint
- Transpiling to JS with abaplint/transpiler
- Running on Node.js with open-abap
- Service exposing via express-icf-shim
- Running the same backend in the browser: webpack bundles the transpiled ABAP into one script and sql.js (SQLite compiled to wasm) stands in for the database, so the demo needs no server at all — it is a static GitHub Pages site
Tasks
Downport & Transpile
npm run clone
npm run build
Run Unit Tests
npm test # clone once, then: downport + transpile + unit tests
npm run test:unit # only the transpiled unit tests, on an existing ./output
npm test is exactly what CI runs as "the tests".
Run Webservice
The transpiled backend on Node.js, served by express on port 3000. Started by hand — it is not part of any test run:
npm run serve:express
Webpack Build Strategy
- Clone repositories into /src/
- Downport /src/ into /downport/
- Transpile with express-icf-shim into /output/
- Webpack backend + database into folder build
npm run build:web
The bundle contains no static frontend copy: at runtime app/web.mjs initializes the transpiled backend, issues an in-memory HTTP GET against it (the same z2ui5_cl_http_handler GET that serves real systems, including the sap.ui.require.preload of the complete current UI5 frontend) and document.writes the returned page. Frontend and backend are therefore always the same abap2UI5 commit, the one pinned in ci/pins.json. The backend's Content-Security-Policy meta tag is stripped from the written page — it is designed for server-served deployments (no unsafe-eval/wasm-unsafe-eval) and would break the wasm/eval-based in-browser runtime while protecting nothing here.
Test the build locally (webpack-dev-server HMR does not work with the document.write boot):
npm run serve:build
Media Pipeline
Record any abap2UI5 app as video and screenshot — post-ready assets for LinkedIn, docs and READMEs:
npm run media -- --app <app-class>
By default this records the app on the published web build above; --url
points it at any other page that starts apps via ?app_start= (a local
serve:build, a real system). --steps <file> replays a scripted
interaction (media/steps.example.json), --size
switches between desktop, phone and tablet viewports. Output per app:
.webm and .png always, .mp4 (what LinkedIn ingests best) and .gif
when ffmpeg is installed. media/record.mjs documents
all options, including offline recording via --ui5-from.
CI
The build_web workflow runs on every push to main (and deploys), on pull requests and by hand — there is no schedule: it clones abap2UI5 and the top-level apps of samples, runs downport, transpile, unit tests and the webpack build, then smoke tests the built site in a real browser before deploying it to web-abap2UI5-build (GitHub Pages). Every clone is the commit pinned in ci/pins.json, so a rerun of the same commit builds the same demo.
The browser gate is the one that matters: everything upstream of it can be green while the deployed page is blank, because a bundling or initialization fault only shows when the bundle actually runs. tests/web.spec.js loads the freshly built ./build, waits for the in-browser backend to answer, and asserts an event roundtrip restores the saved draft. Before it existed, the site deployed completely untested.
npm run build:web # build ./build
npm run test:e2e # the same gate, locally (playwright, project chromium-web)
@abaplint/cli is pinned to the version used by abap2UI5 itself, since the downport result must pass the same syntax check — at the pinned abap2UI5 commit. There is no Dependabot: package-lock.json decides every npm version.
The deploy is a production webpack build. Two Terser defaults have to be turned off for it (keep_classnames, keep_fnames) because the transpiled ABAP carries its type system in the class and function names that RTTI reads back — see the comment in webpack.config.js.
The deployed site is not only the bundle: app/pages/ (README, 404 page) and
this repository's LICENSE are copied into ./build before the deploy, and
the build's provenance is written as BUILD_INFO.json. The deploy runs with force_orphan: true, so anything
committed in the artifact repository by hand is gone with the next run — every
file that should be there has to be produced here.
Limitations & Todo
- Samples in subfolders of the samples repository (system samples, launchpad samples) are excluded — they require a real SAP system and cannot be transpiled
src/99of abap2UI5 (the frozen legacy package) is not part of the build.clone:coredrops it. Should a sample ever need one of those classes again, the fix belongs in the sample —src/99is on abap2UI5's removal plan and will not be there forever- A known upstream @abaplint/transpiler issue makes
check_on_init( )always false in the transpiled backend (interface attributes read through an interface-typed reference resolve to a missing JS property), so backend-built view XML may not be returned even though the roundtrip succeeds
Credits
- abaplint, open-abap, express-icf-shim, webpacking by larshp
History
Others providing
Compare all 15 on the Local development page →- abap2UI5 Playgroundabap2UI5 PlaygroundABAP in the editor on the left and the abap2UI5 app it builds on the right, both inside one browser tab: the framework is transpiled to JavaScript at build time and the class in the editor is compiled when Run is pressed.community org, abapIn-browser ABAP editor beside the abap2UI5 app it buildsfrom ABAP
- vite-plugin-cdsvite-plugin-cdsA CAP plugin that serves a Vite app from the app folder through cds watch, makes .cds files importable into the frontend build, and can polyfill enough of Node to run @sap/cds in the browser.independent, capServes a Vite app through cds watch and imports .cds filesfrom CAP
- com.sap.cds:cds-feature-dev-dashboardcom.sap.cds:cds-feature-dev-dashboardA browser dashboard for a running CAP Java service that shows and manages its messaging, resilience and multitenancy state while developing, open to users with the cds.Developer role.sap official, capBrowser dashboard for a running CAP Java service during developmentfrom CAP
- com.sap.cds:cds-maven-plugincom.sap.cds:cds-maven-pluginThe Maven plugin that runs CDS build steps in a CAP Java project: compiling the model, generating typed Java accessor interfaces and adding facets to an existing project.sap official, capMaven plugin running CDS build steps in a CAP Java projectfrom CAP
- @cap-js-community/common@cap-js-community/commonSix independent features for CAP services in one package: replication cache, migration check, rate limiting, a Redis client broker, a local HTML5 repository and a CDM builder.community org, capSix CAP features in one package, from replication cache to rate limitsfrom CAP
- abap_trial_dockerabap_trial_dockerShell scripts that build a Docker image from the SAP NetWeaver ABAP Developer Edition 7.52 SP04 installation files and run it as an unprivileged container, setting the stable hostname the installer wants.independent, abapScripts running the ABAP Developer Edition in Dockerfrom ABAP
- @neoimpulse/cap-js-bootstrap@neoimpulse/cap-js-bootstrapA command-line tool that starts a local CAP environment with several services and an AppRouter together from one command, documented in German and requiring Node 22 or newer.independent, capCLI starting several CAP services and an AppRouter locally togetherfrom CAP
- open-steamgateopen-steamgateAn ABAP application server you clone and run on your own machine: transpiled ABAP serving classic /IWBEP/ OData v2 to Fiori over a local database, with no SAP system attached.independent, abapLocal ABAP server serving /IWBEP/ OData v2 without an SAP systemfrom ABAP
- pokrakam/abapDevSysInitpokrakam/abapDevSysInitA single ABAP report that automates setting up a new ABAP Developer Edition or trial system, from the user profile and a GitHub RFC destination to fetching abapGit and pulling repositories.independent, abapABAP report setting up a new ABAP Developer Edition or trial systemfrom ABAP
- @sang2x/captools@sang2x/captoolsA CLI of eight CAP development commands aimed at Cloud Foundry workflows, shipped without a repository or README, whose binding step writes resolved VCAP_SERVICES into default-env.json.independent, capCLI of CAP development tools for Cloud Foundry workflowsfrom CAP
- @sap/ams-dev@sap/ams-devCompiles the DCL authorization policies of SAP's Authorization Management Service to DCN, so an AMS-secured application runs and is tested on a laptop.sap official, capCompiler from AMS DCL policies to DCN for local runs and testsfrom CAP
- @sap/cds-dk@sap/cds-dkThe command line client and development toolkit for CAP projects, with the commands cds build, cds deploy, cds watch and cds add among them.sap official, capCommand line client and development toolkit for CAPfrom CAP
- @sap/cds@sap/cdsThe CAP Node.js runtime, which compiles the CDS model, serves the services declared in it, answers generic requests before any handler runs, and loads every cds-plugin.sap official, capCAP Node.js runtimefrom CAP
- dev-approuterdev-approuterA development-time wrapper for the SAP Application Router that serves UI5 and CDS modules once they are added to the project as dependencies.community org, capDev-time wrapper for the SAP Application Routerfrom CAP
Details
Sources
Sources are graph entities: the same page may back several entries, and an unreachable source flags every row that rests on it.
Compatibility and provenance
Contributors
History in the atlas
- First seen.
For your agent
- Ref
artifact:abap2ui5-web-abap2ui5- JSON
- /artifacts/abap2ui5-web-abap2ui5.json
- MCP
- Connecting an agent