AppApptypeAn application you deploy and use, installed into a system or loaded into an application as a component, rather than a library whose functions you call.See every one →What this type is →independently maintainedindependently maintainedoriginPublished by one person or a small company outside SAP. Says nothing about quality; the readings say that.See every one →

RAP Studio

A local ABAP runtime with a browser workbench: RAP sources in abapGit layout are activated on Node.js, kept in SQLite or PostgreSQL and served as OData V4 and V2 to SAP Fiori elements and SAPUI5 apps, with no SAP server attached.

RAP work normally needs a system to activate against: a SAP BTP ABAP environment or an S/4HANA client for the CDS, the behavior definition and the handler classes. RAP Studio activates the same sources on Node.js and keeps them in abapGit layout: CDS view entities become real database views in SQLite or PostgreSQL, writes go through the RAP transaction buffer, where determinations and validations run before the save sequence writes one database transaction, and each service is served as OData V4 with the draft protocol and again as OData V2 at the SAP Gateway URL. A second engine, built from open-abap-core, open-abap-gui and @abaplint/transpiler, runs classic programs on the same database: reports with selection screens and ALV, module pools with dynpros, function groups, background jobs, application logs and Adobe print forms. Every system also carries an SAP standard layer of 341 tables and 202 released CDS views with seed data, so ABAP Cloud code can read I_Customer where a classic program reads KNA1. The workbench in the browser holds the code editor, a debugger, the code checks, an SQL trace and a data preview, and its abapgit command writes an app out as an abapGit repository to pull into a real system.

Facts

Last pushLicenceApache-2.0

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.ODataABAPODatacapabilityExposing data and operations through OData, including the service model, metadata and protocol versions clients require. Version differences affect which clients can consume a service and which query features they can use.Agent access to your codeABAPUI5Agent access to your codecapabilityLetting a coding agent read the project or the system you actually have, reach its model, its objects and its checks, and act on it. In file-based environments that works out of the box; complex systems need dedicated access capabilities. Whatever the environment, the agent also needs project- and framework-specific context, so it understands the thing in front of it rather than guessing from what it remembers of its training data. The transport is incidental: an MCP server, a language server or a CLI answer the same question, and what differs between them is how much of the real thing the agent can see. Distinct from [MCP servers](capability:mcp-servers), which is a protocol adapter on your own running service, and from [agent guidance](capability:agent-guidance), which is knowledge handed over as files rather than read from the thing itself.DebuggingABAPDebuggingcapabilitySeeing what running code did between an input arriving and a result coming out: which code ran, what the values were at each point, and why a value ended up as it did.Static analysisABAPStatic analysiscapabilityCatching problems in code before it runs: naming, obsolete statements, security findings, and compatibility with a target environment. Style linting, security scanning and cloud-readiness checks are often treated as one concern.
Serves
Requires
abaplintabaplintartifactParses and syntax-checks an app's ABAP on activation and supplies most of the code-check rules; parser errors block activation.
Optional
@abaplint/transpiler@abaplint/transpilerartifactCompiles an app's classic ABAP to JavaScript for the second engine that runs reports, module pools and function groups.open-abap-coreopen-abap-coreartifactSupplies the standard ABAP classes the classic engine's compiled programs call; npm run setup:open-abap clones it into vendor/.open-abap-guiopen-abap-guiartifactTurns an app's reports and dynpros into the web screens the classic engine serves.express-icf-shimexpress-icf-shimartifactThe classic engine's HTTP server, which serves the compiled programs' screens.open-abap-balopen-abap-balartifactThe application logs of classic programs, which RAP Studio saves to the app's database and shows on its Logs page.open-abap-pdfopen-abap-pdfartifactThe PDF side of the classic engine, beside the print forms RAP Studio renders itself.open-abap-lockopen-abap-lockartifactThe locks behind the ENQUEUE_ and DEQUEUE_ function modules of a classic program's lock objects.SQLiteSQLiteoutside the atlasHolds an app's tables, views and draft tables as one file per app under apps/<app>/.rap/data.db, which the classic engine reads and writes too.PostgreSQLPostgreSQLoutside the atlasHolds an app's data in place of SQLite, either as an embedded PostgreSQL 18 in .rap/pgdata or as one schema per app on a server; the adapter runs the asynchronous driver in a worker thread and waits for each statement with Atomics.wait.

Who is behind it

Nabheet MadanNabheet MadanPersonMaintains this
In the atlas: maintains 1
@NabheetCloud
maintainer

Before choosing this

Conditions

PracticalFunctional boundary

The SAP standard layer's definitions are RAP Studio's own with a subset of SAP's fields, so a field has to be checked against a real system before anything relies on it, and importing the abapGit export into a real SAP system has not been tried yet. Client fields (abap.clnt) are dropped, which makes a system single tenant, SET LOCKS is a no-op, and precheck and function in a behavior definition are parsed without being run. Building by chat works only with a local Claude Code CLI; other agents are not supported yet.

PolicySAP API Policy 4.2026a§ 1.1, 1.2, 2.2.2from Agent access to your codeAn MCP server calls ADT or another SAP API of a running system for an agent.
  • § 1.1 Published APIs. Published APIs are made available for the documented purposes identified by SAP, including integration, extensions and data exchange.
  • § 1.2 Non-Published APIs. Customer and third-party applications must not access non-published APIs except where documentation permits it or SAP otherwise authorizes it.
  • § 2.2.2 AI call sequences and data extraction. Outside SAP-endorsed architectures, data services or expressly identified pathways, the policy prohibits specified agentic API use and systematic or large-scale extraction.

An agent that plans and executes ADT calls is the case section 2.2.2 names. Check that the endpoints are published for the intended use, and that the design runs within a pathway SAP identifies for it.

SAP API Policy 4.2026a →

What it declares

Every artifact

Type
App
Origin
Independently maintained
Runtime
Node.js

As an app

Where it runs
does not say
Distributed through
does not say

For OData

Protocols
odata-v4odata-v2

For agent access to your code

Read
sourcesearchwhere-usedDDICCDStable data
Change
writecreateactivatetransportsgit
Check
syntaxATCABAP Unit
Run
run codedumps
property statedstated nonot said

Tasks this contributes to1Beta

Create the RAP objects for a service and activate themAn agent takes a description of a business object and creates the table, the CDS view, the behaviour definition, the service definition and the service binding in the system, and activates them.Covers, under conditionslocal runtime the described service is built and activated on

The objects land in the studio's own runtime in abapGit layout, not in an ABAP system: reaching one means exporting the app as an abapGit repository, with the studio's abapGit button or its abapgit command, and pulling it in, and importing that export into a real system has not been tried yet. The build itself writes no service binding: the runtime serves the service from its definition, and the export is the step that writes one binding per service. The chat needs a Claude Code CLI installed and logged in on the same machine, which RAP Studio starts headless in the app folder; other agents are not supported yet.

All options on the Agent access to your code page →

Connections17

