App Descriptor (manifest.json)
The app descriptor is the manifest.json file of a SAPUI5 app, component or library: a JSON document that declares the app's ID, version, data sources, models, routing, library dependencies and cross-navigation inbounds and outbounds. The app descriptor is what SAPUI5, the SAP Fiori Launchpad and SAP Build Work Zone read to load, connect and launch the app.
Quick facts
- Type
- Configuration file (JSON) of a SAPUI5 app, component or library
- Layer
- UI applications; Content, navigation & access
- Main namespaces
- sap.app, sap.ui, sap.ui5, sap.fiori, sap.platform.abap, sap.platform.hcp
- Read by
- SAPUI5 runtime, SAP Fiori Launchpad, SAP Build Work Zone, SAPUI5 application index
- Edited with
- Code editor or SAP Fiori tools (Page Map, Page Editor)
- Who works with it
- SAP Fiori developers, launchpad administrators
- Applies to
- SAP S/4HANA (all deployment options), SAP BTP
Layer: UI applicationsWhere it sits ▾
What does the app descriptor contain?
The app descriptor groups its attributes into namespaces, each owned by a different consumer:
| Namespace | Typical content |
|---|---|
sap.app | Mandatory app ID, type (application, component, library or card), title, version, i18n file, data sources, cross-navigation inbounds and outbounds |
sap.ui | Mandatory device types (desktop, tablet, phone), icons, technology, full-width behavior in the launchpad |
sap.ui5 | Mandatory dependencies (minimum SAPUI5 version, libraries), models, root view, routing, extended component, flexibility enablement (flexEnabled) |
sap.fiori | SAP Fiori registration IDs and the mandatory archetype, such as transactional or analytical |
sap.platform.abap, sap.platform.hcp | Platform-specific values such as the app's URI, filled during deployment |
A root-level _version states which manifest schema the file follows. The sap.app ID must match the component namespace in Component.js, may not exceed 70 characters and must be unique in the system. The app descriptor is therefore the single place where an app's identity, data connections and navigation contract are declared.
How does the SAP Fiori Launchpad use the app descriptor?
The launchpad cares mainly about sap.app → crossNavigation:
- Inbounds declare the intents the app accepts: a semantic object and an action, an optional tile title and icon, the device types, a parameter signature with required and default values, and a rule for additional parameters (allowed, ignored or not allowed).
- Outbounds declare the intents the app itself fires when it navigates to other apps.
What happens next depends on the platform:
- SAP BTP and SAP Build Work Zone: the app is deployed with its descriptor, for example to the HTML5 application repository, and the site uses the inbounds as its target mappings.
- ABAP launchpad (SAP S/4HANA on-premise and Private Edition): the target mapping in a technical catalog, created with the launchpad app manager (/UI2/FLPAM), references the app's
sap.appID. The SAPUI5 application index, built by /UI5/APP_INDEX_CALCULATE, reads the descriptors of deployed apps. - SAP S/4HANA Cloud Public Edition: SAP-delivered apps carry descriptors like any SAPUI5 app; custom apps are deployed to the SAPUI5 ABAP repository of the development tenant with their tile defined in the app, and an administrator grants access through a business role.
Alder Manufacturing's app alder.mm.supplierrating, with an illustrative inbound Supplier-rate, opens only if a tile fires exactly that intent. The app descriptor publishes the navigation contract; launchpad content decides who can use it.
How is the app descriptor versioned?
The manifest schema evolves with SAPUI5. Each schema version is understood by a matching SAPUI5 release, and the SAPUI5 SDK publishes the mapping, for example schema 1.60.0 for SAPUI5 1.120 and later.
Starting with SAPUI5 1.136, a new major manifest version 2 is available. It follows current best practices and removes features that earlier versions had only deprecated, so moving to it is a migration, not a number change. The SDK lists the required changes, and the UI5 linter reports deprecated manifest configurations.
Two related settings are often confused:
_versiondescribes the schema the file is written in.sap.ui5→dependencies→minUI5Versionstates the lowest SAPUI5 release the app needs.
Decision criterion: set minUI5Version to the lowest SAPUI5 release among the systems the app will run on, and choose a schema version that release understands. A mismatch between the app descriptor's schema and the runtime is a common source of features that silently do nothing.
What role does the app descriptor play in SAP Fiori elements and adaptation?
- SAP Fiori elements: the descriptor selects the floorplan for each page through its routing targets and carries page settings such as initial loading, variant management or table type. Annotations describe the data; the descriptor describes the app.
- App variants: an adaptation project does not edit the original file. It creates a variant with its own descriptor change file (manifest.appdescr_variant), where
sap.appID is the variant's ID andsap.ui5→componentNamepoints to the base app. The original app stays untouched and keeps receiving SAP updates. - Key user adaptation:
flexEnabledsignals that the app is enabled for SAPUI5 flexibility, which runtime UI adaptation relies on.
SAP describes the descriptor as read-only after delivery, which is why changes to SAP-delivered apps go through variants and flexibility changes instead. The app descriptor is the anchor that extensions reference, not a file to patch.
What are common app descriptor errors?
Work through these checks when an app does not start or navigate as expected:
- ID mismatch. The
sap.appID differs from the Component.js namespace, so the component cannot be found. - Duplicate or long ID. Consistency checks of the SAPUI5 application index flag duplicate IDs and IDs over 70 characters.
- Inbound does not match the tile. The semantic object, action or parameter signature differs from the intent the tile fires; a "not allowed" rule for additional parameters rejects extra parameters. On the ABAP launchpad, /UI2/FLIA shows how the intent was resolved.
- Device type switched off. The inbound or
sap.uiexcludes phones, so the app works on desktop only. - Wrong data source. The
dataSourcesURI points to a service path that does not exist in the target system or is not routed to it. - Stale index. A changed app is not yet known to the SAPUI5 application index. Deployment from SAP Business Application Studio updates it automatically; SAP Notes, support packages, upgrades and some transport imports need /UI5/APP_INDEX_CALCULATE.
Most app descriptor problems are contract mismatches between the file, the launchpad content and the backend, not syntax errors.
App descriptor vs. target mapping vs. launchpad app descriptor item: what is the difference?
| App descriptor (manifest.json) | Target mapping | Launchpad app descriptor item (LADI) | |
|---|---|---|---|
| What it is | JSON file shipped with a SAPUI5 app | Rule that resolves an intent to an app | ABAP launchpad object that packages a target mapping and tiles |
| Where it lives | Inside the app (ABAP repository or HTML5 application repository) | Technical catalog; on SAP BTP derived from inbounds | Technical catalog, maintained with the launchpad app manager |
| Who maintains it | App developer | Launchpad administrator; developer on SAP BTP | Launchpad administrator |
| Question it answers | What is this app and what does it need? | Which app opens for this intent? | How is this app started from the launchpad? |
Despite the similar name, a launchpad app descriptor item is launchpad content, while the app descriptor is part of the app itself.
FAQ
Is the app descriptor the same as manifest.json?
Yes. The SAPUI5 documentation uses manifest, descriptor for applications, components and libraries, and app descriptor for the same thing: the manifest.json file that stores an app's metadata in JSON format. Libraries, reuse components and UI integration cards have a manifest.json as well.
Where are launchpad inbounds defined in manifest.json?
Inbounds are defined in the sap.app namespace under crossNavigation, then inbounds. Each inbound has a key and declares a semantic object, an action, optional title and icon, device types and a parameter signature, including how additional parameters are treated.
Can I change the manifest.json of an SAP-delivered app?
Not directly. SAP treats the delivered descriptor as read-only, and modifications would be overwritten by updates. Changes go into an app variant created by an adaptation project, which stores descriptor changes separately and references the original app.
What is manifest version 2?
Manifest version 2 is the major schema version available as of SAPUI5 1.136. It removes features that earlier schema versions had deprecated, so apps need migration steps before switching. The SAPUI5 SDK documents the required changes, and the UI5 linter detects deprecated manifest settings.
Is a launchpad app descriptor item the same as the app descriptor?
No. A launchpad app descriptor item is an object in an ABAP technical catalog that combines a target mapping with one or more tiles. The app descriptor is the manifest.json inside the app. The target mapping refers to the app through its sap.app ID.
Sources
- SAPUI5 SDK: Manifest (descriptor for applications, components, and libraries)
- SAPUI5 SDK: Migration information for upgrading the manifest file
- SAP Help Portal: Launchpad app descriptor items (ABAP platform)
- SAP Help Portal: Calculation Report - Automatic Run vs. Manual Scheduling (SAPUI5 application index)
- SAP Help Portal: UI Development (SAP S/4HANA Cloud Public Edition)
- Applies to
- SAP S/4HANA on-premise · SAP S/4HANA Cloud Private Edition · SAP S/4HANA Cloud Public Edition · SAP BTP
- Last reviewed