Skip to content
Back to skills

Source 25e828a3e76804816f872252

ASecurity

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-mani...

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
ai-agentsrustgitapi

Works with

  • api

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned November 7, 2026

npx -y skills add gutsofpratik/OpenClaude-Skills --skill source-25e828a3e76804816f872252 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Source 25e828a3e76804816f872252?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Source 25e828a3e76804816f872252
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/gutsofpratik-source-25e828a3e76804816f872252/badge)](https://www.skillsdirectory.com/skills/gutsofpratik-source-25e828a3e76804816f872252)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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.json237 B
  • SKILL.md14.5 KB
  • UPSTREAM-LICENSE.txt11.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.