<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>abap2UI5 Insights</title>
    <link>https://abap2ui5.github.io/insights/</link>
    <atom:link href="https://abap2ui5.github.io/insights/rss.xml" rel="self" type="application/rss+xml"/>
    <description>Short essays about one idea: what happens when the ABAP server sends the screen instead of only the data.</description>
    <language>en</language>
    <lastBuildDate>Sun, 01 Nov 2026 01:49:54 GMT</lastBuildDate>
    <item>
      <title>#1 Somewhere on the Way to UI5, We Lost RTTS</title>
      <link>https://abap2ui5.github.io/insights/01-somewhere-on-the-way-to-ui5/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/01-somewhere-on-the-way-to-ui5/</guid>
      <description>A table whose structure is only known at runtime, drawn in UI5 - how abap2UI5 binds data typed by the runtime type services without an entity type, and what a view without a contract costs.</description>
    </item>
    <item>
      <title>#3 One Class, No Programming Model</title>
      <link>https://abap2ui5.github.io/insights/03-one-class-no-programming-model/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/03-one-class-no-programming-model/</guid>
      <description>The one interface an abap2UI5 app implements, and why three save handlers - EML, a MODIFY, a BAPI - sit behind one unchanged UI class.</description>
    </item>
    <item>
      <title>#4 No Annotation in Between</title>
      <link>https://abap2ui5.github.io/insights/04-no-annotation-in-between/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/04-no-annotation-in-between/</guid>
      <description>Why the vocabulary of an abap2UI5 view is the UI5 control library itself - every control, at the UI5 version the bootstrap names - shown with a sap.m.Wizard.</description>
    </item>
    <item>
      <title>#2 The Cost of a Screen</title>
      <link>https://abap2ui5.github.io/insights/02-the-cost-of-a-screen/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/02-the-cost-of-a-screen/</guid>
      <description>The smallest complete abap2UI5 app - one class, one interface, one URL parameter - and what has to exist beside it in the system, which is nothing.</description>
    </item>
    <item>
      <title>#5 UI5 Over-the-Wire</title>
      <link>https://abap2ui5.github.io/insights/05-ui5-over-the-wire/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/05-ui5-over-the-wire/</guid>
      <description>The one idea under abap2UI5: the backend answers every request with two strings, a UI5 XML view and its JSON model, and the browser renders them - UI5 Over-the-Wire.</description>
    </item>
    <item>
      <title>#6 The Frontend Knows Nothing</title>
      <link>https://abap2ui5.github.io/insights/06-the-frontend-knows-nothing/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/06-the-frontend-knows-nothing/</guid>
      <description>What the first GET delivers to the browser - a shell that renders a view and a model and knows no app - and why one shell serves every app in the system without a redeploy.</description>
    </item>
    <item>
      <title>#7 One Handler for Every App</title>
      <link>https://abap2ui5.github.io/insights/07-one-handler-for-every-app/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/07-one-handler-for-every-app/</guid>
      <description>Why no abap2UI5 app has a service of its own - one generic HTTP handler moves two strings for every app, and what the framework leaves to the apps to stay that small.</description>
    </item>
    <item>
      <title>#8 Only the Changed Part</title>
      <link>https://abap2ui5.github.io/insights/08-only-the-changed-part/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/08-only-the-changed-part/</guid>
      <description>Why the view is not sent on every click - an event changes the model alone, UI5 data binding updates the bound controls, and focus, scroll and half-typed input survive.</description>
    </item>
    <item>
      <title>#9 A New Instance on Every Request</title>
      <link>https://abap2ui5.github.io/insights/09-a-new-instance-on-every-request/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/09-a-new-instance-on-every-request/</guid>
      <description>Every request is a fresh instance of the app class - how z2ui5_t_01 carries the serialized instance forward, which attributes survive, and why a large attribute costs every click.</description>
    </item>
    <item>
      <title>#10 Swapping the View at Runtime</title>
      <link>https://abap2ui5.github.io/insights/10-swapping-the-view-at-runtime/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/10-swapping-the-view-at-runtime/</guid>
      <description>A different control chosen in an IF - what follows when the view is a string the app produces per request rather than an artifact fixed at design time.</description>
    </item>
    <item>
      <title>#11 No Build, No Deploy, No Cache</title>
      <link>https://abap2ui5.github.io/insights/11-no-build-no-deploy-no-cache/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/11-no-build-no-deploy-no-cache/</guid>
      <description>What is missing from change, activate, refresh - no frontend build, no deployment path, no cache to invalidate - because the initial page and the frontend modules are answered from ABAP source.</description>
    </item>
    <item>
      <title>#12 Where Your Own JavaScript Goes</title>
      <link>https://abap2ui5.github.io/insights/12-where-your-own-javascript-goes/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/12-where-your-own-javascript-goes/</guid>
      <description>The three declared seams for JavaScript of your own - a control method called by id, expression binding in the view, a custom control in the z2ui5_ccc BSP - and why there is no plugin system.</description>
    </item>
    <item>
      <title>#13 Four Verbs, Every Control</title>
      <link>https://abap2ui5.github.io/insights/13-four-verbs-every-control/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/13-four-verbs-every-control/</guid>
      <description>Why z2ui5_cl_ui5_view_builder has four methods - ele, tag, a, end - instead of one per control, what the completion list cost, and what the linter gives back.</description>
    </item>
    <item>
      <title>#14 A Classrun for the Browser</title>
      <link>https://abap2ui5.github.io/insights/14-a-classrun-for-the-browser/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/14-a-classrun-for-the-browser/</guid>
      <description>The shape abap2UI5 copied from if_oo_adt_classrun - one interface, one method, and it runs - and why a one-class app is one thing to read.</description>
    </item>
    <item>
      <title>#15 Where the Selection Screen Went</title>
      <link>https://abap2ui5.github.io/insights/15-where-the-selection-screen-went/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/15-where-the-selection-screen-went/</guid>
      <description>What PARAMETERS did that the browser lost - the variable and the field as one declaration - and how _bind( ) puts them back together.</description>
    </item>
    <item>
      <title>#16 One Click, One Request</title>
      <link>https://abap2ui5.github.io/insights/16-one-click-one-request/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/16-one-click-one-request/</guid>
      <description>The mental model under every abap2UI5 app - one click is one request and one call to main( ) on a fresh instance - and the three questions main( ) dispatches on, in order.</description>
    </item>
    <item>
      <title>#17 What the Client Can Do</title>
      <link>https://abap2ui5.github.io/insights/17-what-the-client-can-do/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/17-what-the-client-can-do/</guid>
      <description>The whole of z2ui5_if_client by shape - show a screen, bind data, read the event, navigate, message, follow-up actions - before knowing it by name.</description>
    </item>
    <item>
      <title>#18 CALL SCREEN, LEAVE SCREEN</title>
      <link>https://abap2ui5.github.io/insights/18-call-screen-leave-screen/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/18-call-screen-leave-screen/</guid>
      <description>The app stack - nav_app_call( ) pushes an instance, nav_app_leave( ) pops it, get_app_prev( ) hands the caller the sub-app with its typed attributes - and where popups and the launchpad fit.</description>
    </item>
    <item>
      <title>#19 Where F4 Went</title>
      <link>https://abap2ui5.github.io/insights/19-where-f4-went/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/19-where-f4-went/</guid>
      <description>Value help in three sizes - suggestion items filtered in the browser, a selection popup of the same class, a reusable value-help app on the stack - and what the DDIC link cost.</description>
    </item>
    <item>
      <title>#20 MESSAGE Still Works</title>
      <link>https://abap2ui5.github.io/insights/20-message-still-works/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/20-message-still-works/</guid>
      <description>Toasts, message boxes, sy, BAPIRET2 and exception objects - what carries over from classic messages, what an escaped exception does to the roundtrip, and check_hide_error_details.</description>
    </item>
    <item>
      <title>#21 The Lock Is Gone by the Next Click</title>
      <link>https://abap2ui5.github.io/insights/21-the-lock-is-gone-by-the-next-click/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/21-the-lock-is-gone-by-the-next-click/</guid>
      <description>Why an ENQUEUE set while a screen opens is gone before the next click, and the patterns that replace it - lock at save, an optimistic check, a soft lock, a stateful session.</description>
    </item>
    <item>
      <title>#22 Who May Start Which App</title>
      <link>https://abap2ui5.github.io/insights/22-who-may-start-which-app/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/22-who-may-start-which-app/</guid>
      <description>One ICF node serves every app and the URL names the class - where authentication, authorization, the CSRF check and the Content Security Policy each sit.</description>
    </item>
    <item>
      <title>#23 100 Rows, Four Hours, One Request</title>
      <link>https://abap2ui5.github.io/insights/23-100-rows-four-hours-one-request/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/23-100-rows-four-hours-one-request/</guid>
      <description>The three numbers behind abap2UI5 performance - the 100-row size limit of a list binding, the four-hour draft expiry, and what one request costs in instance and model size.</description>
    </item>
    <item>
      <title>#24 ABAP Unit for a Screen</title>
      <link>https://abap2ui5.github.io/insights/24-abap-unit-for-a-screen/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/24-abap-unit-for-a-screen/</guid>
      <description>Testing an abap2UI5 app in ABAP Unit without a client, HTTP or a browser - keep the logic out of client, call the handler methods directly, lint the view.</description>
    </item>
    <item>
      <title>#25 When One Class Is Not Enough</title>
      <link>https://abap2ui5.github.io/insights/25-when-one-class-is-not-enough/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/25-when-one-class-is-not-enough/</guid>
      <description>The four seams of a larger abap2UI5 app - a class per screen on the stack, popups as classes, logic in a class without a screen, nested views - all of them ordinary ABAP.</description>
    </item>
    <item>
      <title>#26 A Tile Like Any Other</title>
      <link>https://abap2ui5.github.io/insights/26-a-tile-like-any-other/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/26-a-tile-like-any-other/</guid>
      <description>An abap2UI5 app in the Fiori Launchpad - the one shell BSP installed system-wide, the target mapping per app, what the app can read inside, and the blank tile after an import.</description>
    </item>
    <item>
      <title>#27 One Codebase, 7.02 to ABAP Cloud</title>
      <link>https://abap2ui5.github.io/insights/27-one-codebase-702-to-abap-cloud/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/27-one-codebase-702-to-abap-cloud/</guid>
      <description>Why abap2UI5 runs from NetWeaver 7.02 to ABAP Cloud from one codebase - the three utility classes that absorb the release differences, the generated 702 branch, and UI5 from the bootstrap.</description>
    </item>
    <item>
      <title>#28 Cloud-Ready Is a Property of Your App</title>
      <link>https://abap2ui5.github.io/insights/28-cloud-ready-is-a-property-of-your-app/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/28-cloud-ready-is-a-property-of-your-app/</guid>
      <description>The framework is ABAP Cloud compliant, and that says nothing about the app - cloud-readiness is decided in the SELECT, a released CDS view against a database table.</description>
    </item>
    <item>
      <title>#29 When the API Is Not Released</title>
      <link>https://abap2ui5.github.io/insights/29-when-the-api-is-not-released/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/29-when-the-api-is-not-released/</guid>
      <description>SAP's four clean core levels, where abap2UI5 sits (Level A), where an app lands by what it calls, and the wrapper that gives an unreleased API a name and a boundary.</description>
    </item>
    <item>
      <title>#30 On-Stack or Side-by-Side</title>
      <link>https://abap2ui5.github.io/insights/30-on-stack-or-side-by-side/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/30-on-stack-or-side-by-side/</guid>
      <description>Two places to run the same app class - inside the SAP system, or on the BTP ABAP Environment against released remote APIs - and the lifecycle each one inherits.</description>
    </item>
    <item>
      <title>#31 One App, Many Systems</title>
      <link>https://abap2ui5.github.io/insights/31-one-app-many-systems/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/31-one-app-many-systems/</guid>
      <description>One side-by-side abap2UI5 app on the BTP ABAP Environment serving several S/4 systems - what makes it possible, and the tenant boundary the app has to enforce itself.</description>
    </item>
    <item>
      <title>#32 From ITS to abap2UI5</title>
      <link>https://abap2ui5.github.io/insights/32-from-its-to-abap2ui5/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/32-from-its-to-abap2ui5/</guid>
      <description>Twenty-seven years of SAP user interfaces in one line - ITS, BSP, Web Dynpro, UI5 Freestyle, RAP, abap2UI5 - and which move did not reverse.</description>
    </item>
    <item>
      <title>#33 RAP or abap2UI5?</title>
      <link>https://abap2ui5.github.io/insights/33-rap-or-abap2ui5/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/33-rap-or-abap2ui5/</guid>
      <description>The technical criteria for choosing RAP with Fiori Elements or abap2UI5 for a given screen - behavior against screen, EML from an abap2UI5 app, a runtime-typed model, the release floor.</description>
    </item>
    <item>
      <title>#34 UI5 Freestyle or abap2UI5?</title>
      <link>https://abap2ui5.github.io/insights/34-freestyle-or-abap2ui5/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/34-freestyle-or-abap2ui5/</guid>
      <description>The technical criteria for choosing UI5 Freestyle or abap2UI5 - the four edges where the browser has to be smart, and the case where the backend already knows everything.</description>
    </item>
    <item>
      <title>#36 Written for Agents</title>
      <link>https://abap2ui5.github.io/insights/36-written-for-agents/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/36-written-for-agents/</guid>
      <description>Why a one-class, one-language app is the shape an AI coding agent handles best, and where the setup - the published page map, the linter, the MCP server, the sample catalogs - is documented.</description>
    </item>
    <item>
      <title>#37 What the Client Can Send</title>
      <link>https://abap2ui5.github.io/insights/37-what-the-client-can-send/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/37-what-the-client-can-send/</guid>
      <description>The threat model of an abap2UI5 app - what the browser chooses (the class, a draft id, the event, every bound value, startup parameters) and what the framework checks on each; the page a security review starts from.</description>
    </item>
    <item>
      <title>#38 How Many Users</title>
      <link>https://abap2ui5.github.io/insights/38-how-many-users/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/38-how-many-users/</guid>
      <description>Sizing an abap2UI5 installation - one dialog work process per roundtrip, what a draft row holds, how z2ui5_t_01 grows and cleans itself, no server affinity, what a stateful session changes, what the roundtrip monitor measures.</description>
    </item>
    <item>
      <title>#39 Upgrading the Framework</title>
      <link>https://abap2ui5.github.io/insights/39-upgrading-the-framework/</link>
      <guid isPermaLink="true">https://abap2ui5.github.io/insights/39-upgrading-the-framework/</guid>
      <description>How abap2UI5 is versioned and upgraded - release tags, what is a stable contract (the public package), what the frozen package means, the deprecations page, pulling a tag with abapGit, the frontend branches, pinning, rolling back, what to re-test.</description>
    </item>
  </channel>
</rss>
