Fix manifest.json
This skill fixes manifest.json issues that the UI5 linter detects but cannot auto-fix because they may require understanding of the application's dependencies and structure.
Linter Rules Handled
When to Use
Apply this skill when you see linter output like:
Fix Strategy
1. no-outdated-manifest-version - Update _version to 2.0.0
IMPORTANT: Only update the root _version to "2.0.0". Do NOT change nested _version properties inside sap.app, sap.ui, sap.ui5, etc. — those should remain at their current values (e.g., "1.1.0", "1.2.0").
After updating to version 2.0.0, you MUST also apply these consequential changes:
- Remove async properties (see section 6)
- Rename routing configuration properties (see section 8)
- Add
type: "View"to routing config or targets (see section 8)
2. no-legacy-ui5-version-in-manifest - Update minUI5Version
If minUI5Version is an array, update all entries below 1.136.0.
3. no-deprecated-library - Remove Deprecated Libraries
Remove these deprecated libraries from sap.ui5/dependencies/libs:
sap.ui.commons- Usesap.minsteadsap.ui.ux3- Usesap.mandsap.finsteadsap.makit- Usesap.vizinsteadsap.me- Usesap.minsteadsap.ca.ui- Use standard controlssap.landvisz- Deprecatedsap.ui.vtm- Deprecatedsap.sac.grid- Deprecated since 1.112, removed 1.114sap.ui.suite- Deprecated since 1.108sap.zen.commons- Deprecated since 1.89sap.zen.crosstab- Deprecated since 1.89sap.zen.dsh- Deprecated since 1.89
4. no-deprecated-component - Remove Deprecated Components
Remove deprecated components from sap.ui5/dependencies/components.
5. no-deprecated-api - Fix View Types
Change deprecated view types to "XML" (or "Typed" for JS-heavy view cases):
JSON→XMLHTML→XMLJS→XML(or considerTypedview as an alternative for complex JS logic)Template→XML
Applies to:
sap.ui5/rootView/typesap.ui5/routing/config/viewTypesap.ui5/routing/targets/*/viewType
Important: When changing view types, the actual view file must also be converted to XML format. Flag this for manual review.
6. no-removed-manifest-property - Remove Async Properties (Manifest v2)
In manifest version 2.0.0+, the async flag is implicitly true for the root view and the routing configuration, so it must be removed from exactly these two locations:
sap.ui5/rootView/asyncsap.ui5/routing/config/async
SCOPE WARNING — do NOT remove async from anywhere else. The implicit-async behavior applies only to rootView and routing.config. Other locations where async may legitimately appear (and must be preserved) include:
sap.ui5/models/*/settings/async(e.g., OData/JSON model async loading flag)sap.app/dataSources/*settings that includeasync- Any custom configuration under
sap.ui5/extends,sap.ui5/componentUsages, or third-party namespaces - Any
asyncinside route definitions that is not the top-levelrouting.config.async
The linter rule no-removed-manifest-property only fires for the two paths above. Trust the linter's pointer — only remove the exact properties it flags.
7. no-deprecated-api - Remove sap.ui5/resources/js
If the array is empty, remove the entire js property (and resources if it becomes empty).
If not empty, this requires manual modernization to proper module dependencies.
8. Routing Configuration — Rename Properties for Manifest Version 2
When _version is updated to "2.0.0", the routing configuration properties must also be renamed. The view-prefixed property names are deprecated in version 2.
Property renaming rules:
New required property:
Before (v1.x):
After (v2.0.0):
Changes summary:
viewPath→pathin configviewName→namein each targetviewId→idin each targetviewLevel→levelin each targetviewTypestays asviewType(unchanged)asyncremoved only fromrouting.config(implicittruein v2). Do NOT touchasyncon models, dataSources, or other unrelated config — see Section 6 scope warning.type: "View"added to config (alternatively, add"type": "View"to each individual target if mixing views and components)
When to add type to config vs per target:
typein config (most common): All targets are viewstypeper target: Mixed routing targets (some views, some components)
Implementation Steps
- Read and parse the manifest.json file
- For each linter error (identified by rule ID and message):
no-outdated-manifest-version: Update root_versionto"2.0.0"(keep nested_versionvalues unchanged)no-legacy-ui5-version-in-manifest: UpdateminUI5Versionto"1.136.0"no-deprecated-library: Remove the library from dependenciesno-deprecated-component: Remove the component from dependenciesno-deprecated-api(view type): Change to"XML"no-deprecated-api(resources/js): Remove if emptyno-removed-manifest-property: Remove the property
- If
_versionwas updated to 2.0.0, also apply routing modernization:- Rename
viewPath→path,viewName→name,viewId→id,viewLevel→levelin routing config and targets - Add
type: "View"torouting.config(or per target) - Remove
asynconly fromsap.ui5/rootViewandsap.ui5/routing/config. Do NOT removeasyncfrom model settings, dataSources, or any other path — those keep theirasyncflag.
- Rename
- Preserve JSON formatting (indentation)
- Write the updated file
Example Fix
Given linter output:
Transform:
Notes
- Only update the root
_versionto 2.0.0 — do NOT change nested_versionproperties insidesap.app,sap.ui,sap.ui5, etc. - When updating
_versionto 2.0.0, always apply routing property renames and addtype: "View"in the same pass - Changing view types from JSON/HTML/JS to XML requires the actual view files to be converted - flag this as a follow-up task
- When removing deprecated libraries, check if there are any imports from those libraries in the codebase that need modernization
- The
minUI5Versionupdate means the app won't run on older UI5 versions - this is intentional for modern UI5 compatibility - After updating
_versionto 2.0.0, synchronizationMode and other v1-specific properties should also be removed if present - Manifest v2 strictness: Manifest v2.0.0 enables stricter error handling — syntactical errors in views/fragments now throw errors instead of failing silently
sap.ui/supportedThemescauses an error in manifest v2 — remove it if presentIAsyncContentCreationis NOT enforced by manifest v2 — it must be explicitly added in Component.js by thefix-component-asyncskill (this skill does not handle it)- Typed View alternative: When changing deprecated view types (
JS,JSON,HTML) the default replacement isXML, but for complex JS-heavy views, considerTypedviews as an alternative
Related Skills
- fix-component-async: After updating manifest.json, Component.js needs the
IAsyncContentCreationinterface — defer to that skill for correct placement - fix-bootstrap-params: For deprecated libraries referenced in HTML bootstrap (
data-sap-ui-libs), use fix-bootstrap-params instead of this skill


