fix-manifest-json
Fix manifest.json issues that UI5 linter reports but cannot auto-fix. Use this skill when linter outputs these rules: - `no-outdated-manifest-version` - For _version not being 2.x - `no-legacy-ui5-version-in-manifest` - For minUI5Version below 1.136 - `no-deprecated-library` - For deprecated libraries in dependencies - `no-deprecated-component` - For deprecated components in dependencies - `no-deprecated-api` - For deprecated view types, resources/js, deprecated model types - `no-removed-manifest-property` - For async flags in manifest v2 Trigger on manifest.json files with errors about version, libraries, components, view types. Automatically updates manifest.json to be modern UI5 compatible.
How do I install this agent skill?
npx skills add https://github.com/ui5/plugins-coding-agents --skill fix-manifest-jsonIs this agent skill safe to install?
- Gen Agent Trust Hubpass
This skill provides instructions for an AI agent to fix common SAP UI5 manifest.json errors detected by the UI5 linter. It focuses on updating manifest versions, dependencies, and routing configurations to ensure compatibility with modern UI5 standards.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
What does this agent skill do?
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
| Rule ID | Message Pattern | This Skill's Action |
|---|---|---|
no-outdated-manifest-version | manifest.json must be modernized to Version 2 | Update _version to "2.0.0" |
no-legacy-ui5-version-in-manifest | Use UI5 version 1.136.0 or higher | Update minUI5Version to "1.136.0" |
no-deprecated-library | Use of deprecated library '...' | Remove from dependencies/libs |
no-deprecated-component | Use of deprecated component '...' | Remove from dependencies/components |
no-deprecated-api | Use of deprecated view type '...' | Change to "XML" |
no-deprecated-api | Use of deprecated property 'sap.ui5/resources/js' | Remove if empty |
no-deprecated-api | Use of deprecated class '...' (model types) | Flag for manual modernization |
no-removed-manifest-property | Property '...' has been removed in Manifest Version 2 | Remove the property |
When to Use
Apply this skill when you see linter output like:
manifest.json:2:3 error manifest.json must be modernized to Version 2 no-outdated-manifest-version
manifest.json:15:5 error Use UI5 version 1.136.0 or higher in manifest.json no-legacy-ui5-version-in-manifest
manifest.json:20:7 error Use of deprecated library 'sap.ui.commons' no-deprecated-library
manifest.json:25:7 error Use of deprecated view type 'JSON' no-deprecated-api
manifest.json:30:9 error Property '/sap.ui5/rootView/async' has been removed in Manifest Version 2 no-removed-manifest-property
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").
// Before
{
"_version": "1.12.0",
"sap.app": {
"_version": "1.1.0",
...
},
"sap.ui5": {
"_version": "1.2.0",
...
}
}
// After — only root _version changed
{
"_version": "2.0.0",
"sap.app": {
"_version": "1.1.0",
...
},
"sap.ui5": {
"_version": "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
// Before
"dependencies": {
"minUI5Version": "1.120.0",
...
}
// After
"dependencies": {
"minUI5Version": "1.136.0",
...
}
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
// Before
"libs": {
"sap.m": {},
"sap.ui.commons": {},
"sap.ui.layout": {}
}
// After
"libs": {
"sap.m": {},
"sap.ui.layout": {}
}
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
// Before
"rootView": {
"viewName": "my.app.view.Main",
"type": "JSON"
}
// After
"rootView": {
"viewName": "my.app.view.Main",
"type": "XML"
}
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
// Before (v2)
"rootView": {
"viewName": "my.app.view.Main",
"type": "XML",
"async": true
}
// After (v2)
"rootView": {
"viewName": "my.app.view.Main",
"type": "XML"
}
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).
// Before
"resources": {
"js": []
}
// After
// (resources section removed if 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:
| Old Property (v1.x) | New Property (v2.0.0) | Where |
|---|---|---|
viewPath | path | routing.config |
viewName | name | routing.config and routing.targets.* |
viewId | id | routing.targets.* |
viewLevel | level | routing.targets.* |
viewType | viewType | Unchanged — keep as-is |
New required property:
| Property | Value | Where |
|---|---|---|
type | "View" | routing.config (applies to all targets) OR each individual routing.targets.* entry |
Before (v1.x):
"routing": {
"config": {
"routerClass": "sap.m.routing.Router",
"viewType": "XML",
"viewPath": "my.app.view",
"controlId": "app",
"controlAggregation": "pages",
"async": true
},
"routes": [
{
"name": "main",
"pattern": "",
"target": "main"
}
],
"targets": {
"main": {
"viewName": "Main",
"viewId": "main",
"viewLevel": 1
},
"detail": {
"viewName": "Detail",
"viewId": "detail",
"viewLevel": 2
}
}
}
After (v2.0.0):
"routing": {
"config": {
"routerClass": "sap.m.routing.Router",
"viewType": "XML",
"path": "my.app.view",
"controlId": "app",
"controlAggregation": "pages",
"type": "View"
},
"routes": [
{
"name": "main",
"pattern": "",
"target": "main"
}
],
"targets": {
"main": {
"name": "Main",
"id": "main",
"level": 1
},
"detail": {
"name": "Detail",
"id": "detail",
"level": 2
}
}
}
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:
manifest.json:2:3 error manifest.json must be modernized to Version 2 no-outdated-manifest-version
manifest.json:15:5 error Use UI5 version 1.136.0 or higher in manifest.json no-legacy-ui5-version-in-manifest
manifest.json:20:7 error Use of deprecated library 'sap.ui.commons' no-deprecated-library
manifest.json:35:9 error Property '/sap.ui5/rootView/async' has been removed in Manifest Version 2 no-removed-manifest-property
manifest.json:40:9 error Property '/sap.ui5/routing/config/async' has been removed in Manifest Version 2 no-removed-manifest-property
Transform:
// Before
{
"_version": "1.12.0",
"sap.app": {
"_version": "1.1.0",
...
},
"sap.ui5": {
"_version": "1.2.0",
"dependencies": {
"minUI5Version": "1.84.0",
"libs": {
"sap.m": {},
"sap.ui.commons": {},
"sap.ui.layout": {}
}
},
"rootView": {
"viewName": "my.app.view.Main",
"type": "XML",
"async": true
},
"routing": {
"config": {
"routerClass": "sap.m.routing.Router",
"viewType": "XML",
"viewPath": "my.app.view",
"controlId": "app",
"controlAggregation": "pages",
"async": true
},
"routes": [
{ "name": "main", "pattern": "", "target": "main" }
],
"targets": {
"main": {
"viewName": "Main",
"viewId": "main",
"viewLevel": 1
}
}
}
}
}
// After
{
"_version": "2.0.0",
"sap.app": {
"_version": "1.1.0",
...
},
"sap.ui5": {
"_version": "1.2.0",
"dependencies": {
"minUI5Version": "1.136.0",
"libs": {
"sap.m": {},
"sap.ui.layout": {}
}
},
"rootView": {
"viewName": "my.app.view.Main",
"type": "XML"
},
"routing": {
"config": {
"routerClass": "sap.m.routing.Router",
"viewType": "XML",
"path": "my.app.view",
"controlId": "app",
"controlAggregation": "pages",
"type": "View"
},
"routes": [
{ "name": "main", "pattern": "", "target": "main" }
],
"targets": {
"main": {
"name": "Main",
"id": "main",
"level": 1
}
}
}
}
}
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
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/ui5/plugins-coding-agents/fix-manifest-json">View fix-manifest-json on skillZs</a>