{"ref":"capability:tenant-extensibility","page":"/capabilities/tenant-extensibility","json":"/capabilities/tenant-extensibility.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"tenant-extensibility","name":"Tenant extensibility","domain":"operations-and-runtime","ecosystems":["cap"],"universal":false,"description":"Letting a customer extend the model of a running SaaS application with extra fields and entities per tenant, without forking the application, as distinct from extending the application's code for every customer at once.","short":"Letting a customer extend a running SaaS model per tenant","core_coverage":{"state":"core-and-community","assessed_at":"2026-09-20","what_core_does":"cds add extensibility adds [@sap/cds-mtxs](artifact:sap-cds-mtxs) and switches on cds.requires.extensibility. A subscriber's developer fetches the base model with cds pull, writes extend and annotate definitions in an ordinary CAP project (new fields, entities, associations, compositions, Fiori annotations), and activates them for one tenant with cds push. The ExtensibilityService at /-/cds/extensibility adds and activates these tenant-specific extensions at runtime.","where_it_stops":"It stops at the model: what reaches the ExtensibilityService is CDL or CSN and i18n texts, and the annotations capire lists as affecting persistence or security, @impl, @restrict and @requires among them, are blocked unless the provider's extension-allowlist makes an exception. Without that allowlist no extension is accepted at all, and an extension the provider builds in advance and switches on per subscriber is a [feature toggle](capability:feature-toggles).","sources":[{"url":"https://cap.cloud.sap/docs/guides/extensibility/customization","title":"Extending SaaS Applications","checked":"2026-09-20","quote":"Subscribers (customers) of SaaS solutions frequently need to tailor these to their specific needs, for example, by adding specific extension fields and entities."},{"url":"https://cap.cloud.sap/docs/guides/multitenancy/mtxs","title":"MTX Services Reference","checked":"2026-09-20","quote":"Without extension-allowlist configured, extensions are forbidden."},{"url":"https://cap.cloud.sap/docs/guides/multitenancy/mtxs","title":"MTX Services Reference","checked":"2026-09-20","quote":"The following annotations are blocked by default because they affect the persistence or security."},{"url":"https://cap.cloud.sap/docs/guides/extensibility/","title":"Extensibility","checked":"2026-09-20","quote":"Toggled features are pre-built extensions built by the provider of a SaaS application, which can be switched on selectively per subscriber."}],"relationship":"unassessed"},"history":[{"date":"2026-08-31","field":"core_coverage.state","from":"core","to":"core-only","reason":"States renamed to describe who is present rather than to interpret intent. left-open-on-purpose asserted a motive; core-and-community states a fact, with relationship carrying the intent separately."},{"date":"2026-09-20","field":"core_coverage.state","from":"core-only","to":"core-and-community","reason":"[dynamic-external-cds-join](artifact:venkatesh-hulekal-dynamic-external-cds-join), an independent cds-plugin first seen on 2026-09-07, carries a provides edge to this capability on CAP beside [@sap/cds-mtxs](artifact:sap-cds-mtxs). The previous state was assessed on 2026-08-31, before that entry. The relationship is unassessed: no retrieved document gives a history between the plugin and the core."}],"drafted_with_ai":true},"sap_delivery":{"door":"cap","all":{"built_in":[],"documented_pattern":[],"announced":[],"packages":[{"ref":"artifact:sap-cds-mtxs","name":"@sap/cds-mtxs","json":"/artifacts/sap-cds-mtxs.json"}]},"by_flavor":{"node":{"built_in":[],"documented_pattern":[],"announced":[],"packages":[{"ref":"artifact:sap-cds-mtxs","name":"@sap/cds-mtxs","json":"/artifacts/sap-cds-mtxs.json"}]},"java":null}},"edges":{"use_cases":[],"shared_tasks":[],"related_tasks":[],"options":[{"ref":"artifact:sap-cds-mtxs","name":"@sap/cds-mtxs","json":"/artifacts/sap-cds-mtxs.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:venkatesh-hulekal-dynamic-external-cds-join","name":"dynamic-external-cds-join","json":"/artifacts/venkatesh-hulekal-dynamic-external-cds-join.json","ecosystem":"cap","origin_ring":"independent"}],"samples":[{"ref":"artifact:gregorwolf-mtxs-reviews","name":"mtxs-reviews","json":"/artifacts/gregorwolf-mtxs-reviews.json"},{"ref":"artifact:sap-samples-partner-reference-application-extension","name":"SAP-samples/partner-reference-application-extension","json":"/artifacts/sap-samples-partner-reference-application-extension.json"}],"explained_by":[{"ref":"content:devtoberfest-2026-cap-cds-oyster-extensibility","name":"Custom Business Logic Extensibility in CAP (CDS-Oyster)","json":"/content/devtoberfest-2026-cap-cds-oyster-extensibility.json"},{"ref":"content:ac-multitenant-saas-application-using-cap","name":"Multitenant SaaS Application using CAP","json":"/content/ac-multitenant-saas-application-using-cap.json"}],"normative_context":[]}}