{"ref":"artifact:cap-js-openapi","page":"/artifacts/cap-js-openapi","json":"/artifacts/cap-js-openapi.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"cap-js-openapi","name":"@cap-js/openapi","artifact_type":"cds-plugin","ecosystem":"cap","flavors":[{"key":"node","source":{"url":"https://github.com/cap-js/openapi","title":"cap-js/openapi — README","checked":"2026-09-13","quote":"const cds = require('@sap/cds')"}}],"domain":"protocols-and-apis","origin_ring":"sap-official","description":{"one_line":"Turns a CDS service into an OpenAPI document, derived from the model so the description cannot drift from what is served.","short":"Generates OpenAPI documents from a CDS service"},"links":{"npm":"https://www.npmjs.com/package/@cap-js/openapi","repo":"https://github.com/cap-js/openapi"},"type_properties":{"distribution":{"value":["npm"],"sources":[{"url":"https://github.com/cap-js/openapi","title":"@cap-js/openapi — README","checked":"2026-10-18","quote":"$ npm install @cap-js/openapi"}]}},"provides":[{"capability":"capability:openapi","what_it_does":"Compiles CDS models to OpenAPI documents, from the CLI with cds compile --to openapi and at runtime.","sources":[{"url":"https://github.com/cap-js/openapi#readme","title":"cap-js/openapi — README","checked":"2026-09-27","quote":"The `@cap-js/openapi` is a package that provides support for OpenAPI document compilation."},{"url":"https://cap.cloud.sap/docs/guides/protocols/openapi","title":"OpenAPI — capire","checked":"2026-09-08","quote":"You can convert CDS models to the OpenAPI Specification, a widely adopted API description standard."}]}],"provenance":{"discovered_via":[{"source":"source:npm"},{"source":"source:discover"}],"first_seen":"2026-08-30"},"maintainers":["actor:cap-js"],"contributors":["actor:chgeo","actor:corporateuser","actor:cronossclk","actor:cschuerings","actor:daogrady","actor:dellagustin-sap","actor:dipto-at-sap","actor:geethika-pula","actor:heikotheissen","actor:isaacpalomero","actor:jeevitha011","actor:joergmann","actor:muskansethi1","actor:ralfhandl","actor:root3287","actor:roshninaveenas","actor:sjvans","actor:swaldmann","actor:tim-sh","actor:zongqichen"],"history":[{"date":"2026-09-08","field":"description.one_line","from":"CAP tool for OpenAPI","to":"Turns a CDS service into an OpenAPI document, derived from the model so the description cannot drift from what is served.","reason":"Placement copied the package's own npm description. Replaced with a line written for this graph — what it does and where it sits — because an unattributed sentence is an unattributed claim."}],"drafted_with_ai":true,"changed_in":[{"version":"1.7.0","date":"2026-10-06","what_changed":"A service with no protocol set is now documented as OData, matching `@sap/cds`, where it was treated as REST before; `cds.env.openapi.defaultProtocol = \"rest\"` restores the old behaviour.","invalidates":"OpenAPI documents generated before 1.7.0 for services without a `@protocol`, which described REST paths for them.","source":{"url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#170---2026-10-06","title":"@cap-js/openapi changelog, 1.7.0","checked":"2026-10-19","quote":"set `odata` as the service protocol if no protocol is set to match the default behavior of `@sap/cds`."}}]},"effective_normative_relations":[{"instrument":"instrument:sap-developer-license-3-2-cap","relation":"use-constrained-by","sections":["1","2","3"],"applies_when":"A cds-plugin is used with SAP CAP materials, or an artifact is explicitly identified as a CAP plugin or application.","note":"This is inherited applicability, not a licence verdict about the artifact itself. Review the agreement for the actual materials and use; an explicit artifact relationship to another revision takes precedence.","scope":{"kind":"artifact"},"sources":[{"url":"https://cap.cloud.sap/resources/license/developer-license-3_2_CAP.txt","title":"SAP Developer License Agreement 3.2 CAP","checked":"2026-09-16","quote":"documentation, plug-ins, templates, scripts and sample code, libraries, software development kits"}],"inherited_from":"cap-plugins-and-applications","relevant_capabilities":["agent-systems-access","async-processing","data-import-export","database-connectors","deployment","destinations","llm-integration","mcp-servers","plugin-authoring","replication","retrieval-augmented-generation","rfc-connectivity"]}],"readings":{"liveness":[{"label":"Maintenance","tier":"good","evidence":"1 month since release"},{"label":"Continuity","tier":"good","evidence":"23 contributors, 3 publishers, org-owned"},{"label":"Repository","tier":"good","evidence":"pushed 2026-10, not archived"}],"compatibility":[{"label":"Declared for","tier":"good","evidence":">=7.6 — includes cds 10 and 9"},{"label":"Survived majors","tier":"good","evidence":"released before and after @sap/cds 10"},{"label":"Maintainer's CI","tier":"good","evidence":"Lint green, 2026-10-20"}],"practice":[{"label":"Tests","tier":"good","evidence":"62 test files, npm test"},{"label":"Docs","tier":"good","evidence":"docs/ with 2 pages, README 3 KB"},{"label":"Changelog","tier":"good","evidence":"CHANGELOG in the repo"}],"reach":[{"value":74761,"unit":"installs/week","note":"Installs far exceed the number of people watching it — usually a sign it arrives as somebody else's dependency rather than by choice."},{"value":7,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-26","latest_version":"1.7.0","majors":{"1":{"version":"1.0.0","date":"2024-05-02"}},"license":"Apache-2.0","first_release":"2024-05-02","last_release":"2026-10-06","releases":22,"cadence_days":61,"maintainers":3,"repository":"git+https://github.com/cap-js/openapi.git","peer_cds":">=7.6","test_script":true,"types":false,"downloads_weekly":74761,"stars":7,"forks":13,"open_issues":5,"archived":false,"pushed_at":"2026-10-20","license_spdx":"Apache-2.0","org_owned":true,"default_branch":"main","contributors":23,"tree_truncated":false,"test_files":62,"workflows":8,"other_ci":false,"readme_bytes":3297,"docs_files":2,"changelog":true,"license_file":true,"dts_files":2,"ci_status":"success","ci_run_at":"2026-10-20","ci_workflow":"Lint","ci_event":"push","readme_path":"README.md","readme_sha":"e0421298b000e1f8c6224e7501dbed2f49b15a95","months_since_release":1,"dormant":false,"repository_directory":null,"dependencies":1,"node_engine":null,"downloads_monthly":483663,"created_at":"2024-01-08T07:32:46Z","open_prs":3,"first_commit":"2024-01-08","last_commit":"2026-10-20","commits":178,"repo_read":"2026-10-26"},"release_notes":{"license":"Apache-2.0","quotable":true,"source":{"kind":"repo","path":"CHANGELOG.md","ref":"main","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md"},"format":"keep-a-changelog","releases":[{"version":"1.7.0","date":"2026-10-06","date_source":"heading","heading":"[1.7.0] - 2026-10-06","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#170---2026-10-06","sections":[{"kind":"feature","heading":"Added","items":2},{"kind":"change","heading":"Changed","items":2},{"kind":"deprecation","heading":"Deprecated","items":0},{"kind":"removal","heading":"Removed","items":0},{"kind":"fix","heading":"Fixed","items":6},{"kind":"security","heading":"Security","items":0}],"hash":"4a7bdbf482bb2861","cited_by":[{"version":"1.7.0","date":"2026-10-06"}]},{"version":"1.6.0","date":"2026-08-04","date_source":"heading","heading":"[1.6.0] - 2026-08-04","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#160---2026-08-04","sections":[{"kind":"feature","heading":"Added","items":1},{"kind":"change","heading":"Changed","items":0},{"kind":"deprecation","heading":"Deprecated","items":0},{"kind":"removal","heading":"Removed","items":0},{"kind":"fix","heading":"Fixed","items":1},{"kind":"security","heading":"Security","items":0}],"hash":"c739c8bd60d300ff"},{"version":"1.5.0","date":"2026-06-13","date_source":"heading","heading":"[1.5.0] - 2026-06-13","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#150---2026-06-13","sections":[{"kind":"feature","heading":"Added","items":1},{"kind":"change","heading":"Changed","items":0},{"kind":"deprecation","heading":"Deprecated","items":0},{"kind":"removal","heading":"Removed","items":0},{"kind":"fix","heading":"Fixed","items":3},{"kind":"security","heading":"Security","items":0}],"hash":"fdf3fc2c9130218c"},{"version":"1.4.2","date":"2026-05-18","date_source":"heading","heading":"[1.4.2] - 2026-05-18","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#142---2026-05-18","sections":[{"kind":"security","heading":"Security","items":1}],"hash":"a79bd716513cc90f"},{"version":"1.4.0","date":"2026-03-18","date_source":"heading","heading":"[1.4.0] - 2026-03-18","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#140---2026-03-18","sections":[{"kind":"feature","heading":"Added","items":1},{"kind":"change","heading":"Changed","items":1},{"kind":"fix","heading":"Fixed","items":2},{"kind":"security","heading":"Security","items":0}],"hash":"8fce726e90eec8d8"},{"version":"1.3.1","date":"2026-01-08","date_source":"heading","heading":"[1.3.1] - 2026-01-08","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#131---2026-01-08","sections":[{"kind":"fix","heading":"Fixed","items":1},{"kind":"security","heading":"Security","items":0}],"hash":"f67c048c55d2991e"},{"version":"1.3.0","date":"2025-12-16","date_source":"heading","heading":"[1.3.0] - 2025-12-16","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#130---2025-12-16","sections":[{"kind":"feature","heading":"Added","items":2},{"kind":"change","heading":"Changed","items":5},{"kind":"fix","heading":"Fixed","items":3}],"hash":"74393e179ac08f40"},{"version":"1.2.4","heading":"Version 1.2.4 - tbd","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#version-124---tbd","sections":[{"kind":"fix","heading":"Fixed","items":1}],"hash":"5ce9d2e58843c3a7"},{"version":"1.2.3","date":"2025-05-28","date_source":"registry","heading":"Version 1.2.3 - 28.05.2025","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#version-123---28052025","sections":[{"kind":"feature","heading":"Added","items":1},{"kind":"change","heading":"Changed","items":1},{"kind":"fix","heading":"Fixed","items":1}],"hash":"8b34ce6f87066f4e"},{"version":"1.2.2","date":"2025-05-13","date_source":"registry","heading":"Version 1.2.2 - 13.05.2025","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#version-122---13052025","sections":[{"kind":"fix","heading":"Fixed","items":1}],"hash":"e7a7742113f70140"},{"version":"1.2.1","date":"2025-03-12","date_source":"registry","heading":"Version 1.2.1 - 11.03.2025","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#version-121---11032025","sections":[{"kind":"change","heading":"Changed","items":1}],"hash":"c0e0bb3c805bafc4"},{"version":"1.2.0","date":"2025-02-28","date_source":"registry","heading":"Version 1.2.0 - 28.02.2025","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#version-120---28022025","sections":[{"kind":"feature","heading":"Added","items":1},{"kind":"fix","heading":"Fixed","items":2}],"hash":"15cb88ccbfc5efcd"},{"version":"1.1.2","date":"2025-01-27","date_source":"registry","heading":"Version 1.1.2 - 27.01.2025","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#version-112---27012025","sections":[{"kind":"feature","heading":"Added","items":1},{"kind":"fix","heading":"Fixed","items":1}],"hash":"0f7d75df930958af"},{"version":"1.1.1","date":"2024-12-13","date_source":"registry","heading":"Version 1.1.1 - 13.12.2024","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#version-111---13122024","sections":[{"kind":"fix","heading":"Fixed","items":1}],"hash":"49f147a05e7f2dc9"},{"version":"1.1.0","date":"2024-12-04","date_source":"registry","heading":"Version 1.1.0 - 04.12.2024","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#version-110---04122024","sections":[{"kind":"feature","heading":"Added","items":1},{"kind":"fix","heading":"Fixed","items":3}],"hash":"8b5d800cd11a1982"},{"version":"1.0.7","date":"2024-10-17","date_source":"registry","heading":"Version 1.0.7 - 17.10.2024","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#version-107---17102024","sections":[{"kind":"fix","heading":"Fixed","items":3},{"kind":"change","heading":"Changed","items":1},{"kind":"feature","heading":"Added","items":3}],"hash":"ddaec0280db1cae4"},{"version":"1.0.6","date":"2024-09-23","date_source":"registry","heading":"Version 1.0.6 - 23.09.2024","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#version-106---23092024","sections":[{"kind":"fix","heading":"Fixed","items":3},{"kind":"change","heading":"Changed","items":1}],"hash":"68bf6e0881fd44b3"},{"version":"1.0.5","date":"2024-07-30","date_source":"registry","heading":"Version 1.0.5 - 30.07.2024","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#version-105---30072024","sections":[{"kind":"change","heading":"Changed","items":1},{"kind":"fix","heading":"Fixed","items":1}],"hash":"5b285299f921e6b3"},{"version":"1.0.4","date":"2024-05-14","date_source":"registry","heading":"Version 1.0.4 - 14.05.2024","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#version-104---14052024","sections":[{"kind":"change","heading":"Changed","items":1}],"hash":"638a02f6db23e697"},{"version":"1.0.3","date":"2024-05-14","date_source":"registry","heading":"Version 1.0.3 - 14.05.2024","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#version-103---14052024","sections":[{"kind":"change","heading":"Changed","items":1}],"hash":"a7957c23eea50486"},{"version":"1.0.2","date":"2024-05-02","date_source":"registry","heading":"Version 1.0.2 - 02.05.2024","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#version-102---02052024","sections":[{"kind":"fix","heading":"Fixed","items":1}],"hash":"ddd159ebe5a46b7e"},{"version":"1.0.1","date":"2024-05-02","date_source":"registry","heading":"Version 1.0.1 - 02.05.2024","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#version-101---02052024","sections":[{"kind":"fix","heading":"Fixed","items":1}],"hash":"ddd159ebe5a46b7e"},{"version":"1.0.0","date":"2024-05-02","date_source":"registry","heading":"Version 1.0.0 - 02.05.2024","url":"https://github.com/cap-js/openapi/blob/main/CHANGELOG.md#version-100---02052024","sections":[{"kind":"feature","heading":"Added","items":1}],"hash":"955492c926db47de"}],"versions":[{"version":"1.7.0","date":"2026-10-06"},{"version":"1.6.0","date":"2026-08-04"},{"version":"1.5.0","date":"2026-06-13"},{"version":"1.4.2","date":"2026-05-18"},{"version":"1.4.0","date":"2026-03-18"},{"version":"1.3.1","date":"2026-01-08"},{"version":"1.3.0","date":"2025-12-16"},{"version":"1.2.3","date":"2025-05-28"},{"version":"1.2.2","date":"2025-05-13"},{"version":"1.2.1","date":"2025-03-12"},{"version":"1.2.0","date":"2025-02-28"},{"version":"1.1.2","date":"2025-01-27"},{"version":"1.1.1","date":"2024-12-13"},{"version":"1.1.0","date":"2024-12-04"},{"version":"1.0.7","date":"2024-10-17"},{"version":"1.0.6","date":"2024-09-23"},{"version":"1.0.5","date":"2024-07-30"},{"version":"1.0.4","date":"2024-05-14"},{"version":"1.0.3","date":"2024-05-14"},{"version":"1.0.2","date":"2024-05-02"},{"version":"1.0.1","date":"2024-05-02"},{"version":"1.0.0","date":"2024-05-02"}],"crawled_at":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:cap-js","name":"SAP Cloud Application Programming Model","json":"/actors/cap-js.json"}],"contributors":[{"ref":"actor:chgeo","name":"Christian Georgi","json":"/actors/chgeo.json"},{"ref":"actor:cschuerings","name":"Christian Schürings","json":"/actors/cschuerings.json"},{"ref":"actor:corporateuser","name":"corporateuser","json":"/actors/corporateuser.json"},{"ref":"actor:cronossclk","name":"cronossclk","json":"/actors/cronossclk.json"},{"ref":"actor:daogrady","name":"Daniel O'Grady","json":"/actors/daogrady.json"},{"ref":"actor:dipto-at-sap","name":"Dipto","json":"/actors/dipto-at-sap.json"},{"ref":"actor:geethika-pula","name":"Geethika Pula","json":"/actors/geethika-pula.json"},{"ref":"actor:dellagustin-sap","name":"Guilherme Dellagustin","json":"/actors/dellagustin-sap.json"},{"ref":"actor:heikotheissen","name":"Heiko Theißen","json":"/actors/heikotheissen.json"},{"ref":"actor:isaacpalomero","name":"Isaac Palomero","json":"/actors/isaacpalomero.json"},{"ref":"actor:jeevitha011","name":"jeevitha011","json":"/actors/jeevitha011.json"},{"ref":"actor:joergmann","name":"Jörg Mann","json":"/actors/joergmann.json"},{"ref":"actor:muskansethi1","name":"muskansethi1","json":"/actors/muskansethi1.json"},{"ref":"actor:ralfhandl","name":"Ralf Handl","json":"/actors/ralfhandl.json"},{"ref":"actor:roshninaveenas","name":"RoshniNaveenaS","json":"/actors/roshninaveenas.json"},{"ref":"actor:sjvans","name":"sjvans","json":"/actors/sjvans.json"},{"ref":"actor:swaldmann","name":"Steffen Waldmann","json":"/actors/swaldmann.json"},{"ref":"actor:tim-sh","name":"Tim Schulze-Hartung","json":"/actors/tim-sh.json"},{"ref":"actor:root3287","name":"Timothy Gibbons","json":"/actors/root3287.json"},{"ref":"actor:zongqichen","name":"Zongqi Chen","json":"/actors/zongqichen.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}