RAP Studio connectionsRAP StudioPROVIDES→ provides5provides stated Starts the developer's own Claude Code CLI headless in the app folder, where it may edit the app's files and run the platform's commands: activation with [abaplint](artifact:abaplint-abaplint), console classes, the Fiori generator and calls against the app's OData service. Every file change re-activates the app, and the plan, the files and the checks stream into the chat. NabheetCloud/ABAP-Runtime — README, Building by chat: https://github.com/NabheetCloud/ABAP-Runtime NabheetCloud/ABAP-Runtime — README, Building by chat: https://github.com/NabheetCloud/ABAP-RuntimeAgent access to your codeprovides stated Stops a run at breakpoints set in the code editor, in classes, reports, FORMs, function modules and PAI modules, with step into, over and return, watches, the variables, the attributes of `me`, the call stack and the system fields; the run happens in a worker thread on the app's database, so a stopped run does not commit. Beside it, unhandled exceptions are recorded with their ABAP call stack and an SQL trace records every ABAP SQL statement. NabheetCloud/ABAP-Runtime — README, What is supported: https://github.com/NabheetCloud/ABAP-Runtime NabheetCloud/ABAP-Runtime — README, Developer tools: https://github.com/NabheetCloud/ABAP-RuntimeDebuggingprovides stated Activates RAP sources on [Node.js](external:nodejs) on the developer's own machine: CDS, behavior definitions, behavior pools, projections, metadata extensions and service definitions. The data sits in [SQLite](external:sqlite) or [PostgreSQL](external:postgresql) and the sources in [abapGit](artifact:abapgit-abapgit) layout, so neither an SAP server nor a cloud account takes part. NabheetCloud/ABAP-Runtime — README: https://github.com/NabheetCloud/ABAP-Runtime NabheetCloud/ABAP-Runtime — README, What is supported: https://github.com/NabheetCloud/ABAP-RuntimeLocal developmentprovides stated Serves every service definition of an app as an OData V4 service with `$batch`, `$apply`, `$filter`, `$search`, `$expand` and the draft protocol, its `$metadata` annotations generated from the CDS annotations and the behavior definition, and serves the same service again as OData V2 at the SAP Gateway URL by translating the requests to the V4 service. NabheetCloud/ABAP-Runtime — README, SAP Fiori elements and SAPUI5: https://github.com/NabheetCloud/ABAP-Runtime NabheetCloud/ABAP-Runtime — README, OData V2: https://github.com/NabheetCloud/ABAP-RuntimeODataprovides stated Runs a check variant over an app's source from `rap atc` or the studio's Problems tab: [abaplint](artifact:abaplint-abaplint) rules beside its own `released_api` check, which reports a non-released SAP object used in ABAP Cloud code together with its released successor, each row carrying a severity. ABAP-Runtime — knowledge/README.md, Check variants: https://raw.githubusercontent.com/NabheetCloud/ABAP-Runtime/main/knowledge/README.md ABAP-Runtime — knowledge/checks/rules/released_api.md: https://raw.githubusercontent.com/NabheetCloud/ABAP-Runtime/main/knowledge/checks/rules/released_api.md NabheetCloud/ABAP-Runtime — README, Commands: https://github.com/NabheetCloud/ABAP-RuntimeStatic analysisNEEDS→ available via1available via derived Through: PostgreSQLPostgreSQL on SAP BTP, hyperscaleroption→ connects to1connects to stated The SAP Fiori elements and freestyle SAPUI5 apps it generates load the SAPUI5 runtime from SAP's CDN. NabheetCloud/ABAP-Runtime — README, Credits: https://github.com/NabheetCloud/ABAP-Runtimeui5.sap.com→ needs1needs stated Parses and syntax-checks an app's ABAP on activation and supplies most of the code-check rules; parser errors block activation. NabheetCloud/ABAP-Runtime — README, Credits: https://github.com/NabheetCloud/ABAP-Runtime NabheetCloud/ABAP-Runtime — README, How it works: https://github.com/NabheetCloud/ABAP-Runtimeabaplint→ optionally needs9optionally needs stated If: the classic engine is used, installed once by `npm run setup` Compiles an app's classic ABAP to JavaScript for the second engine that runs reports, module pools and function groups. NabheetCloud/ABAP-Runtime — README, Credits: https://github.com/NabheetCloud/ABAP-Runtime NabheetCloud/ABAP-Runtime — README, Quick start: https://github.com/NabheetCloud/ABAP-Runtime@abaplint/transpilerifoptionally needs stated If: the classic engine is used, installed once by `npm run setup` The classic engine's HTTP server, which serves the compiled programs' screens. NabheetCloud/ABAP-Runtime — README, Credits: https://github.com/NabheetCloud/ABAP-Runtimeexpress-icf-shimifoptionally needs stated If: the classic engine is used, installed once by `npm run setup` The application logs of classic programs, which RAP Studio saves to the app's database and shows on its Logs page. NabheetCloud/ABAP-Runtime — README, Credits: https://github.com/NabheetCloud/ABAP-Runtimeopen-abap-balifoptionally needs stated If: the classic engine is used, installed once by `npm run setup` Supplies the standard ABAP classes the classic engine's compiled programs call; `npm run setup:open-abap` clones it into `vendor/`. NabheetCloud/ABAP-Runtime — README, Classic ABAP: https://github.com/NabheetCloud/ABAP-Runtimeopen-abap-coreifoptionally needs stated If: the classic engine is used, installed once by `npm run setup` Turns an app's reports and dynpros into the web screens the classic engine serves. NabheetCloud/ABAP-Runtime — README, Credits: https://github.com/NabheetCloud/ABAP-Runtimeopen-abap-guiifoptionally needs stated If: the classic engine is used, installed once by `npm run setup` The locks behind the `ENQUEUE_` and `DEQUEUE_` function modules of a classic program's lock objects. NabheetCloud/ABAP-Runtime — README, Credits: https://github.com/NabheetCloud/ABAP-Runtimeopen-abap-lockifoptionally needs stated If: the classic engine is used, installed once by `npm run setup` The PDF side of the classic engine, beside the print forms RAP Studio renders itself. NabheetCloud/ABAP-Runtime — README, Credits: https://github.com/NabheetCloud/ABAP-Runtimeopen-abap-pdfifoptionally needs stated If: `--db pglite` or a `postgres://` URL is given Holds an app's data in place of [SQLite](external:sqlite), either as an embedded [PostgreSQL](external:postgresql) 18 in `.rap/pgdata` or as one schema per app on a server; the adapter runs the asynchronous driver in a worker thread and waits for each statement with `Atomics.wait`. NabheetCloud/ABAP-Runtime — README, Where is the data saved?: https://github.com/NabheetCloud/ABAP-Runtime NabheetCloud/ABAP-Runtime — README, Where is the data saved?: https://github.com/NabheetCloud/ABAP-RuntimePostgreSQLifoptionally needs stated If: `--db sqlite`, which is the default Holds an app's tables, views and draft tables as one file per app under `apps/<app>/.rap/data.db`, which the classic engine reads and writes too. NabheetCloud/ABAP-Runtime — README, Where is the data saved?: https://github.com/NabheetCloud/ABAP-RuntimeSQLiteif

Install

npm add RAP Studio

Derived from the package name. No recipe recorded; the README has the configuration.

README

quoted from NabheetCloud/ABAP-Runtime under Apache-2.0, read
NabheetCloud/ABAP-Runtime/README.mdOn GitHub

RAP Studio — an open runtime for SAP RAP applications

Build, run and change end-to-end RAP / SAP Fiori applications without an SAP server, by chatting or by hand. You (or the AI agent) write standard ABAP RAP sources: CDS, behavior definitions, behavior pools, projections, metadata extensions and service definitions. RAP Studio activates them on Node.js, stores data in SQLite or PostgreSQL, and serves real OData V4. Real SAP Fiori elements and SAPUI5 apps run against it. The sources stay in abapGit layout, so the same files can later be pulled into SAP BTP ABAP environment or S/4HANA.

