Web toolWeb tooltypeA hosted utility you use at a URL, rather than run or install. May be free or paid; source_available says whether anything behind it is inspectable.See every one →What this type is →by a community orgby a community orgoriginPublished by a community organisation, so it outlives any one maintainer.See every one →

web-abap2UI5

A 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.

Seeing abap2UI5 run normally means a system to install it in. This repository clones the framework and its samples at a pinned commit, downports them with abaplint, transpiles them with @abaplint/transpiler 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, SQLite 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 GitHub 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

Last pushLicenceMIT

Where it sits

Lives in
Provides
Local developmentABAPLocal developmentcapabilityRunning the whole stack on a laptop against real bindings — the service, the UI and the routing in front of it — without deploying to see a change.
Add-on to
abap2UI5abap2UI5artifactOne 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.
Requires
abap2UI5abap2UI5artifactthe backend the pipeline downports, transpiles and bundles; ci/clone.mjs fetches it at the commit pinned in ci/pins.json, together with the samples repositoryabaplintabaplintartifactdownports the cloned sources before they are transpiled; @abaplint/cli is pinned to the version abap2UI5 itself syntax-checks with, because the downport result has to pass the same check@abaplint/transpiler@abaplint/transpilerartifactturns the downported ABAP into the JavaScript that the express host and the browser bundle runopen-abap-coreopen-abap-coreartifactthe ABAP core the transpiled code runs against; its commit is one of the pinned inputs and the transpiler reads it from deps/ instead of cloning itexpress-icf-shimexpress-icf-shimartifactexposes the transpiled ICF handler as a service; the transpile step runs with it, and its commit is pinned alongside the others
Optional
SQLiteSQLiteoutside the atlasstands in for the database as sql.js, SQLite compiled to wasm, in the bundle that runs in the browser tabFFmpegFFmpegoutside the atlasencodes the recorded app to .mp4 and .gif; the media pipeline writes .webm and .png without it

Who is behind it

abap2UI5abap2UI5OrganisationMaintains this
In the atlas: maintains 18
@abap2UI5
maintainerLars HvamPersonContributes to this
In the atlas: maintains 13, contributes to 92, wrote 1
@larshp
oblomov-devPersonContributes to this
In the atlas: maintains 4, contributes to 44
@oblomov-dev
2 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

Connections9

web-abap2UI5 connectionsweb-abap2UI5PROVIDES→ provides1provides stated Runs the whole abap2UI5 backend with no ABAP system attached: transpiled to JavaScript and either served by express on port 3000, or webpacked into a browser bundle where sql.js stands in for the database and the page needs no server at all. abap2UI5/web-abap2UI5 — README: https://github.com/abap2ui5/web-abap2ui5 abap2UI5/web-abap2UI5 — README, Run Webservice: https://github.com/abap2ui5/web-abap2ui5 abap2UI5/web-abap2UI5 — README, Functionality: https://github.com/abap2ui5/web-abap2ui5Local developmentNEEDS→ connects to1connects to stated the page loads the pinned UI5 release from the OpenUI5 CDN: `app/web.mjs` rewrites the bootstrap `src` to `https://sdk.openui5.org/<ui5>/resources/sap-ui-core.js`, pinned to the 1.136 long-term-maintenance line web-abap2UI5 — AGENTS.md, Frozen inputs: https://raw.githubusercontent.com/abap2UI5/web-abap2UI5/main/AGENTS.md@openui5/sap.ui.core→ needs5needs stated turns the downported ABAP into the JavaScript that the express host and the browser bundle run abap2UI5/web-abap2UI5 — README, Functionality: https://github.com/abap2ui5/web-abap2ui5@abaplint/transpilerneeds stated the backend the pipeline downports, transpiles and bundles; `ci/clone.mjs` fetches it at the commit pinned in `ci/pins.json`, together with the samples repository web-abap2UI5 — AGENTS.md, What this repo is: https://raw.githubusercontent.com/abap2UI5/web-abap2UI5/main/AGENTS.mdabap2UI5needs stated downports the cloned sources before they are transpiled; `@abaplint/cli` is pinned to the version abap2UI5 itself syntax-checks with, because the downport result has to pass the same check abap2UI5/web-abap2UI5 — README, Functionality: https://github.com/abap2ui5/web-abap2ui5 web-abap2UI5 — AGENTS.md, Pins: https://raw.githubusercontent.com/abap2UI5/web-abap2UI5/main/AGENTS.mdabaplintneeds stated exposes the transpiled ICF handler as a service; the transpile step runs with it, and its commit is pinned alongside the others abap2UI5/web-abap2UI5 — README, Functionality: https://github.com/abap2ui5/web-abap2ui5 abap2UI5/web-abap2UI5 — README, Webpack Build Strategy: https://github.com/abap2ui5/web-abap2ui5express-icf-shimneeds stated the ABAP core the transpiled code runs against; its commit is one of the pinned inputs and the transpiler reads it from `deps/` instead of cloning it abap2UI5/web-abap2UI5 — README, Functionality: https://github.com/abap2ui5/web-abap2ui5 web-abap2UI5 — AGENTS.md, Frozen inputs: https://raw.githubusercontent.com/abap2UI5/web-abap2UI5/main/AGENTS.mdopen-abap-core→ optionally needs2optionally needs stated If: `.mp4` and `.gif` output from `npm run media` is wanted encodes the recorded app to `.mp4` and `.gif`; the media pipeline writes `.webm` and `.png` without it abap2UI5/web-abap2UI5 — README, Media Pipeline: https://github.com/abap2ui5/web-abap2ui5FFmpegifoptionally needs stated If: the webpack browser build, where there is no server behind the page stands in for the database as sql.js, SQLite compiled to wasm, in the bundle that runs in the browser tab web-abap2UI5 — app/pages/README.md: https://raw.githubusercontent.com/abap2UI5/web-abap2UI5/main/app/pages/README.mdSQLiteif

