{"ref":"artifact:magpasulke-off-stack-abap-template","page":"/artifacts/magpasulke-off-stack-abap-template","json":"/artifacts/magpasulke-off-stack-abap-template.json","generated":"2026-10-29","drafted_with_ai":true,"entity":{"id":"magpasulke-off-stack-abap-template","name":"off-stack-abap-template","artifact_type":"sample","ecosystem":"abap","domain":"developer-experience","secondary_domains":["ai-and-agents"],"origin_ring":"independent","use_as":"starting-point","description":{"one_line":"A GitHub template repository for off-stack ABAP: [abaplint](artifact:abaplint-abaplint) and the [@abaplint/transpiler](artifact:abaplint-transpiler) behind `npm test` and CI, agent skills for the [abapGit](artifact:abapgit-abapgit) format, and optional ADT scripts that pull the code into a system.","short":"Template repository for off-stack ABAP with lint, tests and skills","what_it_solves":"Starts an ABAP project that is written in a local IDE as [abapGit](artifact:abapgit-abapgit) files and checked with no system: `npm run lint` runs [abaplint](artifact:abaplint-abaplint), and `npm run unit` transpiles `src/` with [@abaplint/transpiler](artifact:abaplint-transpiler) against [open-abap-core](artifact:open-abap-open-abap-core) and eleven further open-abap libraries, then runs the ABAP Unit tests on [Node.js](external:nodejs). The template carries no ABAP of its own: the getting-started steps create a package in the system, link it to the new repository with abapGit and push it once, after which a GitHub Actions workflow runs `npm test` on every push and pull request and release-please versions the project from conventional commits. Under `.agents/skills/` sit skills that tell a coding agent how to write each object type, from CLAS and TABL to BDEF, SRVD and SRVB, in abapGit's serialised format, beside an `AGENTS.md` left for the project to fill in. The way back into a system is optional and needs an `.env` with ADT credentials: two TypeScript scripts on [abap-adt-api](artifact:abap-adt-api), also registered as [opencode](https://opencode.ai/) tools, trigger an abapGit pull and run ABAP Unit in the connected system. The shipped `abaplint.json` is a reduced starting configuration, and opencode is the one agent client the template configures, with an `opencode.jsonc` that configures two remote MCP servers: `abap-mcp` at `https://mcp-abap.marianzeis.de/mcp`, an endpoint [mcp-sap-docs](artifact:marianfoo-mcp-sap-docs) documents as its own, and `sap-released-objects`."},"links":{"repo":"https://github.com/MagPasulke/off-stack-abap-template"},"compat":{"runtimes":["node"]},"type_properties":{"form":{"value":"template","sources":[{"url":"https://github.com/MagPasulke/off-stack-abap-template","title":"MagPasulke/off-stack-abap-template — README","checked":"2026-10-27","quote":"A GitHub template repository for developing ABAP projects outside of a SAP system."}]}},"source_available":true,"demonstrates":["capability:generators","capability:abap-static-analysis","capability:abap-unit-testing","capability:agent-guidance"],"requires":[{"ref":"artifact:abaplint-abaplint","for":"The lint step, `npm run lint`, which runs locally and as the first half of `npm test` in the CI workflow.","requirement":"required","basis":"binding","role":"static-analysis","sources":[{"url":"https://github.com/MagPasulke/off-stack-abap-template","title":"MagPasulke/off-stack-abap-template — README, abaplint","checked":"2026-10-27","quote":"Static analysis for ABAP running locally and in CI."},{"url":"https://raw.githubusercontent.com/MagPasulke/off-stack-abap-template/main/package.json","title":"MagPasulke/off-stack-abap-template — package.json, devDependencies","checked":"2026-10-27","quote":"\"@abaplint/cli\": \"^2.119.23\""}]},{"ref":"artifact:abaplint-transpiler","for":"Turns the ABAP in `src/` and its test classes into JavaScript, so `npm run unit` runs the ABAP Unit tests with no system.","requirement":"required","basis":"binding","role":"transpilation","sources":[{"url":"https://github.com/MagPasulke/off-stack-abap-template","title":"MagPasulke/off-stack-abap-template — README, abap transpiler","checked":"2026-10-27","quote":"Transpiles ABAP to JavaScript so you can run ABAP Unit tests locally with `npm run unit` — no SAP system required."},{"url":"https://raw.githubusercontent.com/MagPasulke/off-stack-abap-template/main/package.json","title":"MagPasulke/off-stack-abap-template — package.json, devDependencies","checked":"2026-10-27","quote":"\"@abaplint/transpiler-cli\": \"^2.13.26\""}]},{"ref":"artifact:open-abap-open-abap-core","for":"The first of the open-abap libraries the transpiler configuration loads, supplying the standard ABAP the transpiled code runs against.","requirement":"required","basis":"binding","role":"runtime-library","sources":[{"url":"https://raw.githubusercontent.com/MagPasulke/off-stack-abap-template/main/abap_transpile.json","title":"MagPasulke/off-stack-abap-template — abap_transpile.json, libs","checked":"2026-10-27","quote":"{ \"url\": \"https://github.com/open-abap/open-abap-core\" }"}]},{"ref":"external:nodejs","for":"Runs the npm scripts and the transpiled ABAP Unit tests, on the developer's machine and in the CI workflow.","requirement":"required","sources":[{"url":"https://github.com/MagPasulke/off-stack-abap-template","title":"MagPasulke/off-stack-abap-template — README, prerequisites","checked":"2026-10-27","quote":"[Node.js](https://nodejs.org/)"}]},{"ref":"artifact:abapgit-abapgit","for":"Links the repository to a package in the system, pushes that package once so the project starts from it, and later brings the code into the system.","requirement":"required","basis":"binding","role":"installation","sources":[{"url":"https://github.com/MagPasulke/off-stack-abap-template","title":"MagPasulke/off-stack-abap-template — README, prerequisites","checked":"2026-10-27","quote":"SAP system with [abapGit](https://docs.abapgit.org/) installed (needed to deploy and run on a real system)"},{"url":"https://github.com/MagPasulke/off-stack-abap-template","title":"MagPasulke/off-stack-abap-template — README, create abapGit repo & root package","checked":"2026-10-27","quote":"Create a package on your SAP system and link it to your new GitHub repository via abapGit."}]},{"ref":"artifact:abap-adt-api","for":"The ADT client the two optional scripts use to trigger an abapGit pull and run ABAP Unit in the connected system.","requirement":"conditional","condition":"the ADT scripts or the opencode tools are used, with an `.env` holding the system's ADT URL and credentials","basis":"binding","role":"adt-client","sources":[{"url":"https://raw.githubusercontent.com/MagPasulke/off-stack-abap-template/main/scripts/adt_gitpull_core.ts","title":"MagPasulke/off-stack-abap-template — scripts/adt_gitpull_core.ts","checked":"2026-10-27","quote":"import { ADTClient, GitRepo } from \"abap-adt-api\""},{"url":"https://github.com/MagPasulke/off-stack-abap-template","title":"MagPasulke/off-stack-abap-template — README, scripts & opencode tools","checked":"2026-10-27","quote":"These are optional and require `.env` configuration (see below)."}]}],"connects":[{"ref":"external:abap-platform","kind":"data","direction":"outbound","condition":"an `.env` holds the system's ADT URL and credentials","for":"The optional scripts and opencode tools reach a development system over ADT to trigger an abapGit pull of the repository and run its ABAP Unit tests there.","sources":[{"url":"https://github.com/MagPasulke/off-stack-abap-template","title":"MagPasulke/off-stack-abap-template — README, scripts & opencode tools","checked":"2026-10-27","quote":"TypeScript scripts in `scripts/` and `.opencode/tools/` for interacting with a remote SAP system via ADT (ABAP Development Tools)."},{"url":"https://github.com/MagPasulke/off-stack-abap-template","title":"MagPasulke/off-stack-abap-template — README, AI agent skills & agents.md","checked":"2026-10-27","quote":"**ADT remote operations** — trigger abapGit pull and run ABAP Unit tests on a connected SAP system"}]}],"maintainers":["actor:magpasulke"],"contributors":["actor:magpasulke"],"provenance":{"discovered_via":[{"source":"source:curator"}],"first_seen":"2026-10-27"},"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-07, not archived"}],"compatibility":[{"label":"Declared for","tier":"fair","evidence":"SAP_BASIS 757 and up, in its abaplint config: not 750 (SAP Business Suite 7 on SAP NetWeaver 7.50, maintained to 2027-12), 756 (SAP S/4HANA 2021, maintained to 2026-12)"},{"label":"Survived majors","tier":"unknown","evidence":"not read on ABAP: its lines run side by side"},{"label":"Maintainer's CI","tier":"poor","evidence":"release-please failure, 2026-05-31"}],"practice":[{"label":"Tests","tier":"fair","evidence":"none found in the tree"},{"label":"Docs","tier":"good","evidence":"README 4 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":null,"unit":"installs/week"},{"value":12,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-28","npm":"not published under this name","stars":12,"forks":3,"open_issues":0,"archived":false,"pushed_at":"2026-07-22","license_spdx":null,"org_owned":false,"default_branch":"main","created_at":"2026-05-31T19:42:13Z","open_prs":0,"tree_truncated":false,"test_files":0,"workflows":2,"other_ci":false,"readme_bytes":4482,"docs_files":0,"changelog":false,"license_file":false,"dts_files":0,"first_commit":"2026-05-31","last_commit":"2026-07-22","commits":12,"contributors":1,"ci_status":"failure","ci_run_at":"2026-05-31","ci_workflow":"release-please","ci_event":"push","readme_path":"README.md","readme_sha":"5e2b26ef3d0e40eadc1b9ac701247615632f0e5e","repo_read":"2026-10-28","abap_syntax":{"repo":"MagPasulke/off-stack-abap-template","file":"abaplint.json","url":"https://github.com/MagPasulke/off-stack-abap-template/blob/HEAD/abaplint.json","version":"v757","floor":"757","checked":"2026-10-28"}},"edges":{"maintainers":[{"ref":"actor:magpasulke","name":"Philipp Dölker","json":"/actors/magpasulke.json"}],"contributors":[{"ref":"actor:magpasulke","name":"Philipp Dölker","json":"/actors/magpasulke.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}