apps/<app>/                             one folder per application
  CLAUDE.md                             platform rules for the AI agent
  src/ztravel_a.tabl.cds                define table ...                     (or abapGit .tabl.xml)
  src/zr_travel.ddls.asddls             define root view entity ... composition / association
  src/zr_travel.bdef.asbdef             managed behavior definition with draft, side effects, actions
  src/zbp_r_travel.clas.locals_imp.abap behavior handlers (determinations, validations, actions, features)
  src/zc_travel.ddls.asddls / .bdef     projection layer
  src/zc_travel.ddlx.asddlxs            @UI annotations (metadata extension)
  src/zui_travel.srvd.srvdsrv           service definition
  data/*.json                           seed data
  webapp/<ui>/                          SAP Fiori elements / SAPUI5 apps
  .rap/                                 the app's database (not part of the sources)

What is supported

AreaWhat you can build, run and debug
RAPmanaged and unmanaged business objects, draft and collaborative draft with locks, early and late numbering, unmanaged / additional save, determinations, validations, actions, side effects, feature control, authorizations, ETags, business events, change documents, behavior extensions, custom entities, CDS parameters, table functions, hierarchies, access controls, attachments, ABAP Unit
OData and UIOData V4 (with $batch, $apply, draft protocol) and OData V2 at the SAP Gateway URL; SAP Fiori elements (List Report / Object Page, Worklist, Analytical List Page, Overview Page, Flexible Programming Model) and freestyle SAPUI5 apps
Dictionary, by handdomains (fixed values, value tables, CURR / QUAN), data elements with or without a domain, structures, table types, database tables (field grid, check tables, currency / quantity references, technical settings), lock objects, message classes, exception classes (T100)
Classic programs, by handreports (selection screens, text elements, WRITE lists with colors, ALV), function groups and function modules (parameter editor, test page like SE37), module pools (screen painter with dictionary field picker, table-control and tabstrip wizards, GUI status, transactions), classes used from all of them, lock objects with ENQUEUE_/DEQUEUE_, background jobs, application logs
Print formsSAP Adobe forms: form interfaces, a visual layout designer, Adobe LiveCycle XDP import, live PDF preview, print programs (FP_JOB_OPEN / form function module / FP_JOB_CLOSE) and the ABAP Cloud form APIs, output queue
Developer toolsdebugger (breakpoints in classes, reports, FORMs, function modules and PAI modules; step into / over / return; watches; variables, call stack, system fields), runtime errors like ST22, SQL trace like ST05, code checks like ATC, SAP's ABAP cleaner, data preview like SE16
SystemSQLite or PostgreSQL, apps that share master data like one SAP system, an S/4HANA standard layer (341 tables, 202 released views, with data), users, roles and authorizations, abapGit export
LearningPractice ABAP: 54 exercises with ABAP Unit tests, checks and clean-up

Everything runs on your machine with Node.js: no SAP server and no cloud account. The sections below give the details.

Quick start

You need Node.js 22.5 or later and git. Tested on macOS and Linux; on Windows use WSL.

git clone https://github.com/NabheetCloud/ABAP-Runtime.git
cd ABAP-Runtime
npm install
npm run setup
npm run studio

npm run setup installs the classic ABAP engine (reports, module pools, function modules) once. Open http://localhost:4004: open one of the demo apps (Travel, Purchase orders, Classic ABAP Showcase, …), start a blank app and build it by hand, or describe an app to the build agent (needs the Claude Code CLI, see below).

Or without cloning: npx rap-studio (then npx rap-studio setup for the classic engine).

The chat (describing an app to the build agent) needs the Claude Code CLI installed and logged in on this machine; see Building by chat. Building by hand needs nothing else.

The studio listens on this machine only (127.0.0.1). To reach it from other machines, create an administrator and start it with --host 0.0.0.0; see SECURITY.md.

Building by chat (with your local Claude Code CLI)

For now the chat works only with a local Claude Code CLI. The build agent behind the chat (new-app prompts, the app chat, "Fix with AI") is the Claude Code command line tool, installed on your machine and logged in to your own account; RAP Studio starts it for you and uses your account. Without it everything else works: build apps by hand with + New, run, debug, check and preview them. Other agents are not supported yet. If claude is not on your PATH, set RAP_CLAUDE_BIN to its full path.

  1. The studio creates apps/<name>/ with a CLAUDE.md that teaches the agent the platform rules and points it at the reference app (examples/travel).
  2. It runs your local Claude Code CLI headless in that folder (claude -p … --output-format stream-json, continuing the conversation with --resume). The CLI may only edit files and run the platform's own commands: rap check (activation + abaplint), rap run (console classes), rap fiori (generate Fiori apps) and rap odata (calls the app's OData service on the local studio).
  3. Every step streams into the chat: plan, files created and edited, checks run. Attach documents and screenshots to any message (📎, paste or drag and drop: images, PDFs, Word, Excel, PowerPoint, text files; up to 10 files of 25 MB). They are kept in the app's .rap/attachments; the agent reads them with the message (Office files as extracted text): specifications for the requirements, mockups and screenshots for what to build, screenshots of errors for what to fix.
  4. Every file change re-activates the app. The workbench tabs are Preview (the running app: the built-in UI, generated Fiori elements apps, UI5 apps), Code (Monaco: ABAP, CDS, BDEF, UI5 XML/JS; editable), Problems (compiler and abaplint findings, with "Fix with AI"), Data (tables and views) and Console (if_oo_adt_classrun).
  5. Download returns the app as a zip of abapGit-layout sources.

Example result: the prompt "a library app to manage books and loans…" produced 17 RAP objects with 0 errors in about 4 minutes. A follow-up "add an optional, validated member email" changed tables, views, BDEF, handler, message class and annotations, and migrated the existing data in place.

SAP Fiori elements and SAPUI5

Each service is a full OData V4 service at /a/<app>/odata/<service>/:

  • $metadata (EDMX) with UI, Common, Capabilities, Aggregation, Measures annotations generated from CDS annotations and the BDEF. That covers line items, facets, field groups, selection fields, header info, value lists, text arrangements, currencies, side effects, draft root/node, operation availability from instance feature control, insert/update/delete restrictions, charts and aggregation.
  • $batch (multipart with atomic change sets and Content-ID references, and JSON batch), $apply (filter, groupby, aggregate; $filter applies to its result, as OData V4 defines), $filter, $search, $expand with nested options, $count, /$count.
  • The draft protocol: IsActiveEntity, HasDraftEntity, SiblingEntity, DraftAdministrativeData, and the Edit / Prepare / Activate / Discard / Resume actions.

Generate a Fiori elements app (or use + Fiori app in the studio's Preview tab):

node bin/rap.js fiori apps/travel --template lrop --service zui_travel --entity Travel --name travel-fe
TemplateVerified in the browser
lrop List Report + Object Pagelist with draft editing-status filter, value helps, actions enabled per instance; object page with facets; Edit → draft → live recalculation via side effects → Save (Prepare + Activate)
worklistlist without filter bar
alp Analytical List Pagechart + table from $apply, measures from @Aggregation.default, chart from @UI.chart
fpm Flexible Programming Modelcustom XML view with FilterBar / Table building blocks
ovp Overview Pageruns in the SAP Fiori launchpad sandbox; list and table cards from @UI.lineItem, analytical chart cards from @UI.chart, global filter bar
freestyle SAPUI5your own UI as a real component: list and detail pages with routing, search, the composition child table and action buttons, generated from the annotations as a starting point

Every UI, Fiori elements or freestyle, is an SAPUI5 component: Component.js, manifest.json (OData V4 data source and default model, routing), i18n, and an index.html that only starts the component (sap/ui/core/ComponentSupport). The studio's Preview opens the app's own UI5 app. The lightweight built-in UI is still there as "Built-in data browser".

When you describe a new app and do not say which UI you want, the chat asks: SAP Fiori elements or freestyle SAPUI5? If you pick Fiori elements, it asks which template. The same happens in the app chat when you ask for a new UI. The agent then generates that app.

Freestyle UI5 apps go in webapp/<ui>/. For example, apps/travel/webapp/travels is a component whose view calls the RAP action acceptTravel.

Where is the data saved?

Every app has its own database. You choose it with --db (or the RAP_DB environment variable):

OptionWhere the data lives
sqlite (default)apps/<app>/.rap/data.db, one SQLite file per app (WAL mode)
pgliteapps/<app>/.rap/pgdata: embedded PostgreSQL 18 (WebAssembly), no server needed
postgres://user:pw@host:5432/dbyour PostgreSQL server, one schema per app (app_<name>)
node bin/rap.js studio apps --db postgres://rap:secret@localhost:5432/rapdb

How it maps:

  • define table becomes a real database table with the same column names and the key as primary key. Client fields (abap.clnt) are dropped (single tenant).
  • CDS view entities become real database views (joins, association paths, case, cast, functions), so reads are plain SQL. Draft-enabled entities get a draft twin view (<view>$d) over the draft table (ztravel_d).
  • Writes never go straight to the database. OData and EML changes are collected in the RAP transaction buffer. Determinations run on modify; at save, determinations on save and validations run. Only if nothing failed does the save sequence write all INSERT/UPDATE/DELETEs in one database transaction; otherwise everything is rolled back and the messages go back to the UI. Admin fields (createdBy, lastChangedAt, …) are filled at save time.
  • Drafts are saved to the draft tables on every change without validations. Activate copies the draft (with its children) into the active tables in one transaction and deletes the draft.
  • Late numbering: new instances and drafts carry a preliminary key until save. Then the saver's adjust_numbers assigns the final keys, and the runtime rewrites the keys of the children before anything is written.
  • Unmanaged save (managed with unmanaged save): the runtime skips its own INSERT/UPDATE/DELETE and calls the saver's save_modified, which writes the tables with ABAP SQL. The calls still run inside the same database transaction. See examples/orders (sales orders with items, both features, with draft).
  • Schema changes (new fields) migrate in place: new columns are added and existing rows are kept. Views are rebuilt on every activation.
  • Seed data (data/<table>.json) is loaded only into empty tables.
  • Back up by copying .rap/ (SQLite, PGlite) or with pg_dump (server).

PostgreSQL drivers are asynchronous while the ABAP runtime executes synchronously, like ABAP. The PostgreSQL adapter runs the driver in a worker thread and waits for each statement with Atomics.wait. All SQL goes through a small dialect layer (src/db), and the full test suite passes on both databases (npm test, npm run test:pg).

One system: apps share master data

All apps of a studio form one system, like one SAP system. An app can use the tables and CDS views of other apps (products, customers, suppliers…) by name, in select from, joins, associations, value helps and expose, without copying them. At activation the runtime finds the owner app, loads its definitions read-only, and reads its data live:

  • SQLite: the owner's data.db is attached and read through temporary views.
  • PostgreSQL server: a view on the owner's schema (app_<owner>).
  • Embedded PostgreSQL (pglite) keeps every app in its own database, so sharing is not available there (activation says so).

The data stays with the owner, and only the owner's business object changes it. When the owner app changes, the apps using it are re-activated. rap catalog <words> lists what exists. The AI agent searches it before creating master data, and the new-app prompt lists reusable objects. Small lists (@ObjectModel.resultSet.sizeCategory: #XS) become drop-downs.

SAP standard layer (S/4HANA)

Every system comes with SAP's standard objects, like an S/4HANA client in use: organisational units, configuration, master data and business documents as tables with SAP's names and keys (T001, T001W, TCURR, BUT000, KNA1, LFA1, MARA, MARD, MBEW, SKA1, CSKS; VBAK/VBAP/VBEP/VBFA, LIKP/LIPS, VBRK/VBRP, PRCD_ELEMENTS, EBAN, EKKO/EKPO/EKBE, RBKP/RSEG, MATDOC, BKPF/BSEG, ACDOCA, AUFK/AFKO/AFRU, STKO/STPO, EQUI, QMEL, QALS, ANLA, PRPS, COEP, BPGE, CDHDR, PA0001 … and EWM/TM tables with their namespace: /SCWM/LAGP, /SCWM/QUAN, /SCWM/ORDIM_C, /SCMTMS/D_TORROT … 341 tables) and the released CDS views on top (I_CompanyCode, I_Customer, I_Product, I_SalesOrder, I_DeliveryDocument, I_BillingDocument, I_SDDocumentProcessFlow, I_PurchaseOrderAPI01, I_MaterialStock_2, I_JournalEntryItem, I_GLAcctBalanceCube, I_OutboundDelivery, I_PurchaseOrder, I_ProductionOrder, I_ManufacturingOrder, I_MaintenanceOrder, I_InspectionLot, I_FixedAsset, I_Network, I_EWMWarehouseTask, I_FreightOrder … 202 views, plus the compatibility views MKPF, MSEG, VBAKUK, VBAPUK, BSID/BSAD, BSIK/BSAK, BSIS/BSAS, GLPCA, COSP/COSS, ANEK/ANEP/ANLC), with seed data: company codes 1010 (DE), 1710 (US) and 4110 (IN) with plants, storage locations, sales and purchasing organizations, customers, suppliers, products with prices, G/L accounts, cost and profit centers, currencies and exchange rates; and the year's documents, which follow each other as in a real system: sales orders → deliveries → goods issues → billing → journal entries → payments, purchase requisitions → purchase orders → goods receipts → supplier invoices → payments, production orders with confirmations, maintenance and quality, fixed assets, projects with networks and budgets, CO line items, HR infotypes, EWM warehouse tasks and TM freight orders for the deliveries. Every journal entry balances, and the stock is what the material documents leave.

Apps use them by name like another app's views: RAP and ABAP Cloud code through the released views (portable to a real S/4HANA system), classic programs also through the tables. The names follow SAP's Cloudification Repository (the tables are "not to be released", the views are their released successors). The definitions are RAP Studio's own, with a subset of SAP's fields: check them against a real system before relying on a field. In the studio, SAP S/4HANA Standard (read-only) shows the objects and their data. Sources: standard/s4hana, generated by python3 standard/generate.py (organisation and master data) and standard/transactional.py (the documents' tables, views and data, from standard/dictionaries.json, which standard/extract_dictionaries.py reads from S/4HANA data dictionary documents).

Several users and draft locks

Every request runs as a user: the x-rap-user header, HTTP Basic auth, or the rap_user cookie that the studio's user button (👤) sets. Without one, the user is DEVELOPER. sy-uname and the admin fields follow the user. The same button sets the user's date format (SAP's six formats: DD.MM.YYYY, MM/DD/YYYY, MM-DD-YYYY, YYYY.MM.DD, YYYY/MM/DD, YYYY-MM-DD), which classic screens, ALV grids, WRITE lists, DATE = USER templates, printed forms and the function module test page use; it is kept per user in apps/.rap-user-settings.json.

  • A draft belongs to the user who created it and locks the active instance. Other users see the active data with "Locked by …" (DraftAdministrativeData.InProcessByUser). They get HTTP 409 when they try to edit, delete or run an action on it.
  • The lock expires after 15 minutes without changes (RAP_DRAFT_LOCK_MINUTES). After that, Edit with PreserveChanges: true reports the other user's unsaved changes (409). Fiori elements then asks whether to discard them, and Edit without PreserveChanges takes the instance over.
  • The Fiori elements editing-status filter ("Own draft", "Locked by another user", "Unsaved changes by another user") works.

Users, roles and access control

Without users, the system runs in development mode: no login, the user is just a name, and everyone has all authorizations. Once a user exists, every request must log on (login page with a session cookie, or HTTP Basic):

node bin/rap.js user apps alice --password secret --admin                # administrators use the studio
node bin/rap.js user apps bob --password secret --role Z_SALES_EMEA
node bin/rap.js role apps Z_SALES_EMEA ZSALES ACTVT=03 ZREGION=EMEA       # an authorization (values may end with *)
node bin/rap.js users apps

Only administrators (--admin) use the studio and an app's development functions (activate, run, debug, code checks, generators, SQL trace, tests); other users get the apps themselves: their UIs, OData services, value helps and classic programs. Users live in apps/.rap-users.json (passwords hashed with scrypt). Roles hold authorizations like PFCG roles, and are checked by AUTHORITY-CHECK in ABAP and by CDS access controls (.dcls.asdcls) in OData reads and ABAP SQL. $session.user, sy-uname and cl_abap_context_info return the logged-on user.

RAP features

Managed and unmanaged BOs, draft and collaborative draft with locks, early and late numbering, unmanaged/additional save, determinations, validations, actions, side effects, feature control, authorization, ETags (If-Match, HTTP 412), business events with event handlers (rap events <dir>), change documents (/api/changes), behavior extensions, custom entities (query provider classes), CDS parameters, table functions (AMDP), hierarchies, access controls, attachments (stream properties) and ABAP Unit (rap test <dir>). Details: docs/LANGUAGE-COVERAGE.md.

Classic ABAP: reports, module pools, function groups

Apps can also hold classic programs: reports (src/z<name>.prog.abap + .prog.xml, selection screens, WRITE lists, ALV with cl_salv_table), module pools with dynpros and transactions, function groups and classic DDIC objects (data elements, domains, table types). They run on a second engine built from the open-abap projects (MIT): abaplint's transpiler compiles them to JavaScript, open-abap-core provides the standard classes, and open-abap-gui converts reports and dynpros into web screens. The engine reads and writes the same SQLite database as the app's RAP business objects, and reads tables of other apps in the system from their owner's database (read-only).

Every classic object can be created by hand from + New in the studio, with a form or visual editor where SAP has one: domains and data elements (SE11), tables with a field grid, check tables and references, structures and table types, lock objects, message classes, function groups and function modules with a parameter editor (SE37), reports with text elements (SE38), module pools with a screen painter, field picker from the dictionary, table-control and tabstrip wizards and a GUI status editor (SE51 / SE41), transactions (SE93), Adobe forms with their form interface (SFP), and classes and exception classes (SE24).

Instead of the SAP GUI window chrome, programs get the RAP Studio look: a launcher with one tile per program, a header with the program's actions, card-style selection screens and lists, light and dark mode.

npm run setup:open-abap                 # once: clone the open-abap repositories into vendor/ and build the converter
node bin/rap.js gui <dir> [--port 4005] # compile the app's classic programs and serve them
node bin/rap.js gui <dir> --build-only  # compile only, print errors

From an app folder, the programs also run on the command line, which is how the AI agent tests what it builds and answers "run …" requests in the chat (they use the studio's engine for the app, or start one):

node bin/rap.js programs                                    # programs and transaction codes
node bin/rap.js program ZCFLIGHT_REPORT P_CARR=AA           # run a report, print the list
node bin/rap.js transaction ZCFL GV_CARRIER=LH GV_CONNECTION=0400 --step SHOW --step SAVE GV_PRICE=610
node bin/rap.js job schedule ZCFLIGHT_REPORT P_CARR=LH [--at 2026-11-05T06:00:00Z] [--every 1440]
node bin/rap.js jobs | job <nr> | job cancel <nr> | job delete <nr>
node bin/rap.js logs | log <handle>
node bin/rap.js form ZCFL_FLIGHT_LIST [--data '{…}'] [--print] [--out list.pdf]
node bin/rap.js outputs | output delete <nr>
node bin/rap.js table zcflight_a carrier_id=LH

examples/classic is the reference set of classic objects the agent copies from.

What runs, each covered by test/classic.test.mjs:

Reportsselection screens (parameters, select-options, checkboxes), WRITE lists, ALV
Value help (F4)every screen field with a check table, domain fixed values or a domain value table gets a value-help button; F4 or the button opens a searchable list of the values with their texts (parameters, select-options, dynpro fields)
Module poolsdynpros with PBO/PAI, GUI status functions, transactions (.tran.xml); each dialog step commits
Lock objectsENQUEUE_/DEQUEUE_ function modules, locks per user session, FOREIGN_LOCK with the owner
Function groupsfunction modules with exceptions; the group metadata is generated from the interface comment; Functions page tests a function module like SE37 (typed parameters, fixed values, exports, exceptions), also rap fm Z_FUNCTION IV_X=value
DDICdata elements, domains with fixed values (RTTS), table types
Application logscl_bali_log saved to the app's database; Logs page
Background jobsJOB_OPEN/JOB_SUBMIT/JOB_CLOSE, periodic jobs, "Run in background" on selection screens; spool on the Jobs page
Print formsSAP Adobe forms: layouts in src/<form>.form.json, edited in a visual designer (object library, drag and drop, data binding, properties) or as JSON: master pages, tables with repeated headers, groups and totals, calculations (FormCalc-like expressions, row by row), conditions, text modules, images, embedded TrueType fonts (any script), 2D and linear barcodes (QR, Data Matrix, PDF417, Aztec, Code 128 / 39 / 93, GS1-128, EAN / UPC, ITF, Codabar), fillable fields with calculations, digital signatures, PDF/A-2b, AES-256 passwords and permissions; Adobe LiveCycle Designer XDP import with JavaScript / FormCalc scripts and dynamic (flowed) layouts converted. ABAP: the ABAP Cloud APIs (cl_fp_form_reader, cl_fp_fdp_services data providers, cl_fp_ads_util=>render_pdf, print queue), the classic FP_JOB_OPEN / generated function module / FP_JOB_CLOSE, cl_fp PDF objects (extract data, sign, verify), zcl_rap_form; Output and Forms pages
XCOxco_cp=>… (open-abap-xco)
TablesTables page: the app's tables with filters (like SE16)

To try all of it, open the Classic ABAP Showcase app (apps/classic-showcase) in the studio and pick Classic ABAP programs in the preview: run the reports, transaction ZCFL (open it in two browser tabs to see the lock), the price check (log and background job) and the print report, then look at the Jobs, Logs, Output (PDF viewer), Forms and Tables pages.

In the code editor every object has Check (Ctrl+F2: the code checks of that object, on the unsaved text), Activate (Ctrl+F3) and Save (Ctrl+S), and runnable objects a Run button (F8): tables and CDS views open the data preview, function modules their test page, reports and transactions start on the classic engine, console classes run. Print form layouts open in a visual designer (Design) and next to a live PDF preview (Preview) that follows the editor, with the layout's sample data or a record of its data provider and a choice of locale. abapGit XML objects (data elements, domains, table types, transactions, lock objects, program attributes with screens and GUI status) open as a readable form, with a Source tab to edit.

In the studio, the preview menu shows Classic ABAP programs for apps that have them; the engine is built and started on demand (one process per app) and rebuilt when a program changes. RAP Studio's own additions to the open-abap libraries are in src/classic/abap (job function modules, log tables, zcl_rap_form), and two small fixes to open-abap are applied as patches by the setup (scripts/open-abap-patches/). Code: src/classic/.

OData V2

Every service is also served as OData V2, at the SAP Gateway URL /sap/opu/odata/sap/<SERVICE>/ below the app (for example /a/travel/sap/opu/odata/sap/ZUI_TRAVEL/): $metadata (EDMX 1.0 with sap: annotations), JSON in the V2 format, $inlinecount, $expand, V2 filter functions and literals, MERGE, $batch with change sets, and function imports for the actions and the draft actions (TravelEdit, TravelActivate, …). Requests are translated to the V4 service, so the RAP behavior is the same. Tested in test/odata-v2.test.mjs and with the SAPUI5 sap.ui.model.odata.v2.ODataModel. In the studio, the preview menu of every app with a service has OData V2 services (SAPUI5 test): a SAPUI5 page on the V2 model that lists the entity sets, opens records, calls the function imports (actions, draft) and links the $metadata.

Developer tools: debugger, runtime errors, SQL trace

  • Debugger: click the margin next to a line number in the code editor to set a breakpoint, then Debug (Shift+F8) on a console class, or Debug / Debug tests in the Console tab. The run stops at the breakpoints (without any, at the first statement) and shows the line, the variables (tables, structures and objects can be expanded), the attributes of me, the call stack and the system fields. Step into (F5), Step over (F6), Return (F7), Continue (F8), Stop, as in the SAP debugger. Breakpoints can change while it runs. The run happens in a worker thread with a debug build of the app, on the app's database: a stopped run does not commit.
  • Runtime errors (like ST22): an exception that no ABAP code catches (console runs, OData requests, application jobs, background processes) is recorded with its class, text, the ABAP call stack (class, method, file and line of every frame) and the source around the failing statement; listed in the Problems tab, a click opens the line.
  • SQL trace (like ST05): the switch in the Console tab records every ABAP SQL statement with its time, rows, parameters and the ABAP method that ran it (also inside the debugger).

Code quality: checks, ABAP cleaner, conformance

  • Code checks (like ATC): node bin/rap.js atc <dir> [--fix] and the studio's Problems tab run a check variant written in markdown (knowledge/checks/variants/default.md: categories Syntax and correctness, ABAP Cloud readiness, Security, Performance, Robustness, Clean ABAP, each check with a severity). The checks are abaplint rules plus RAP Studio's released_api check, which uses SAP's Cloudification Repository to report non-released objects in ABAP Cloud code with their released successor (KNA1 → I_Customer). Findings explain themselves (abaplint's documentation and the abapOpenChecks descriptions in knowledge/abapopenchecks), and many have automatic fixes. An app can adjust rows in its checks.md.
  • ABAP cleaner: npm run setup:abap-cleaner fetches SAP's ABAP cleaner (stand-alone build with its own Java). node bin/rap.js clean <dir> [file] and Clean up in the code editor apply its cleanup rules; when the cleaned code would not activate, the change is undone.
  • Conformance with real-world ABAP: npm run conformance:exercism compiles and unit-tests the reference solutions of exercism's ABAP track: all 55 exercises (602 tests). npm run conformance:cheatsheets runs SAP's ABAP cheat sheets (every class with if_oo_adt_classrun, to the end): all 28 run, all 65 classes compile.
  • knowledge/ holds the markdown the platform and the agent read (see knowledge/README.md).

Practice ABAP (exercises)

Practice ABAP in the studio header opens the practice exercises of exercism's ABAP track (MIT): 54 exercises by level (Easy, Medium, Hard), from internal tables and strings to ciphers and the knapsack problem. Each one has the task, a class to complete and its ABAP Unit tests. Write the class in the editor (saved as you type), press Run tests (F8) and see each test pass or fail with expected and actual values; syntax errors are listed with their line. Check runs the code checks, Clean up SAP's ABAP cleaner. The reference solution unlocks once the tests pass (or on request), and the list keeps your progress. The track is downloaded on first use (vendor/exercism-abap); your work is in apps/.exercises/. Tests run in a separate process with a time limit, so an endless loop only stops that run.

Moving an app to an SAP system

node bin/rap.js abapgit <dir> <out-dir> (or the studio's abapGit button) writes the app as an abapGit repository: the sources plus object XML, CDS tables converted to DDIC table XML, and an OData V4 UI service binding per service. Push it to a Git repository and pull it into a package with abapGit in ADT. The XML is generated: check the first import.

How it works

 sources (abapGit layout)
   ├─ CDS  ──────────────► src/ddl/cds.js  ─┐
   ├─ BDEF ──────────────► src/ddl/bdef.js ─┤
   └─ ABAP classes ──┬───► abaplint (syntax check against the SAP grammar, ABAP Cloud)
                     └───► src/abap/compiler.js ──► JavaScript classes (+ src/abap/runtime.js)
                                     │
                    activation: src/rap/model.js → tables, views, draft tables, handlers bound
                                     │
 HTTP: src/studio (workbench, agent) ─► src/server/odata.js (OData V4) ─► src/rap/rap.js (RAP runtime) ─► src/db (SQLite | PostgreSQL)
  • ABAP → JavaScript. Each ABAP class becomes a JavaScript class. The ABAP control flow maps 1:1, and value semantics (copying structures/tables, field symbols, ABAP comparison and conversion rules) live in $rt. EML statements call the RAP runtime; ABAP SQL is translated to SQL.
  • Syntax checking uses abaplint. Parser errors block activation and semantic findings show as warnings. Released SAP APIs are provided as ABAP stubs in src/check/stdlib.
  • Conformance is measured against SAP's ABAP cheat sheets (node test/conformance.mjs <dir>/src). All of its CDS sources and BDEFs parse, and 60 of its 65 sources compile. See docs/LANGUAGE-COVERAGE.md.

Commands

node bin/rap.js [studio] [apps] [--db ...] [--host 127.0.0.1] [--port 4004]   # the studio for all apps
node bin/rap.js setup [--cleaner]                   # install the classic engine (and SAP's ABAP cleaner)
node bin/rap.js serve <dir> [--db ...]              # serve one app (built-in Fiori-like UI at /)
node bin/rap.js check <dir>                         # activate + abaplint, exit code 1 on errors
node bin/rap.js run <dir> <class>                   # run an if_oo_adt_classrun class
node bin/rap.js fiori <dir> --template lrop|worklist|alp|ovp|fpm|freestyle --service <srvd> --entity <Set> [--name app]
node bin/rap.js catalog [words]                     # tables and views of the other apps in the system (run in an app folder)
node bin/rap.js odata GET|POST|PATCH|DELETE <path> [json] [--user NAME]   # call the app's OData service on the studio
node bin/rap.js test <dir> [filter]                 # ABAP Unit tests (classes FOR TESTING)
node bin/rap.js events <dir>                        # business events raised by the app
node bin/rap.js user|role|users <apps-dir> ...      # users and roles (see above)
node bin/rap.js abapgit <dir> <out-dir>             # export as an abapGit repository
node bin/rap.js atc <dir> [--fix]                   # code checks (check variant in knowledge/checks/variants)
node bin/rap.js clean <dir> [file]                  # SAP's ABAP cleaner (npm run setup:abap-cleaner first)
node bin/rap.js gui <dir> [--port 4005|--build-only] # classic reports and module pools (npm run setup:open-abap first)
node bin/rap.js js <dir> <class>                    # show the generated JavaScript
npm test                                            # end-to-end tests on SQLite
npm run test:pg                                     # the same tests on PostgreSQL (embedded)

Not supported yet

  • A few uncommon ABAP statements (see docs/LANGUAGE-COVERAGE.md) and XSLT 2.0.
  • Importing the abapGit export into a real SAP system has not been tried yet.

Credits

RAP Studio stands on the work of these open source projects. Thank you to their authors and contributors.

ProjectUsed forLicense
abaplint (@abaplint/core)ABAP parser, syntax checks and most code-check rulesMIT
abaplint transpiler (@abaplint/transpiler-cli, @abaplint/runtime)compiles classic ABAP to JavaScript for the classic engineMIT
open-abap: open-abap-core, open-abap-gui, express-icf-shim, open-abap-bal, open-abap-pdf, open-abap-lock, open-abap-jobs, open-abap-xcothe classic engine's standard classes, report and dynpro screens, HTTP, logs, PDF, locks, jobs and XCO; downloaded by npm run setup:open-abapMIT (see each repository)
ABAP cleaner (SAP)clean-up rules; downloaded by npm run setup:abap-cleanerApache 2.0
abapOpenCheckscheck descriptions in knowledge/abapopenchecksMIT
Cloudification Repository (SAP)released objects and successors for the released_api checkApache 2.0
ABAP cheat sheets (SAP samples)conformance tests of the runtimeApache 2.0
exercism ABAP trackPractice ABAP exercises and conformance testsMIT
Forms service by Adobe samples, ABAP partner reference application (SAP samples)the Adobe forms reference app and XDP test layoutsApache 2.0
PGlite, node-postgres, Expressembedded PostgreSQL, PostgreSQL driver, the classic engine's HTTP serverApache 2.0, MIT, MIT
bwip-js, qrcode-generator, Arimobarcodes, QR codes and the default font of print formsMIT, MIT, OFL 1.1
Monaco Editor, PDF.jsthe code editor and the PDF viewer (loaded from jsDelivr)MIT, Apache 2.0
SAPUI5 (SAP)Fiori elements and SAPUI5 apps, loaded from SAP's CDNSAP's terms of use

SAP, ABAP, Fiori, SAPUI5 and other SAP product names are trademarks of SAP SE. RAP Studio is an independent project, not affiliated with or endorsed by SAP.

License

RAP Studio is open source under the Apache License 2.0. Material from other projects keeps its own license; see NOTICE.

Apache-2.0, read

Others providing110

Local development
  1. abap2UI5 PlaygroundIn-browser ABAP editor beside the abap2UI5 app it buildsfrom ABAP
  2. web-abap2UI5abap2UI5 transpiled to JavaScript and run in a browser tabfrom ABAP
  3. vite-plugin-cdsServes a Vite app through cds watch and imports .cds filesfrom CAP
  4. CF Space SwitcherSwitches Cloud Foundry API, org and space from a view in VS Codefrom BTP/BAIP
  5. com.sap.cds:cds-feature-dev-dashboardBrowser dashboard for a running CAP Java service during developmentfrom CAP
  6. com.sap.cds:cds-maven-pluginMaven plugin running CDS build steps in a CAP Java projectfrom CAP
  7. @cap-js-community/commonSix CAP features in one package, from replication cache to rate limitsfrom CAP
  8. abap_trial_dockerScripts running the ABAP Developer Edition in Dockerfrom ABAP
  9. @neoimpulse/cap-js-bootstrapCLI starting several CAP services and an AppRouter locally togetherfrom CAP
  10. open-steamgateLocal ABAP server serving /IWBEP/ OData v2 without an SAP systemfrom ABAP
  11. pokrakam/abapDevSysInitABAP report setting up a new ABAP Developer Edition or trial systemfrom ABAP
  12. @sang2x/captoolsCLI of CAP development tools for Cloud Foundry workflowsfrom CAP
  13. ABAP Cloud Developer TrialDocker image of an ABAP system, for education and demo purposesfrom ABAP
  14. @sap/ams-devCompiler from AMS DCL policies to DCN for local runs and testsfrom CAP
  15. @sap/cds-dkCommand line client and development toolkit for CAPfrom CAP
  16. @sap/cdsCAP Node.js runtimefrom CAP
  17. dev-approuterDev-time wrapper for the SAP Application Routerfrom CAP
OData
  1. launchpad-kpiPuts a number from an abap2UI5 app on a Fiori launchpad tilefrom ABAP
  2. com.sap.cds:cds-adapter-odata-v2OData V2 protocol adapter built into the CAP Java runtimefrom CAP
  3. com.sap.cds:cds-adapter-odata-v4OData V4 protocol adapter for CAP Java Application Servicesfrom CAP
  4. @cap-js-community/odata-v2-adapterExposes a CAP service as OData V2from CAP
  5. odata-fwABAP framework for OData services with one class per entityfrom ABAP
  6. @odatano/coreCAP plugin serving the Cardano blockchain as OData V4from CAP
  7. @odatano/nightgateCAP plugin indexing the Midnight blockchain, exposed as OData V4from CAP
  8. open-steamgateLocal ABAP server serving /IWBEP/ OData v2 without an SAP systemfrom ABAP
  9. open-abap-odataOData and Gateway shims serving SEGW-style services on Node.jsfrom ABAP
  10. @root3287/cap-segwCompiler from a CDS service to SEGW model and data provider classesfrom CAP
  11. @sap/cdsCAP Node.js runtimefrom CAP
  12. OData Batch CreatorBuilds OData batch request payloads from an uploaded $metadata filefrom ABAP
Agent access to your code
  1. @abap2ui5/mcp-serverMCP server for the abap2UI5 check, deploy and run loopfrom ABAP
  2. arc-1-bopf-enharc-1 extension for reading and maintaining BOPF enhancementsfrom ABAP
  3. HammerNative macOS code editor for ABAP and CDSfrom ABAP
  4. arc-1-lspEdition of ARC-1 that runs ADT calls through adt-lsfrom ABAP
  5. arc-1MCP server over the ADT REST API for ABAP objectsfrom ABAP
  6. arc1-abap-bridgeVS Code bridge between arc-1 and ADT for VS Codefrom ABAP
  7. arc1-adt-abap-mcp-extEclipse add-on enabling the ADT MCP server with read-only toolsfrom ABAP
  8. capforgeMCP server scaffolding CAP and CDS checked by cds compilefrom CAP
  9. ABAP Accelerator MCP ServerAWS's ABAP MCP server for Amazon Q Developer and Kirofrom ABAP
  10. Modernization Agents for SAP on AWSAWS agents for ABAP, PI/PO and BW modernisation workfrom ABAP
  11. @mcp-abap-adt/coreABAP ADT MCP server published as an npm scope and pluginfrom ABAP
  12. @cap-js/mcp-serverMCP server for CAP development: model and docs searchfrom CAP
  13. chandrashekhar-mahajan/abap-mcp-serverABAP MCP server with ADT tools and five authentication strategiesfrom ABAP
  14. ADAMMCP server driving SAP's ABAP debugger over ADT for an agentfrom ABAP
  15. dassian-adtFork of mcp-abap-abap-adt-api with 25 tools and session recoveryfrom ABAP
  16. erpl-adtC++ binary speaking the ADT REST API as a CLI and MCP serverfrom ABAP
  17. bw-modeling-mcpMCP server for BW/4HANA modelling objectsfrom BTP/BAIP
  18. EPOD ADT MCP ServerMCP server for ABAP on the ADT session, in Eclipse or standalonefrom ABAP
  19. ZARC1_EXTENSION_FORMSarc-1 extension for SAPscript and Smart Forms objectsfrom ABAP
  20. fgalastri/MCP_ABAPValidates an ABAP class before it is deployed by converting the global class to a local one and syntax-checking that — plus CDS DDL and table metadata retrieval.from ABAP
  21. fr0ster/mcp-abap-adtABAP MCP server with full CRUD on on-premise and ABAP Cloudfrom ABAP
  22. abapsmithABAP MCP server over ADT with a local journal that can undo writesfrom ABAP
  23. sap-ai-dev-toolkitMCP proxy pinning an agent's ABAP tools to one SAP systemfrom ABAP
  24. ABAP MCPVS Code extension deploying an MCP server with ADT and OData toolsfrom ABAP
  25. aibap.mcpGo MCP server that writes, activates and runs ABAP classes via ADTfrom ABAP
  26. BellaEclipse plugin bringing Claude into ABAP Development Toolsfrom ABAP
  27. Maherd18/sap-mcp-serverPolicy-checked MCP server for ABAP development over ADTfrom ABAP
  28. sapdumpmcpMCP server reading ABAP short dumps over ADTfrom ABAP
  29. ABAP remote filesystemVS Code extension editing ABAP systems over ADT as a filesystemfrom ABAP
  30. mcp-abap-abap-adt-apiWrite-oriented MCP server over abap-adt-apifrom ABAP
  31. mcp-abap-adtRead-oriented MCP server fetching ABAP programs, classes, tablesfrom ABAP
  32. SAP MCP Connection ManagerWindows desktop manager handing SAP connections to assistants over MCPfrom ABAP
  33. ABAPilotMCP connector for ECC and on-premise S/4HANA with a licensed SAP sidefrom ABAP
  34. vibing-steampunkADT-to-MCP bridge in Go reaching past what ADT exposesfrom ABAP
  35. ADT MCP ServerMCP server shipped in ABAP Development Tools for Eclipse and VS Codefrom ABAP
  36. ABAP Development Tools for VS CodeSAP's ABAP tools in VS Code, over RFC to on-premise or HTTP to cloudfrom ABAP
  37. SAP Joule for Developers, ABAP AI capabilitiesSAP's AI for ABAP development in ADT for Eclipse and VS Codefrom ABAP
  38. @sap/mdk-mcp-serverMCP server with five tools for Mobile Development Kit workfrom BTP/BAIP
  39. @sap-ux/fiori-mcp-serverMCP server for creating and editing Fiori applicationsfrom UI5
  40. ABAPDocMCPMCP server turning a transport request into a WRICEF specificationfrom ABAP
  41. claude-sap-kitClaude Code plugin adding Custom_* tools to arc-1from ABAP
  42. Skybuffer AI MCP serverABAP add-on serving business data and transactions as MCP toolsfrom ABAP
  43. iGlowBrowser side panel that builds and fixes CPI iFlows from chatfrom BTP/BAIP
  44. @ui5/mcp-serverMCP server for UI5 development with ten toolsfrom UI5
  45. abap-adt-cliCLI that pulls and pushes ABAP packages as local files over ADTfrom ABAP
  46. workskong/mcp-abap-adtLight MCP adapter for ABAP over ADT, documented in Koreanfrom ABAP
  47. KlystronMCP server in ABAP inside the application server, with agent skillsfrom ABAP
  48. pyrfc-mcpMCP server calling RFC-enabled function modules behind an allowlistfrom ABAP
  49. ABAP-AI-CODE-TOOLSabapGit package adding create, modify and delete tools to ABAP AI Codefrom ABAP
  50. ABAP AI CodeAgentic coding assistant in ABAP that runs as an SAP GUI reportfrom ABAP
  51. VERTEXADT extension for Eclipse and VS Code showing three SAP GUI toolsfrom ABAP
Debugging
  1. dbg_value_statementDebugger script generating a VALUE statement for a variablefrom ABAP
  2. dump_infoDisplays the variables of ABAP short dumpsfrom ABAP
  3. CF Space SwitcherSwitches Cloud Foundry API, org and space from a view in VS Codefrom BTP/BAIP
  4. com.sap.cds:cds-feature-consoleConnects a running CAP Java app to CAP console for monitoringfrom CAP
  5. com.sap.cds:cds-feature-dev-dashboardBrowser dashboard for a running CAP Java service during developmentfrom CAP
  6. @cap-js/consoleConnects a running CAP application to the CAP consolefrom CAP
  7. @cap-js/data-inspectorInspects database entities and contents at CAP service levelfrom CAP
  8. ADAMMCP server driving SAP's ABAP debugger over ADT for an agentfrom ABAP
  9. abapsmithABAP MCP server over ADT with a local journal that can undo writesfrom ABAP
  10. ABAP Debugger Data View ExtensionDebugger menu entry rendering a table or structure as VALUE codefrom ABAP
  11. sap-cap-debuggerAttaches a debugger to a CAP app running on Cloud Foundryfrom CAP
  12. ABAP-Object-VisualizerDebugger script exporting an object hierarchy as Graphvizfrom ABAP
  13. abap_debugger_object_graph_extensionABAP debugger extension drawing objects as a Graphviz graphfrom ABAP
  14. Graphviz-browserStatic page drawing Graphviz graphs for the ABAP debugger extensionfrom ABAP
  15. ABAP remote filesystemVS Code extension editing ABAP systems over ADT as a filesystemfrom ABAP
  16. ABAP Development Tools for EclipseSAP's Eclipse plugins for ABAP development over ADTfrom ABAP
  17. ABAP Development Tools for VS CodeSAP's ABAP tools in VS Code, over RFC to on-premise or HTTP to cloudfrom ABAP
  18. @sap/cds-dkCommand line client and development toolkit for CAPfrom CAP
  19. @saptools/cf-debuggerNode.js inspector tunnel over cf ssh to Cloud Foundry appsfrom BTP/BAIP
  20. @saptools/cf-explorerFile search in apps deployed to SAP BTP Cloud Foundry over cf sshfrom BTP/BAIP
  21. @saptools/cf-function-traceStep-by-step state recorder for one JavaScript function in Node.jsfrom BTP/BAIP
  22. @saptools/cf-hanaSQL runner against the SAP HANA Cloud database bound to a CF appfrom BTP/BAIP
  23. @saptools/cf-inspectorShell debugger for remote Node.js over the Chrome DevTools Protocolfrom BTP/BAIP
  24. @saptools/cf-live-traceHTTP trace hook streaming a running CF Node.js app's trafficfrom BTP/BAIP
  25. @saptools/cf-request-runnerEndpoint discovery for CAP services deployed to Cloud Foundryfrom CAP
  26. @saptools/service-flowStatic end-to-end tracer of one CAP operation across repositoriesfrom CAP
  27. Smart DebuggerSAP GUI debugger script recording steps so execution can run backwardsfrom ABAP
Static analysis
  1. @abap2ui5/linterCommand-line checker for abap2UI5 app classes and their viewsfrom ABAP
  2. abap2UI5 PlaygroundIn-browser ABAP editor beside the abap2UI5 app it buildsfrom ABAP
  3. abapcdsgrammarANTLR4 grammar, lexer and parser for ABAP CDSfrom ABAP
  4. @abapify/acdsParser for ABAP CDS DDL source with a typed ASTfrom ABAP
  5. abaplint-sci-clientABAP client surfacing abaplint checks in Code Inspector and ATCfrom ABAP
  6. abaplintStatic analysis for ABAP source outside a systemfrom ABAP
  7. BellaEclipse plugin bringing Claude into ABAP Development Toolsfrom ABAP
  8. abapOpenChecksOpen-source rule pack for SAP Code Inspector and ATCfrom ABAP
  9. upDOWNciUploads and downloads Code Inspector check variants as XMLfrom ABAP
  10. abaplint-Ext-for-abapGitShows abaplint results inside abapGitfrom ABAP
  11. ABAP remote filesystemVS Code extension editing ABAP systems over ADT as a filesystemfrom ABAP
  12. ABAP Development Tools for VS CodeSAP's ABAP tools in VS Code, over RFC to on-premise or HTTP to cloudfrom ABAP
  13. code pal for ABAPATC and Code Inspector checks for Clean ABAPfrom ABAP
  14. Project KernseifeCustom ATC check scoring SAP object usage against your classificationfrom ABAP
  15. Clean-Core.ioHosted workspace redrawing custom ABAP as BPMN and grading itfrom ABAP
  16. ACESAP GUI tool for static analysis of ABAP call flow and code metricsfrom ABAP

Details

Sources4
npm registrydiscovered herechecked
npm registry, RAP Studioversion, releases, installschecked
github.com/NabheetCloud/ABAP-Runtimetree, 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
discovered vianpm registry
first seen in the atlas
ecosystem and domainabap, developer-experience
Flavors4
Standard ABAP
“Build, run and debug SAP ABAP RAP and classic ABAP applications on your laptop” — rap-studio — npm, package descriptionchecked
ABAP Cloud
“Syntax is additionally checked with [abaplint](https://github.com/abaplint/abaplint) against the ABAP Cloud grammar.” — ABAP-Runtime — docs/LANGUAGE-COVERAGE.mdchecked
UI5 / Fiori elements
“OData V4 (with `$batch`, `$apply`, draft protocol) and OData V2 at the SAP Gateway URL; SAP Fiori elements (List Report / Object Page, Worklist, Analytical List Page, Overview Page, Flexible Programming Model) and freestyle SAPUI5 apps” — NabheetCloud/ABAP-Runtime — README, What is supportedchecked
UI5 / Freestyle
“OData V4 (with `$batch`, `$apply`, draft protocol) and OData V2 at the SAP Gateway URL; SAP Fiori elements (List Report / Object Page, Worklist, Analytical List Page, Overview Page, Flexible Programming Model) and freestyle SAPUI5 apps” — NabheetCloud/ABAP-Runtime — README, What is supportedchecked
History in the atlas1
  1. First seen.
For your agent
Ref
artifact:nabheetcloud-rap-studio
JSON
/artifacts/nabheetcloud-rap-studio.json
MCP
Connecting an agent