README

quoted from abap2UI5/web-abap2UI5 under MIT, read
abap2UI5/web-abap2UI5/README.mdOn GitHub

web-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
  1. Clone repositories into /src/
  2. Downport /src/ into /downport/
  3. Transpile with express-icf-shim into /output/
  4. 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/99 of abap2UI5 (the frozen legacy package) is not part of the build. clone:core drops it. Should a sample ever need one of those classes again, the fix belongs in the sample — src/99 is 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
MIT, read

History

Latest

v1.135.0

  1. v1.134.0

Local development
  1. abap2UI5 PlaygroundIn-browser ABAP editor beside the abap2UI5 app it buildsfrom ABAP
  2. vite-plugin-cdsServes a Vite app through cds watch and imports .cds filesfrom CAP
  3. com.sap.cds:cds-feature-dev-dashboardBrowser dashboard for a running CAP Java service during developmentfrom CAP
  4. com.sap.cds:cds-maven-pluginMaven plugin running CDS build steps in a CAP Java projectfrom CAP
  5. @cap-js-community/commonSix CAP features in one package, from replication cache to rate limitsfrom CAP
  6. abap_trial_dockerScripts running the ABAP Developer Edition in Dockerfrom ABAP
  7. @neoimpulse/cap-js-bootstrapCLI starting several CAP services and an AppRouter locally togetherfrom CAP
  8. open-steamgateLocal ABAP server serving /IWBEP/ OData v2 without an SAP systemfrom ABAP
  9. pokrakam/abapDevSysInitABAP report setting up a new ABAP Developer Edition or trial systemfrom ABAP
  10. @sang2x/captoolsCLI of CAP development tools for Cloud Foundry workflowsfrom CAP
  11. @sap/ams-devCompiler from AMS DCL policies to DCN for local runs and testsfrom CAP
  12. @sap/cds-dkCommand line client and development toolkit for CAPfrom CAP
  13. @sap/cdsCAP Node.js runtimefrom CAP
  14. dev-approuterDev-time wrapper for the SAP Application Routerfrom CAP

Details

Sources3
GitHub APIdiscovered herechecked
github.com/abap2UI5/web-abap2UI5tree, pushes, contributors, CIchecked
README.mdquoted, and what the entry declareschecked

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
runtimesnode, build-time
discovered viaGitHub API
first seen in the atlas
ecosystem and domainabap, developer-experience
Contributors2

From the repository’s contributor list, .

History in the atlas1
  1. First seen.
For your agent
Ref
artifact:abap2ui5-web-abap2ui5
JSON
/artifacts/abap2ui5-web-abap2ui5.json
MCP
Connecting an agent