{"ref":"artifact:nabheetcloud-rap-studio","page":"/artifacts/nabheetcloud-rap-studio","json":"/artifacts/nabheetcloud-rap-studio.json","generated":"2026-11-10","drafted_with_ai":true,"entity":{"id":"nabheetcloud-rap-studio","name":"RAP Studio","artifact_type":"app","ecosystem":"abap","serves_ecosystems":["ui5"],"flavors":[{"key":"standard-abap","source":{"url":"https://www.npmjs.com/package/rap-studio","title":"rap-studio — npm, package description","checked":"2026-11-10","quote":"Build, run and debug SAP ABAP RAP and classic ABAP applications on your laptop"}},{"key":"abap-cloud","source":{"url":"https://raw.githubusercontent.com/NabheetCloud/ABAP-Runtime/main/docs/LANGUAGE-COVERAGE.md","title":"ABAP-Runtime — docs/LANGUAGE-COVERAGE.md","checked":"2026-11-10","quote":"Syntax is additionally checked with [abaplint](https://github.com/abaplint/abaplint) against the ABAP Cloud grammar."}},{"key":"fiori-elements","source":{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, What is supported","checked":"2026-11-10","quote":"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"}},{"key":"freestyle","source":{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, What is supported","checked":"2026-11-10","quote":"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"}}],"domain":"developer-experience","secondary_domains":["protocols-and-apis"],"origin_ring":"independent","use_as":"dependency","description":{"one_line":"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.","short":"Local RAP and classic ABAP runtime with a browser workbench","what_it_solves":"RAP work normally needs a system to activate against: a [SAP BTP ABAP environment](artifact: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](external:nodejs) and keeps them in [abapGit](artifact:abapgit-abapgit) layout: CDS view entities become real database views in [SQLite](external:sqlite) or [PostgreSQL](external: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](artifact:open-abap-open-abap-core), [open-abap-gui](artifact:open-abap-open-abap-gui) and [@abaplint/transpiler](artifact: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.","when_not_to_use":"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](artifact:abapgit-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.","to_build_on_it":"The rules the platform and its agent read are markdown under `knowledge/`, loaded at runtime with no build step, so a check variant, an object-kind guide or a cleanup profile is changed by editing a file, and an app can change rows in its own `checks.md`. `docs/LANGUAGE-COVERAGE.md` records statement by statement what is parsed and what is executed, measured against SAP's ABAP cheat sheets with `node test/conformance.mjs`."},"links":{"repo":"https://github.com/NabheetCloud/ABAP-Runtime","npm":"https://www.npmjs.com/package/rap-studio"},"maintainers":["actor:nabheetcloud"],"compat":{"runtimes":["node"]},"provides":[{"capability":"capability:local-development","what_it_does":"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.","sources":[{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README","checked":"2026-11-10","quote":"Build, run and change **end-to-end RAP / SAP Fiori applications without an SAP server**, by chatting or by hand."},{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, What is supported","checked":"2026-11-10","quote":"Everything runs on your machine with Node.js: no SAP server and no cloud account."}]},{"capability":"capability:odata","what_it_does":"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.","sources":[{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, SAP Fiori elements and SAPUI5","checked":"2026-11-10","quote":"Each service is a full OData V4 service at `/a/<app>/odata/<service>/`:"},{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, OData V2","checked":"2026-11-10","quote":"Every service is also served as OData V2, at the SAP Gateway URL `/sap/opu/odata/sap/<SERVICE>/` below the app"}],"facets":[{"key":"protocols","value":["odata-v4","odata-v2"],"source":{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, What is supported","checked":"2026-11-10","quote":"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"}}]},{"capability":"capability:agent-code-access","what_it_does":"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.","sources":[{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Building by chat","checked":"2026-11-10","quote":"The CLI may only edit files and run the platform's own commands"},{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Building by chat","checked":"2026-11-10","quote":"Every file change re-activates the app."}],"facets":[{"key":"write_source","value":true,"applies_to":{"ecosystems":["abap"]},"source":{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Building by chat","checked":"2026-11-10","quote":"The CLI may only edit files and run the platform's own commands"}},{"key":"create_objects","value":true,"applies_to":{"ecosystems":["abap"]},"source":{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Building by chat","checked":"2026-11-10","quote":"Example result: the prompt \"a library app to manage books and loans…\" produced 17 RAP objects with 0 errors in about 4 minutes."}},{"key":"activate","value":true,"applies_to":{"ecosystems":["abap"]},"source":{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Building by chat","checked":"2026-11-10","quote":"Every file change re-activates the app."}},{"key":"syntax_check","value":true,"applies_to":{"ecosystems":["abap"]},"source":{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Commands","checked":"2026-11-10","quote":"node bin/rap.js check <dir>                         # activate + abaplint, exit code 1 on errors"}},{"key":"run_code","value":true,"applies_to":{"ecosystems":["abap"]},"source":{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Commands","checked":"2026-11-10","quote":"node bin/rap.js run <dir> <class>                   # run an if_oo_adt_classrun class"}}]},{"capability":"capability:debugging","what_it_does":"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.","sources":[{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, What is supported","checked":"2026-11-10","quote":"debugger (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"},{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Developer tools","checked":"2026-11-10","quote":"happens in a worker thread with a debug build of the app, on the app's database: a stopped run does not commit."}]},{"capability":"capability:abap-static-analysis","what_it_does":"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.","sources":[{"url":"https://raw.githubusercontent.com/NabheetCloud/ABAP-Runtime/main/knowledge/README.md","title":"ABAP-Runtime — knowledge/README.md, Check variants","checked":"2026-11-10","quote":"Headings are categories, rows are checks: an [abaplint rule](https://rules.abaplint.org) or a RAP Studio check"},{"url":"https://raw.githubusercontent.com/NabheetCloud/ABAP-Runtime/main/knowledge/checks/rules/released_api.md","title":"ABAP-Runtime — knowledge/checks/rules/released_api.md","checked":"2026-11-10","quote":"ABAP Cloud code (RAP business objects, CDS views, classes) may only use objects that SAP releases for ABAP Cloud."},{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Commands","checked":"2026-11-10","quote":"node bin/rap.js atc <dir> [--fix]                   # code checks (check variant in knowledge/checks/variants)"}]}],"requires":[{"ref":"artifact:abaplint-abaplint","for":"Parses and syntax-checks an app's ABAP on activation and supplies most of the code-check rules; parser errors block activation.","requirement":"required","basis":"binding","role":"parser","sources":[{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Credits","checked":"2026-11-10","quote":"ABAP parser, syntax checks and most code-check rules"},{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, How it works","checked":"2026-11-10","quote":"**Syntax checking** uses [abaplint](https://github.com/abaplint/abaplint)."}]},{"ref":"artifact:abaplint-transpiler","for":"Compiles an app's classic ABAP to JavaScript for the second engine that runs reports, module pools and function groups.","requirement":"conditional","condition":"the classic engine is used, installed once by `npm run setup`","basis":"binding","role":"compiler","sources":[{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Credits","checked":"2026-11-10","quote":"compiles classic ABAP to JavaScript for the classic engine"},{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Quick start","checked":"2026-11-10","quote":"`npm run setup` installs the classic ABAP engine (reports, module pools, function modules) once."}]},{"ref":"artifact:open-abap-open-abap-core","for":"Supplies the standard ABAP classes the classic engine's compiled programs call; `npm run setup:open-abap` clones it into `vendor/`.","requirement":"conditional","condition":"the classic engine is used, installed once by `npm run setup`","basis":"binding","role":"standard-library","sources":[{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Classic ABAP","checked":"2026-11-10","quote":"`open-abap-core` provides the standard classes"}]},{"ref":"artifact:open-abap-open-abap-gui","for":"Turns an app's reports and dynpros into the web screens the classic engine serves.","requirement":"conditional","condition":"the classic engine is used, installed once by `npm run setup`","basis":"binding","role":"screens","sources":[{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Credits","checked":"2026-11-10","quote":"[open-abap](https://github.com/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-xco | the classic engine's standard classes, report and dynpro screens, HTTP, logs, PDF, locks, jobs and XCO; downloaded by `npm run setup:open-abap`"}]},{"ref":"artifact:open-abap-express-icf-shim","for":"The classic engine's HTTP server, which serves the compiled programs' screens.","requirement":"conditional","condition":"the classic engine is used, installed once by `npm run setup`","basis":"binding","role":"http-server","sources":[{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Credits","checked":"2026-11-10","quote":"[open-abap](https://github.com/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-xco | the classic engine's standard classes, report and dynpro screens, HTTP, logs, PDF, locks, jobs and XCO; downloaded by `npm run setup:open-abap`"}]},{"ref":"artifact:open-abap-open-abap-bal","for":"The application logs of classic programs, which RAP Studio saves to the app's database and shows on its Logs page.","requirement":"conditional","condition":"the classic engine is used, installed once by `npm run setup`","basis":"binding","role":"application-log","sources":[{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Credits","checked":"2026-11-10","quote":"[open-abap](https://github.com/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-xco | the classic engine's standard classes, report and dynpro screens, HTTP, logs, PDF, locks, jobs and XCO; downloaded by `npm run setup:open-abap`"}]},{"ref":"artifact:open-abap-open-abap-pdf","for":"The PDF side of the classic engine, beside the print forms RAP Studio renders itself.","requirement":"conditional","condition":"the classic engine is used, installed once by `npm run setup`","basis":"binding","role":"pdf","sources":[{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Credits","checked":"2026-11-10","quote":"[open-abap](https://github.com/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-xco | the classic engine's standard classes, report and dynpro screens, HTTP, logs, PDF, locks, jobs and XCO; downloaded by `npm run setup:open-abap`"}]},{"ref":"artifact:open-abap-open-abap-lock","for":"The locks behind the `ENQUEUE_` and `DEQUEUE_` function modules of a classic program's lock objects.","requirement":"conditional","condition":"the classic engine is used, installed once by `npm run setup`","basis":"binding","role":"locking","sources":[{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Credits","checked":"2026-11-10","quote":"[open-abap](https://github.com/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-xco | the classic engine's standard classes, report and dynpro screens, HTTP, logs, PDF, locks, jobs and XCO; downloaded by `npm run setup:open-abap`"}]},{"ref":"external:sqlite","for":"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.","requirement":"conditional","condition":"`--db sqlite`, which is the default","basis":"binding","role":"database","sources":[{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Where is the data saved?","checked":"2026-11-10","quote":"`sqlite` (default) | `apps/<app>/.rap/data.db`, one SQLite file per app (WAL mode)"}]},{"ref":"external:postgresql","for":"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`.","requirement":"conditional","condition":"`--db pglite` or a `postgres://` URL is given","basis":"binding","role":"database","sources":[{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Where is the data saved?","checked":"2026-11-10","quote":"`pglite` | `apps/<app>/.rap/pgdata`: embedded **PostgreSQL 18** (WebAssembly), no server needed"},{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Where is the data saved?","checked":"2026-11-10","quote":"`postgres://user:pw@host:5432/db` | your PostgreSQL server, one schema per app (`app_<name>`)"}]}],"connects":[{"ref":"external:ui5-sap-com","kind":"data","direction":"outbound","for":"The SAP Fiori elements and freestyle SAPUI5 apps it generates load the SAPUI5 runtime from SAP's CDN.","sources":[{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Credits","checked":"2026-11-10","quote":"Fiori elements and SAPUI5 apps, loaded from SAP's CDN"}]}],"interfaces":[{"key":"odata-v4","kind":"api","protocol":"odata-v4","direction":"in","for":"Each app's service definition as a full OData V4 service under `/a/<app>/odata/<service>/`, with `$metadata`, `$batch`, `$apply` and the draft protocol.","sources":[{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, SAP Fiori elements and SAPUI5","checked":"2026-11-10","quote":"Each service is a full OData V4 service at `/a/<app>/odata/<service>/`:"}]},{"key":"odata-v2","kind":"api","protocol":"odata-v2","direction":"in","for":"The same service at the SAP Gateway URL `/sap/opu/odata/sap/<SERVICE>/` below the app, with the requests translated to the V4 service.","sources":[{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, OData V2","checked":"2026-11-10","quote":"Every service is also served as OData V2, at the SAP Gateway URL `/sap/opu/odata/sap/<SERVICE>/` below the app"}]},{"key":"studio","kind":"ui","direction":"in","for":"The studio workbench in the browser, bound to 127.0.0.1 unless it is started with `--host`.","sources":[{"url":"https://github.com/NabheetCloud/ABAP-Runtime","title":"NabheetCloud/ABAP-Runtime — README, Quick start","checked":"2026-11-10","quote":"The studio listens on this machine only (127.0.0.1)."}]}],"provenance":{"discovered_via":[{"source":"source:npm"}],"first_seen":"2026-11-10"},"drafted_with_ai":true},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"unknown","evidence":"no release data"},{"label":"Continuity","tier":"fair","evidence":"one contributor, personally owned"},{"label":"Repository","tier":"good","evidence":"pushed 2026-11, not archived"}],"compatibility":[{"label":"Declared for","tier":"fair","evidence":"nothing declared"},{"label":"Survived majors","tier":"unknown","evidence":"not read on ABAP: its lines run side by side"},{"label":"Maintainer's CI","tier":"good","evidence":"test green, 2026-11-10"}],"practice":[{"label":"Tests","tier":"good","evidence":"193 test files"},{"label":"Docs","tier":"good","evidence":"docs/ with 1 page, README 38 KB"},{"label":"Changelog","tier":"good","evidence":"CHANGELOG in the repo"}],"reach":[{"value":null,"unit":"installs/week"},{"value":0,"unit":"watching"}]},"signals":{"crawled_at":"2026-11-10","npm":"not published under this name","stars":0,"forks":1,"open_issues":5,"archived":false,"pushed_at":"2026-11-10","language":"JavaScript","license_spdx":"Apache-2.0","org_owned":false,"default_branch":"main","created_at":"2026-11-10T08:17:57Z","open_prs":0,"tree_truncated":false,"test_files":193,"workflows":1,"other_ci":false,"readme_bytes":38474,"docs_files":1,"changelog":true,"license_file":true,"dts_files":0,"first_commit":"2026-11-10","last_commit":"2026-11-10","commits":4,"contributors":1,"ci_status":"success","ci_run_at":"2026-11-10","ci_workflow":"test","ci_event":"push","readme_path":"README.md","readme_sha":"a10c13394db557e01d17bf2cfa3a596841dcd6cf","repo_read":"2026-11-10"},"edges":{"maintainers":[{"ref":"actor:nabheetcloud","name":"Nabheet Madan","json":"/actors/nabheetcloud.json"}],"contributors":[],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}