{"ref":"artifact:ui5-community-jsx-runtime","page":"/artifacts/ui5-community-jsx-runtime","json":"/artifacts/ui5-community-jsx-runtime.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"ui5-community-jsx-runtime","name":"@ui5-community/jsx-runtime","artifact_type":"package","ecosystem":"ui5","domain":"developer-experience","origin_ring":"community-org","use_as":"dependency","description":{"one_line":"A plugin-based JSX runtime for UI5: views are written as .tsx files with per-control typing, and the JSX compiles to plain new Control(settings) calls.","short":"Plugin-based JSX runtime for UI5 views written as .tsx","what_it_solves":"A UI5 view written as `.view.xml` is parsed at runtime and its attributes are strings the TypeScript compiler never sees. This runtime takes the same view as a `.tsx` file, where the compiler checks every control's props against that control's own type, and turns the `_jsx` calls Babel emits into plain `new Control(settings)` calls: no React, no VDOM, no reconciler, with reactivity still coming from UI5 bindings. Above the core directives (`jsx`, `<Fragment>`, `<For>`, `<If>`) sits a plugin SPI of five extension points, `Renderer`, `IntrinsicHandler`, `PropertyApplier`, `ChildrenProcessor` and `Scope`, and the shipped `<Switch>`/`<Case>`/`<Default>` plugin is its worked example. In a project it is a library dependency plus three pieces of configuration: `transformJSX` in `ui5.yaml`, `jsx` and `jsxImportSource` in `tsconfig.json`, and `ui5.community.jsx.runtime` in `manifest.json`. XML and TSX views coexist in one app because both produce `sap.ui.core.mvc.View` instances, so a conversion can go one view at a time. The documentation site labels the project Incubation, and the requirements spec, marked a draft proposal, puts the TypeScript floor at 5.0 and newer.","when_not_to_use":"Lowercase HTML tags such as `<div>` typecheck but throw: the default renderer constructs UI5 controls, and the HTML-aware renderer plugin is described as planned. `withScope` restores the previous scope on a synchronous return only, so an `await` inside its callback leaks the scope on runtimes without `AsyncLocalStorage`. A view that has to stay adaptable through UI5 flexibility has no path here yet: the project's [Devtoberfest session](content:devtoberfest-2026-ui5-views-type-safe-tsx) states that flexibility support is not built in yet.","to_build_on_it":"The SPI is where additions are meant to go: a renderer for HTML intrinsics, or further directives, installed through the scope without touching the core. The repository also writes down where its demonstration stops, in `docs/deferred-samples.md`, which keeps a section each for routing, an `ODataModel`, `sap.ui.mdc.Table`, forms, custom control authoring in TSX and testing patterns for TSX views."},"links":{"repo":"https://github.com/ui5-community/jsx-runtime","npm":"https://www.npmjs.com/package/@ui5-community/jsx-runtime","docs":"https://ui5-community.github.io/jsx-runtime/"},"identity":{"license":"Apache-2.0"},"type_properties":{"distribution":{"value":["npm"],"sources":[{"url":"https://github.com/ui5-community/jsx-runtime","title":"ui5-community/jsx-runtime — README, repository layout","checked":"2026-10-19","quote":"| `@ui5-community/jsx-runtime` | [`packages/jsx-runtime/`](packages/jsx-runtime/) | The library. Ships the core JSX runtime and the `<Switch>` sample plugin. Publishable to npm. |"}]}},"maintainers":["actor:ui5-community"],"provides":[{"capability":"capability:ui5-typescript","what_it_does":"Lets a UI5 view be authored in TypeScript rather than XML: `.tsx` files with per-control prop typing, checked bindings and events, read by the TypeScript checker through the runtime's `JSX` namespace before the transpile step erases the types and Babel emits `_jsx` calls.","sources":[{"url":"https://github.com/ui5-community/jsx-runtime","title":"ui5-community/jsx-runtime — README","checked":"2026-10-19","quote":"A **plugin-based JSX runtime for UI5**, write UI5 views as `.tsx` files with per-control TypeScript typing, no React, no VDOM, no reconciler. JSX expressions compile to plain `new Control(settings)` calls; a stable five-extension-point plugin SPI lets frameworks and libraries layer features on top of the core without touching it."},{"url":"https://raw.githubusercontent.com/ui5-community/jsx-runtime/main/packages/jsx-runtime-showcase/webapp/docs/overview.md","title":"jsx-runtime — showcase Learn page, What is JSX Runtime for UI5?","checked":"2026-10-19","quote":"Write UI5 views as JSX — `.tsx` for the full TypeScript experience (per-control prop typing, checked bindings and events), or plain `.jsx` when you don't want TypeScript."}]}],"requires":[{"ref":"artifact:ui5-community-ui5-tooling-transpile","for":"The JSX transform in the consuming app's build and dev server. Its `transformJSX` option switches on the Babel JSX plugin and assembles the rest of the pipeline from `tsconfig.json` and browserslist, so no hand-written `.babelrc.json` is needed. Version 3.12 or later.","requirement":"required","basis":"binding","role":"transpiler","sources":[{"url":"https://raw.githubusercontent.com/ui5-community/jsx-runtime/main/packages/jsx-runtime/README.md","title":"@ui5-community/jsx-runtime — package README, Install","checked":"2026-10-19","quote":"Enable the JSX transform in `ui5.yaml` — no `.babelrc.json` needed. `ui5-tooling-transpile` assembles the TypeScript/UI5/env presets from your `tsconfig.json` + browserslist, and `transformJSX` adds the JSX plugin:"}]},{"ref":"external:babel-plugin-transform-react-jsx","for":"Compiling the JSX in an app's `.tsx` files into the `_jsx` and `_jsxs` calls the runtime consumes. The package README states version 7, because the v8 major changed the plugin API, and the requirements spec puts the floor at 7.20 with `runtime: \"automatic\"`.","requirement":"required","basis":"binding","role":"jsx-transform","sources":[{"url":"https://raw.githubusercontent.com/ui5-community/jsx-runtime/main/packages/jsx-runtime/README.md","title":"@ui5-community/jsx-runtime — package README, Install","checked":"2026-10-19","quote":"Pin the Babel plugin to **v7** (`@^7`) — the v8 major changed the plugin API and the JSX transform fails against it. It's an optional peer dependency that `ui5-tooling-transpile` (≥ 3.12) loads for you."},{"url":"https://raw.githubusercontent.com/ui5-community/jsx-runtime/main/docs/requirements.md","title":"jsx-runtime — docs/requirements.md, NFR-COMP","checked":"2026-10-19","quote":"- **NFR-COMP-3.** Babel compatibility: `@babel/plugin-transform-react-jsx` ≥ 7.20 with `runtime: \"automatic\"`."}]},{"ref":"artifact:openui5-core","for":"The framework it produces views for. The runtime's own imports are from `sap.ui.core` and `sap.ui.base`, its modules load under the `ui5.community.jsx.runtime` namespace, and what happens after a JSX expression is UI5's: metadata, `applySettings`, bindings, aggregations and events. The requirements spec, marked a draft proposal, states UI5 1.130 LTS and newer.","requirement":"required","basis":"binding","role":"framework","sources":[{"url":"https://raw.githubusercontent.com/ui5-community/jsx-runtime/main/docs/gotchas.md","title":"jsx-runtime — docs/gotchas.md, no dependencies from the core on sap.m / sap.f / sap.tnt","checked":"2026-10-19","quote":"The runtime imports from `sap.ui.core` and `sap.ui.base` only. Sample plugins must not add such dependencies either. This is enforced by convention (check imports before merging), not by tooling."},{"url":"https://raw.githubusercontent.com/ui5-community/jsx-runtime/main/docs/requirements.md","title":"jsx-runtime — docs/requirements.md, NFR-COMP","checked":"2026-10-19","quote":"- **NFR-COMP-1.** UI5 compatibility: 1.130 LTS and newer."}]}],"provenance":{"discovered_via":[{"source":"source:github"}],"first_seen":"2026-10-19"},"history":[{"date":"2026-10-19","field":"description.what_it_solves","from":"no statement of the project's own status, and no TypeScript version","to":"the Incubation label the documentation site carries, and the TypeScript floor of 5.0 the requirements spec states","reason":"Impact assessment against the primary sources. The documentation site the entry already links is built from the showcase, whose page carries the project's own status label: `<span class=\"jsx-splash-incubation\">Incubation</span>` (packages/jsx-runtime-showcase/webapp/index.html, read 2026-10-19), and the session the atlas holds says the same in words, \"At the UI5 point this year we announced that there is incubation project started to bring JSX TSX to UI5\". The TypeScript floor is \"- **NFR-COMP-2.** TypeScript compatibility: 5.0 and newer.\" from docs/requirements.md, whose own header states \"| Document version | 0.1 (draft) |\" and \"| Status | Proposal |\", so the sentence says the spec is a draft proposal rather than presenting the floor as shipped support. TypeScript is not an entry in the graph, so this version has no edge to sit on and stays in prose; the UI5 and Babel floors moved onto their own edges instead. Nothing else in the paragraph changed: every claim in it was re-read against the root README, the package README, docs/jsx-runtime.md and docs/xmlview-to-tsx.md on 2026-10-19 and stands, the coexistence sentence on \"One view at a time. XML and TSX views coexist in the same app — the runtime produces the same `sap.ui.core.mvc.View` instances — so you can migrate incrementally and keep the app runnable throughout.\""},{"date":"2026-10-19","field":"description.when_not_to_use","from":"HTML intrinsic tags, and the synchronous-only `withScope`","to":"both of those, and a view that has to stay adaptable through UI5 flexibility","reason":"The project's Devtoberfest session, published 2026-10-09 and held by the atlas as content:devtoberfest-2026-ui5-views-type-safe-tsx, states \"at the moment also there is no flexibility support. Uh UF flexibility is not being built in yet.\" The repository's own documentation does not mention flexibility at all — docs/jsx-runtime.md, docs/requirements.md, docs/gotchas.md and docs/deferred-samples.md were read on 2026-10-19 and none of them names it — so the sentence attributes the statement to the session and links it rather than presenting it as a documented boundary. The two statements already in the field were re-read in docs/gotchas.md on 2026-10-19 and both stand verbatim, including \"An HTML-aware renderer plugin is planned that installs an `htmlIntrinsic` in the scope; until then, treat lowercase tags as unusable in JSX.\""},{"date":"2026-10-19","field":"requires[external:babel-plugin-transform-react-jsx].for and requires[artifact:openui5-core].for","from":"the Babel major, and no UI5 version at all","to":"the Babel floor of 7.20 with `runtime: \"automatic\"`, and UI5 1.130 LTS and newer","reason":"docs/requirements.md states both as compatibility requirements: \"- **NFR-COMP-3.** Babel compatibility: `@babel/plugin-transform-react-jsx` ≥ 7.20 with `runtime: \"automatic\"`.\" and \"- **NFR-COMP-1.** UI5 compatibility: 1.130 LTS and newer.\" Each is added to the edge it is about, with that file as a second source beside the README sentence already there, and the UI5 one carries the document's own status, \"| Status | Proposal |\". The Babel major stays as the package README words it, \"Pin the Babel plugin to **v7** (`@^7`)\", because the two are not the same claim: the README pins a major, the spec states a minimum within it."},{"date":"2026-10-19","field":"identity.license","from":null,"to":"Apache-2.0","reason":"Both the root README and the package README end on \"[Apache License 2.0](LICENSE).\", and the crawled npm record for @ui5-community/jsx-runtime reports the same SPDX identifier."},{"date":"2026-10-19","field":"type_properties.distribution","from":null,"to":"npm","reason":"The type owns the key for a package (CONCEPT-038) and the record stated nothing, which reads as \"does not say\" while the README's repository layout says of this package \"Publishable to npm.\" and the package README's install step is \"pnpm add @ui5-community/jsx-runtime\". The sibling packages in the same monorepo are each marked \"Not published\" and state no distribution."}],"drafted_with_ai":true,"contributors":["actor:petermuessig"]},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"good","evidence":"1 month since release"},{"label":"Continuity","tier":"fair","evidence":"2 contributors, 1 publisher, org-owned"},{"label":"Repository","tier":"good","evidence":"pushed 2026-10, not archived"}],"compatibility":[{"label":"Declared for","tier":"unknown","evidence":"no UI5 release lines in the atlas"},{"label":"Survived majors","tier":"unknown","evidence":"no UI5 release lines in the atlas"},{"label":"Maintainer's CI","tier":"good","evidence":"CI green, 2026-10-05"}],"practice":[{"label":"Tests","tier":"good","evidence":"31 test files, npm test"},{"label":"Docs","tier":"good","evidence":"docs/ with 10 pages, docs site, README 4 KB"},{"label":"Changelog","tier":"good","evidence":"CHANGELOG in the repo"}],"reach":[{"value":37,"unit":"installs/week","note":"More people watching than installing — noticed deliberately rather than pulled in."},{"value":18,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-25","latest_version":"0.1.5","majors":{"0.1":{"version":"0.1.0","date":"2026-07-13"}},"license":"Apache-2.0","first_release":"2026-07-13","last_release":"2026-10-05","releases":6,"cadence_days":5,"maintainers":1,"repository":"https://github.com/ui5-community/jsx-runtime.git","repository_directory":"packages/jsx-runtime","peer_cds":null,"dependencies":0,"node_engine":">=22.13.0","test_script":true,"types":true,"downloads_weekly":37,"downloads_monthly":462,"stars":18,"forks":0,"open_issues":2,"archived":false,"pushed_at":"2026-10-05","license_spdx":"Apache-2.0","org_owned":true,"default_branch":"main","created_at":"2026-07-13T19:27:15Z","open_prs":1,"tree_truncated":false,"test_files":31,"workflows":4,"other_ci":false,"readme_bytes":3584,"docs_files":10,"changelog":true,"license_file":true,"dts_files":2,"first_commit":"2026-07-13","last_commit":"2026-10-05","commits":16,"contributors":2,"ci_status":"success","ci_run_at":"2026-10-05","ci_workflow":"CI","ci_event":"push","readme_path":"packages/jsx-runtime/README.md","readme_sha":"e188d73a3c44f5100ee4447dc34d6c68bc6fa96f","months_since_release":1,"dormant":false,"repo_read":"2026-10-25"},"release_notes":{"license":"Apache-2.0","quotable":true,"source":{"kind":"repo","path":"packages/jsx-runtime/CHANGELOG.md","ref":"main","url":"https://github.com/ui5-community/jsx-runtime/blob/main/packages/jsx-runtime/CHANGELOG.md"},"format":"changesets","releases":[{"version":"0.1.5","date":"2026-10-05","date_source":"registry","heading":"0.1.5","url":"https://github.com/ui5-community/jsx-runtime/blob/main/packages/jsx-runtime/CHANGELOG.md#015","sections":[{"kind":"fix","heading":"Patch Changes","items":1}],"hash":"525e82e332a81458"},{"version":"0.1.4","date":"2026-10-05","date_source":"registry","heading":"0.1.4","url":"https://github.com/ui5-community/jsx-runtime/blob/main/packages/jsx-runtime/CHANGELOG.md#014","sections":[{"kind":"fix","heading":"Patch Changes","items":1}],"hash":"8eef0557e7afd4b2"},{"version":"0.1.3","date":"2026-09-09","date_source":"registry","heading":"0.1.3","url":"https://github.com/ui5-community/jsx-runtime/blob/main/packages/jsx-runtime/CHANGELOG.md#013","sections":[{"kind":"fix","heading":"Patch Changes","items":2}],"hash":"48f6a9725e492968"},{"version":"0.1.2","date":"2026-09-07","date_source":"registry","heading":"0.1.2","url":"https://github.com/ui5-community/jsx-runtime/blob/main/packages/jsx-runtime/CHANGELOG.md#012","sections":[{"kind":"fix","heading":"Patch Changes","items":1}],"hash":"4fc0bd73d1f8783e"},{"version":"0.1.1","date":"2026-09-02","date_source":"registry","heading":"0.1.1","url":"https://github.com/ui5-community/jsx-runtime/blob/main/packages/jsx-runtime/CHANGELOG.md#011","sections":[{"kind":"fix","heading":"Patch Changes","items":1}],"hash":"5ee453bbfb9c06aa"},{"version":"0.1.0","date":"2026-07-13","date_source":"registry","heading":"0.1.0","url":"https://github.com/ui5-community/jsx-runtime/blob/main/packages/jsx-runtime/CHANGELOG.md#010","sections":[{"kind":"feature","heading":"Minor Changes","items":1}],"hash":"f67c18ba04b67db5"}],"versions":[{"version":"0.1.5","date":"2026-10-05"},{"version":"0.1.4","date":"2026-10-05"},{"version":"0.1.3","date":"2026-09-09"},{"version":"0.1.2","date":"2026-09-07"},{"version":"0.1.1","date":"2026-09-02"},{"version":"0.1.0","date":"2026-07-13"}],"crawled_at":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:ui5-community","name":"UI5 Community","json":"/actors/ui5-community.json"}],"contributors":[{"ref":"actor:petermuessig","name":"Peter Muessig","json":"/actors/petermuessig.json"}],"explained_by":[{"ref":"content:devtoberfest-2026-ui5-views-type-safe-tsx","name":"UI5 Views, Reimagined: Type-Safe TSX for a Modern Dev Experience","json":"/content/devtoberfest-2026-ui5-views-type-safe-tsx.json"}],"alternative_to_this":[],"needed_by":[{"ref":"artifact:ui5-community-jsx-runtime-helloworld","name":"@ui5-community/jsx-runtime-helloworld","json":"/artifacts/ui5-community-jsx-runtime-helloworld.json","requirement":"required","role":"consumed-library"},{"ref":"artifact:ui5-community-jsx-runtime-showcase","name":"@ui5-community/jsx-runtime-showcase","json":"/artifacts/ui5-community-jsx-runtime-showcase.json","requirement":"required","role":"demonstrated-library"}],"available_via":[],"parts":[{"ref":"artifact:ui5-community-jsx-runtime-helloworld","name":"@ui5-community/jsx-runtime-helloworld","json":"/artifacts/ui5-community-jsx-runtime-helloworld.json"},{"ref":"artifact:ui5-community-jsx-runtime-showcase","name":"@ui5-community/jsx-runtime-showcase","json":"/artifacts/ui5-community-jsx-runtime-showcase.json"}],"add_on_to":{"ref":"artifact:openui5-core","name":"@openui5/sap.ui.core","json":"/artifacts/openui5-core.json"},"add_ons":[],"answered_through_parts":[]}}