no-removed-manifest-property: extend to routing.targets[].viewName/viewPath/viewLevel under _version 2.0.0+
@flovogt is already working on this.
Since May 12, 2026.
Assessment
This issue has not been assessed yet.
Description
Is your feature request related to a problem? Please describe.
When migrating a UI5 freestyle app to manifest _version: "2.0.0" (UI5 1.136+),
the routing-target keys viewName / viewPath / viewLevel are deprecated in
favour of name / path / level + an explicit "type": "View". The
@ui5/manifest schema marks them as "deprecated": true with guidance text
pointing to the v2 replacement, and the official Migration Information for
Upgrading the Manifest File doc lists this under the 2.0.0 (1.136) "Deprecated
Manifest Entries" row.
In practice, leaving the v1 keys in a v2 manifest produces a silent failure:
the router matches the route ("The route named 'main' did match"), but no view
is placed in any column of the FCL — the page renders blank. The only
diagnostic signal is a single console warn a millisecond after route match:
page stack is empty but should have been initialized -
application failed to provide a page to display
I expected no-removed-manifest-property to catch this, but on
@ui5/linter@1.19.0 it doesn't:
- The rule's detection scope is limited to
resources/js,rootView/async,
androuting/config/async. lib/linter/manifestJson/ManifestLinter.jsline 98 does
const name = target.name ?? target.viewName;— it accepts either form
silently.- Running
ui5lintagainst a v2 manifest withviewName/viewPath/
viewLeveland notype: "View"produces zero manifest-level findings.
Concrete repro — this manifest fragment runs blank but lints clean:
{
"_version": "2.0.0",
"sap.ui5": {
"routing": {
"config": {
"routerClass": "sap.f.routing.Router",
"viewType": "XML",
"viewPath": "my.app.view"
},
"routes": [
{ "pattern": "", "name": "main", "target": ["main", "welcome"],
"layout": "TwoColumnsMidExpanded" }
],
"targets": {
"main": { "viewName": "Main", "viewLevel": 1, "controlAggregation": "beginColumnPages" },
"welcome": { "viewName": "Welcome", "viewLevel": 2, "controlAggregation": "midColumnPages" }
}
}
}
}
Describe the solution you'd like
Extend no-removed-manifest-property (or add a sibling rule) to flag the
following when _version >= 2.0.0:
sap.ui5.routing.config.viewPath→ suggestpath+type: "View"sap.ui5.routing.targets[].viewName→ suggestname+type: "View"sap.ui5.routing.targets[].viewPath→ suggestpath+type: "View"sap.ui5.routing.targets[].viewLevel→ suggestlevel+type: "View"sap.ui5.routing.targets[].viewId→ suggestid+type: "View"
Ideally with an auto-fix that renames the keys and inserts "type": "View" on
each affected target (and on routing.config as a sensible default). The fix
shape mirrors what the SAP Help migration doc already prescribes verbatim.
After-shape for the same example:
"routing": {
"config": {
"routerClass": "sap.f.routing.Router",
"type": "View",
"viewType": "XML",
"path": "my.app.view"
},
"routes": [
{ "pattern": "", "name": "main", "target": ["main", "welcome"],
"layout": "TwoColumnsMidExpanded" }
],
"targets": {
"main": { "type": "View", "name": "Main", "level": 1, "controlAggregation": "beginColumnPages" },
"welcome": { "type": "View", "name": "Welcome", "level": 2, "controlAggregation": "midColumnPages" }
}
}
Describe alternatives you've considered
- Relying on
@ui5/manifestschema's"deprecated": trueflag. The schema
already marks these keys deprecated with the correct migration text, but the
schema validator (Ajv via@ui5/mcp-server'srun_manifest_validation, with
strict: false) ignores thedeprecatedflag — a manifest with the legacy
keys validates asisValid: true. A custom Ajv post-processing pass could
surface deprecations, but a dedicated linter rule is more discoverable and
carries the fix. - Documentation only. The migration is documented, but with no lint signal
the failure mode is "blank page, no errors" which is hard to attribute. Most
troubleshooting paths I've seen reach for FCLlayout(a different trap)
before checking the target shape.
Additional context
- Migration source: [Migration Information for Upgrading the Manifest File](https://help.sap.com/docs/SAPUI5/b2f662dd9d7a4ec680056733050b4d34/a110f762148a4933a33d30751a37a743.html?version=1.147) — see the 2.0.0 (1.136) "Deprecated Manifest Entries" row.
@ui5/manifest@1.86.0schema already has the canonical "do this instead" text on each property'sdescription, so a rule message can quote that verbatim.- Tested empirically on UI5 1.147.2 + manifest
_version: "2.0.0"+sap.f.routing.Router(the symptom should reproduce onsap.m.routing.Routertoo — same code path in core, but I haven't verified).
- Dominant language
- TypeScript
- Stars
- 79
- Forks
- 13
- Avg merge
- 19h 34m
- Merged PRs (30d)
- 9
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from UI5/linter
-
autofix detection
-
detection
-
autofix detection
-
autofix detection
-
autofix detection
Similar issues
-
clawsweeper:fix-shape-clear clawsweeper:queueable-fix clawsweeper:source-repro impact:ux-friction issue-rating: 🦞 diamond lobster no-stale P3
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Difficulty 1/5 Under an hour Newbie friendliness 76/100
-
code-quality refactoring
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
github/gh-aw-firewall#8816 ·
-
integration:quickjs org:external priority:backlog topic:code-interpreter topic:middleware type:feature
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
langchain-ai/deepagents#6450 ·
-
Difficulty 1/5 Under an hour Newbie friendliness 88/100
vercel/react-tweet#225 ·