{"ref":"artifact:lemaiwo-ui5-cap-serverside-rendering-plugin","page":"/artifacts/lemaiwo-ui5-cap-serverside-rendering-plugin","json":"/artifacts/lemaiwo-ui5-cap-serverside-rendering-plugin.json","generated":"2026-10-27","drafted_with_ai":true,"entity":{"id":"lemaiwo-ui5-cap-serverside-rendering-plugin","name":"ui5-cap-serverside-rendering-plugin","artifact_type":"cds-plugin","ecosystem":"cap","domain":"ui-and-frontend-bridge","origin_ring":"independent","description":{"one_line":"A CAP plugin that fills UI5 views and fragments with entity data on the server through Handlebars and streams them as XML, and renders a Vue app to HTML on a route of its own.","short":"CAP plugin rendering UI5 views with entity data on the server","what_it_solves":"A UI5 view reaches the browser as a template and fills itself once the framework has booted and read its data. This plugin does the filling on the CAP server: a view or fragment lives under `srv/views` or `srv/fragments` with its UI5 bindings rewritten as Handlebars expressions, and the entity extends the plugin's `ServerSideRendering` aspect, which adds the virtual `content`, `mediaType` and `fileName` elements the result is served through. An `after READ` handler answers a request for that entity's `content`, compiles the template against the rows read and streams it back as `application/xml`. Which file it reads follows from `@ServerSideRenderingType` and `@ServerSideRenderingName`, or, failing those, from the entity name plus `List` or `Detail`, and a read with keys expands the entity's associations and compositions so a detail fragment carries the record and what hangs off it. A second path serves Vue rather than UI5: an entity annotated `@VueApp` registers a `/vue-ssr` route that calls Vue's `renderToString` and substitutes the markup and the captured state into an HTML template at `{{APP_HTML}}` and `{{APP_STATE}}`.","when_not_to_use":"On the UI5 path what comes back is an XML view or fragment with the data already substituted, streamed as the entity's media content, rather than an HTML page — the README calls this pre-rendering, and only the Vue path produces markup. The view kept under `srv/` has its UI5 bindings replaced by Handlebars expressions, so it is a second copy of the view, separate from the one the application ships. Version 1.0.8 declares `@sap/cds` `>=8` as its peer dependency, which puts a project on CAP 7 outside its stated range.","to_build_on_it":"The Vue path is the newer half and carries the author's own `REVISIT` markers on how the rendered state reaches the template. Its `vueConfig` is a single module-level object written while the services are served, so the last entity annotated `@VueApp` is the one the `/vue-ssr` route renders."},"links":{"repo":"https://github.com/lemaiwo/ui5-cap-serverside-rendering-plugin","npm":"https://www.npmjs.com/package/ui5-cap-serverside-rendering-plugin"},"compat":{"runtimes":["node"]},"type_properties":{"distribution":{"value":["npm"],"sources":[{"url":"https://github.com/lemaiwo/ui5-cap-serverside-rendering-plugin","title":"ui5-cap-serverside-rendering-plugin — README","checked":"2026-10-18","quote":"npm install ui5-cap-serverside-rendering-plugin"}]}},"provenance":{"discovered_via":[{"source":"source:github","channel":"lemaiwo"}],"first_seen":"2026-08-31","claimed_by":"actor:lemaiwo"},"provides":[{"capability":"capability:server-side-rendering","what_it_does":"Substitutes entity data into a UI5 XML view or fragment on the CAP server through Handlebars and serves the result as that entity's media content; on a route of its own, renders a Vue app to HTML through `renderToString`.","sources":[{"url":"https://raw.githubusercontent.com/lemaiwo/ui5-cap-serverside-rendering-plugin/main/README.md","title":"ui5-cap-serverside-rendering-plugin — README","checked":"2026-09-22","quote":"CAP CDS Plugin that enables UI5 pre-rendering on a CAP server. Views or fragments can be developed/stored in the CAP service using handlebars for bindings."},{"url":"https://raw.githubusercontent.com/lemaiwo/ui5-cap-serverside-rendering-plugin/main/cds-plugin.js","title":"ui5-cap-serverside-rendering-plugin — cds-plugin.js","checked":"2026-09-22","quote":"const html = await renderToString(vueComponent)"}]}],"maintainers":["actor:lemaiwo"],"contributors":["actor:lemaiwo","actor:vobu"],"history":[{"date":"2026-09-22","field":"description.one_line","from":"CAP plugin that renders UI5 applications on the server.","to":"CAP plugin that fills UI5 views and fragments with entity data on the server through Handlebars, and renders a Vue app to HTML on a route of its own.","reason":"The old line said the plugin renders UI5 applications. Its README and cds-plugin.js describe two narrower things: Handlebars substitution into a single view or fragment, served as an entity's media content, and a separate Vue route that renders HTML."},{"date":"2026-09-22","field":"description.what_it_solves","from":null,"to":"written from the README, index.cds and cds-plugin.js on main, read 2026-09-22","reason":"The entry carried a one-line index entry and nothing answering what it does, so the page opened on readings. The paragraph states where the views live, which aspect and annotations switch the behaviour on, what the handler returns, and that the Vue path is separate."},{"date":"2026-09-22","field":"description.when_not_to_use","from":null,"to":"the XML-not-HTML boundary, the duplicated view, and the stated CAP 8 floor","reason":"Without it the page left the reader to assume that server-side rendering here produces a page. It produces a data-filled UI5 XML view on the UI5 path, and the peer dependency puts CAP 7 out of range."},{"date":"2026-09-22","field":"description.to_build_on_it","from":null,"to":"the Vue path's REVISIT markers and its one-app-per-server configuration","reason":"The author marks the Vue state handling as unfinished in the source, and vueConfig is a module-level object, so the shape of that half is worth stating for anyone reading it further."},{"date":"2026-09-22","field":"provides","from":"capability:server-side-rendering","to":"the same edge in object form, with what_it_does and two sources","reason":"A bare ref said the plugin answers the capability without saying how. The object form carries the contribution and the files it was read from."}],"drafted_with_ai":true},"effective_normative_relations":[{"instrument":"instrument:sap-developer-license-3-2-cap","relation":"use-constrained-by","sections":["1","2","3"],"applies_when":"A cds-plugin is used with SAP CAP materials, or an artifact is explicitly identified as a CAP plugin or application.","note":"This is inherited applicability, not a licence verdict about the artifact itself. Review the agreement for the actual materials and use; an explicit artifact relationship to another revision takes precedence.","scope":{"kind":"artifact"},"sources":[{"url":"https://cap.cloud.sap/resources/license/developer-license-3_2_CAP.txt","title":"SAP Developer License Agreement 3.2 CAP","checked":"2026-09-16","quote":"documentation, plug-ins, templates, scripts and sample code, libraries, software development kits"}],"inherited_from":"cap-plugins-and-applications","relevant_capabilities":["agent-systems-access","async-processing","data-import-export","database-connectors","deployment","destinations","llm-integration","mcp-servers","plugin-authoring","replication","retrieval-augmented-generation","rfc-connectivity"]}],"readings":{"liveness":[{"label":"Maintenance","tier":"poor","evidence":"16 months since release"},{"label":"Continuity","tier":"fair","evidence":"2 contributors, 1 publisher"},{"label":"Repository","tier":"good","evidence":"pushed 2026-07, not archived"}],"compatibility":[{"label":"Declared for","tier":"good","evidence":">=8 — includes cds 10 and 9"},{"label":"Survived majors","tier":"poor","evidence":"no release since @sap/cds 10 shipped (July 2026)"},{"label":"Maintainer's CI","tier":"fair","evidence":"no CI configured"}],"practice":[{"label":"Tests","tier":"good","evidence":"39 test files"},{"label":"Docs","tier":"fair","evidence":"README 2 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":4,"unit":"installs/week"},{"value":7,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-26","latest_version":"1.0.8","majors":{"1":{"version":"1.0.0","date":"2024-10-16"}},"license":"MIT","first_release":"2024-10-16","last_release":"2025-07-02","releases":9,"cadence_days":2,"maintainers":1,"repository":"git+https://github.com/lemaiwo/ui5-cap-serverside-rendering-plugin.git","peer_cds":">=8","test_script":false,"types":false,"downloads_weekly":4,"stars":7,"forks":3,"open_issues":0,"archived":false,"pushed_at":"2026-07-11","license_spdx":"Apache-2.0","org_owned":false,"default_branch":"main","contributors":2,"tree_truncated":false,"test_files":39,"workflows":0,"other_ci":false,"readme_bytes":2174,"docs_files":0,"changelog":false,"license_file":true,"dts_files":0,"readme_path":"README.md","readme_sha":"405c0eb7d5243183dba0255e047db5440a6b25fa","months_since_release":16,"dormant":true,"repository_directory":null,"dependencies":2,"node_engine":null,"downloads_monthly":56,"created_at":"2024-10-14T18:02:51Z","open_prs":0,"first_commit":"2024-10-14","last_commit":"2025-07-07","commits":40,"repo_read":"2026-10-26"},"release_notes":{"license":"Apache-2.0","quotable":true,"versions":[{"version":"1.0.8","date":"2025-07-02"},{"version":"1.0.7","date":"2025-06-30"},{"version":"1.0.6","date":"2024-11-03"},{"version":"1.0.5","date":"2024-10-18"},{"version":"1.0.4","date":"2024-10-18"},{"version":"1.0.3","date":"2024-10-18"},{"version":"1.0.2","date":"2024-10-16"},{"version":"1.0.1","date":"2024-10-16"},{"version":"1.0.0","date":"2024-10-16"}],"crawled_at":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:lemaiwo","name":"Wouter Lemaire","json":"/actors/lemaiwo.json"}],"contributors":[{"ref":"actor:vobu","name":"Volker Buzek","json":"/actors/vobu.json"},{"ref":"actor:lemaiwo","name":"Wouter Lemaire","json":"/actors/lemaiwo.json"}],"explained_by":[{"ref":"content:create-your-first-cap-plugin","name":"Create your first CAP plugin","json":"/content/create-your-first-cap-plugin.json"}],"alternative_to_this":[],"needed_by":[{"ref":"artifact:lemaiwo-ui5-cap-serverside-rendering-demo","name":"ui5-cap-serverside-rendering-demo","json":"/artifacts/lemaiwo-ui5-cap-serverside-rendering-demo.json","requirement":"required"}],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}