Source 25e828a3e76804816f872252
ASecurityFix 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-mani...
- 2 stars
- 0 votes
- 0 copies
- 0 views
- Added November 7, 2026
Works with
Security analysis
100/100Pro scans all 3 files and shows the line behind each finding
npx -y skills add gutsofpratik/OpenClaude-Skills --skill source-25e828a3e76804816f872252 --agent claude-codeAre you the author of Source 25e828a3e76804816f872252?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/gutsofpratik-source-25e828a3e76804816f872252)---
name: fix-manifest-json
description: |
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.
---
# 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"`).
```json
// 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`
```json
// 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` - Use `sap.m` instead
- `sap.ui.ux3` - Use `sap.m` and `sap.f` instead
- `sap.makit` - Use `sap.viz` instead
- `sap.me` - Use `sap.m` instead
- `sap.ca.ui` - Use standard controls
- `sap.landvisz` - Deprecated
- `sap.ui.vtm` - Deprecated
- `sap.sac.grid` - Deprecated since 1.112, removed 1.114
- `sap.ui.suite` - Deprecated since 1.108
- `sap.zen.commons` - Deprecated since 1.89
- `sap.zen.crosstab` - Deprecated since 1.89
- `sap.zen.dsh` - Deprecated since 1.89
```json
// 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` → `XML`
- `HTML` → `XML`
- `JS` → `XML` (or consider `Typed` view as an alternative for complex JS logic)
- `Template` → `XML`
Applies to:
- `sap.ui5/rootView/type`
- `sap.ui5/routing/config/viewType`
- `sap.ui5/routing/targets/*/viewType`
```json
// 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/async`
- `sap.ui5/routing/config/async`
```json
// 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 include `async`
- Any custom configuration under `sap.ui5/extends`, `sap.ui5/componentUsages`, or third-party namespaces
- Any `async` inside route definitions that is not the top-level `routing.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).
```json
// 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):**
```json
"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):**
```json
"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` → `path` in config
- `viewName` → `name` in each target
- `viewId` → `id` in each target
- `viewLevel` → `level` in each target
- `viewType` stays as `viewType` (unchanged)
- `async` removed **only** from `routing.config` (implicit `true` in v2). Do NOT touch `async` on 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:**
- **`type` in config** (most common): All targets are views
- **`type` per target**: Mixed routing targets (some views, some components)
## Implementation Steps
1. Read and parse the manifest.json file
2. For each linter error (identified by rule ID and message):
- `no-outdated-manifest-version`: Update root `_version` to `"2.0.0"` (keep nested `_version` values unchanged)
- `no-legacy-ui5-version-in-manifest`: Update `minUI5Version` to `"1.136.0"`
- `no-deprecated-library`: Remove the library from dependencies
- `no-deprecated-component`: Remove the component from dependencies
- `no-deprecated-api` (view type): Change to `"XML"`
- `no-deprecated-api` (resources/js): Remove if empty
- `no-removed-manifest-property`: Remove the property
3. **If `_version` was updated to 2.0.0**, also apply routing modernization:
- Rename `viewPath` → `path`, `viewName` → `name`, `viewId` → `id`, `viewLevel` → `level` in routing config and targets
- Add `type: "View"` to `routing.config` (or per target)
- Remove `async` **only** from `sap.ui5/rootView` and `sap.ui5/routing/config`. Do NOT remove `async` from model settings, dataSources, or any other path — those keep their `async` flag.
4. Preserve JSON formatting (indentation)
5. 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:
```json
// 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** `_version` to 2.0.0 — do NOT change nested `_version` properties inside `sap.app`, `sap.ui`, `sap.ui5`, etc.
- When updating `_version` to 2.0.0, **always** apply routing property renames and add `type: "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 `minUI5Version` update means the app won't run on older UI5 versions - this is intentional for modern UI5 compatibility
- After updating `_version` to 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/supportedThemes`** causes an error in manifest v2 — remove it if present
- **`IAsyncContentCreation` is NOT enforced by manifest v2** — it must be explicitly added in Component.js by the `fix-component-async` skill (this skill does not handle it)
- **Typed View alternative**: When changing deprecated view types (`JS`, `JSON`, `HTML`) the default replacement is `XML`, but for complex JS-heavy views, consider `Typed` views as an alternative
## Related Skills
- **fix-component-async**: After updating manifest.json, Component.js needs the `IAsyncContentCreation` interface — 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
Files in this skill
- PROVENANCE.json
- SKILL.md
- UPSTREAM-LICENSE.txt
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.