{"ref":"artifact:abap2ui5-frontend-webcomponent","page":"/artifacts/abap2ui5-frontend-webcomponent","json":"/artifacts/abap2ui5-frontend-webcomponent.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"abap2ui5-frontend-webcomponent","name":"abap2UI5 frontend-webcomponent","artifact_type":"package","ecosystem":"abap","serves_ecosystems":["ui5"],"flavors":[{"key":"web-components","source":{"url":"https://github.com/abap2ui5/frontend-webcomponent","title":"abap2UI5/frontend-webcomponent — README","checked":"2026-10-17","quote":"Frontend with UI5 Web Components – no UI5 core, one embeddable custom element"}}],"domain":"ui-and-frontend-bridge","origin_ring":"community-org","description":{"one_line":"An alternative [abap2UI5](artifact:abap2ui5-abap2ui5) frontend: one ES module registering `<abap2ui5-app>`, which renders the views an unchanged abap2UI5 app class sends with [UI5 Web Components](artifact:ui5-webcomponents) and no UI5 core.","short":"abap2UI5 frontend rendering with UI5 Web Components","what_it_solves":"abap2UI5 apps are reached through the project's UI5 single-page app, which loads the UI5 core. This frontend speaks the same JSON protocol and renders the same views out of UI5 Web Components instead, so the app class stays as it is and the bundle is 1265 kB raw, 263 kB gzip, with the 62 components its mappers create and nothing else. It ships as one custom element: `dist/index.html` is the standalone start page with `?app_start=<CLASS>`, and the same element goes into a React, Vue, Angular or plain-HTML page, where it renders into its own shadow root, keeps its own backend session and reports what happens as DOM events. It implements the core protocol in full (app start, events with their model delta, the `sap-contextid` session, the five view slots, the app stack and the URL hash) and the protocol's portable view profile v1 for rendering, 65 of 65 controls mapped, 42 full and 23 basic. Embedded, the element never reads or writes `location`: it emits an `abap2ui5-route` event per hash the app would write and takes one back through `navigate(hash)`, so the host keeps its own routing.","when_not_to_use":"Not for views built from controls outside the portable profile: sap.ui.table, sap.f, sap.uxap, sap.ui.comp and z2ui5.cc custom controls render as a visible unsupported-control box and are listed in the diagnostics, and `CONTROL_BY_ID` and `BINDING_CALL` stay unsupported. Nine frontend actions the profile allows, `DOWNLOAD_B64_FILE` and `SYSTEM_LOGOUT` among them, are skipped and reported rather than run, and formatters other than the profile's `Formatter.Date*` render a placeholder.","to_build_on_it":"A new control is a mapper in `src/render/controls/` with its web component imported and listed, a renderer unit test and a regenerated coverage table, which `npm test` fails without; `defineControl('z2ui5.cc.MyControl', mapper)` adds one from outside the repository. The [protocol repository](https://github.com/abap2UI5/protocol) is the authority for both the core protocol and the profile, so behaviour it does not describe is a question there rather than a change here. The XML parser, the wire parser, the response bookkeeping and the delta builder are vendored unchanged from abap2UI5/mcp-server at a recorded commit and are replaced with `npm run vendor`, never edited by hand."},"links":{"repo":"https://github.com/abap2UI5/frontend-webcomponent"},"maintainers":["actor:abap2ui5"],"provides":[{"capability":"capability:abap-ui-from-abap","what_it_does":"Renders in the browser what an abap2UI5 app class sends, over the same JSON protocol as the project's UI5 single-page app, and covers the protocol's portable view profile v1 with 65 of 65 controls mapped.","sources":[{"url":"https://github.com/abap2ui5/frontend-webcomponent","title":"abap2UI5/frontend-webcomponent — README","checked":"2026-10-17","quote":"it speaks the same JSON protocol as the official UI5 SPA"},{"url":"https://github.com/abap2ui5/frontend-webcomponent","title":"abap2UI5/frontend-webcomponent — README","checked":"2026-10-17","quote":"Portable profile v1: **65 of 65** controls mapped (42 full, 23 basic)."}]},{"capability":"capability:ui5-web-components","what_it_does":"Maps each profile control to UI5 Web Components (`sap.m.Button` to `ui5-button`, `sap.m.Table` to `ui5-table`) and ships the result as the custom element `<abap2ui5-app>`, which runs in any web app without the UI5 core being loaded.","sources":[{"url":"https://github.com/abap2ui5/frontend-webcomponent","title":"abap2UI5/frontend-webcomponent — README","checked":"2026-10-17","quote":"Frontend with UI5 Web Components – no UI5 core, one embeddable custom element"},{"url":"https://github.com/abap2ui5/frontend-webcomponent","title":"abap2UI5/frontend-webcomponent — README","checked":"2026-10-17","quote":"in any web app (React, Vue, Angular, plain HTML)"}]}],"requires":[{"ref":"artifact:abap2ui5-abap2ui5","for":"The framework whose app classes it renders: the element is pointed at an abap2UI5 HTTP service with `endpoint`, and the views, events and model it works on are that framework's protocol.","requirement":"required","basis":"binding","role":"framework","sources":[{"url":"https://github.com/abap2ui5/frontend-webcomponent","title":"abap2UI5/frontend-webcomponent — README","checked":"2026-10-17","quote":"An alternative frontend for [abap2UI5](https://github.com/abap2UI5/abap2UI5):"},{"url":"https://github.com/abap2ui5/frontend-webcomponent","title":"abap2UI5/frontend-webcomponent — README","checked":"2026-10-17","quote":"the abap2UI5 HTTP service (`/sap/bc/z2ui5`, or an absolute URL)"}]},{"ref":"artifact:ui5-webcomponents","for":"The control set the renderer creates elements from: one mapper per control, with the 62 components it uses imported into the bundle and the UI5 core never loaded.","requirement":"required","basis":"binding","role":"control-set","sources":[{"url":"https://github.com/abap2ui5/frontend-webcomponent","title":"abap2UI5/frontend-webcomponent — README","checked":"2026-10-17","quote":"(`@ui5/webcomponents`, `@ui5/webcomponents-fiori` 2.27)"},{"url":"https://github.com/abap2ui5/frontend-webcomponent","title":"abap2UI5/frontend-webcomponent — README","checked":"2026-10-17","quote":"the 62 web components used, nothing else"}]}],"connects":[{"ref":"artifact:abap2ui5-abap2ui5","kind":"data","direction":"outbound","style":"sync","for":"Every interaction is a roundtrip to the abap2UI5 HTTP service the `endpoint` attribute names: the app start, each event with the delta of the edited paths, the `sap-contextid` session and, where a token layer asks for one, the CSRF token.","sources":[{"url":"https://github.com/abap2ui5/frontend-webcomponent","title":"abap2UI5/frontend-webcomponent — README","checked":"2026-10-17","quote":"the abap2UI5 HTTP service (`/sap/bc/z2ui5`, or an absolute URL)"},{"url":"https://github.com/abap2ui5/frontend-webcomponent","title":"abap2UI5/frontend-webcomponent — README","checked":"2026-10-17","quote":"`auto` (default: fetch a token when a token layer answers 403 `X-CSRF-Token: Required`, re-send once)"}]}],"interfaces":[{"key":"abap2ui5-app","kind":"api","direction":"in","for":"The custom element `<abap2ui5-app>` the bundle registers, which a host page configures with attributes such as `endpoint`, `app`, `theme` and `routing` and drives with the methods `restart()` and `navigate(hash)`.","sources":[{"url":"https://github.com/abap2ui5/frontend-webcomponent","title":"abap2UI5/frontend-webcomponent — README","checked":"2026-10-17","quote":"The bundle registers `<abap2ui5-app>`; give the element a height."}]},{"key":"dom-events","kind":"event","direction":"out","for":"What the element reports to its host as bubbling, composed DOM events: `abap2ui5-response`, `abap2ui5-request`, `abap2ui5-message`, `abap2ui5-title`, `abap2ui5-error`, `abap2ui5-diagnostic` and `abap2ui5-route`.","sources":[{"url":"https://github.com/abap2ui5/frontend-webcomponent","title":"abap2UI5/frontend-webcomponent — README","checked":"2026-10-17","quote":"reports what happens as DOM events"}]}],"provenance":{"discovered_via":[{"source":"source:github"}],"first_seen":"2026-10-17"},"drafted_with_ai":true,"contributors":["actor:oblomov-dev"]},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"unknown","evidence":"no release data"},{"label":"Continuity","tier":"fair","evidence":"2 contributors, org-owned"},{"label":"Repository","tier":"good","evidence":"pushed 2026-10, not archived"}],"compatibility":[{"label":"Declared for","tier":"fair","evidence":"nothing declared"},{"label":"Survived majors","tier":"unknown","evidence":"not read on ABAP: its lines run side by side"},{"label":"Maintainer's CI","tier":"good","evidence":"ci green, 2026-10-12"}],"practice":[{"label":"Tests","tier":"good","evidence":"24 test files"},{"label":"Docs","tier":"good","evidence":"README 27 KB"},{"label":"Changelog","tier":"good","evidence":"CHANGELOG in the repo"}],"reach":[{"value":null,"unit":"installs/week"},{"value":0,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-24","npm":"not published under this name","stars":0,"forks":0,"open_issues":0,"archived":false,"pushed_at":"2026-10-12","license_spdx":"MIT","org_owned":true,"default_branch":"main","created_at":"2026-10-03T15:12:05Z","open_prs":0,"tree_truncated":false,"test_files":24,"workflows":1,"other_ci":false,"readme_bytes":27298,"docs_files":0,"changelog":true,"license_file":true,"dts_files":1,"first_commit":"2026-10-03","last_commit":"2026-10-12","commits":14,"contributors":2,"ci_status":"success","ci_run_at":"2026-10-12","ci_workflow":"ci","ci_event":"push","readme_path":"README.md","readme_sha":"f5c0aa77ee763ae490a491d4f1d795dd6fe1117f","repo_read":"2026-10-24"},"release_notes":{"license":"MIT","quotable":true,"source":{"kind":"repo","path":"CHANGELOG.md","ref":"main","url":"https://github.com/abap2UI5/frontend-webcomponent/blob/main/CHANGELOG.md"},"format":"headings","releases":[{"version":"0.1.0","heading":"0.1.0 - first version (PR #1, not published)","url":"https://github.com/abap2UI5/frontend-webcomponent/blob/main/CHANGELOG.md#010---first-version-pr-1-not-published","sections":[{"kind":"other","heading":null,"items":6}],"hash":"75a5a23546db51f8"}],"crawled_at":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:abap2ui5","name":"abap2UI5","json":"/actors/abap2ui5.json"}],"contributors":[{"ref":"actor:oblomov-dev","name":"oblomov-dev","json":"/actors/oblomov-dev.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_on_to":{"ref":"artifact:abap2ui5-abap2ui5","name":"abap2UI5","json":"/artifacts/abap2ui5-abap2ui5.json"},"add_ons":[],"answered_through_parts":[]}}