skills/websdk-1023-upgrade/SKILL.md
Step-by-step guide for migrating a Cumulocity Web SDK project from 1022 to 1023 (Angular 20). Covers Angular 20 ng update, @c8y dependency updates, ngx-bootstrap and CDK upgrades, TypeScript 5.9.3 requirement, and breaking changes including global time context API redesign, scoped TranslateService per plugin, QueriesUtil type additions, and removal of BulkSingleOperationsListModule.
npx skillsauth add cumulocity-iot/cumulocity-skills websdk-1023-upgradeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Angular 20 support is introduced from Web SDK version 1023.0.0.
Use this skill when the project:
@c8y/*) at version 1022.x.@angular/cli (ng).ng update for Angular 20ng update @angular/core@20 @angular/cli@20
This applies automated migration schematics from the Angular team. Review and commit the diff separately.
Refer to the Angular 20 update guide for the full list of breaking changes.
@c8y DependenciesIn package.json, update every @c8y/* package to the target 1023.x.x release:
{
"@c8y/cli": "1023.0.0",
"@c8y/client": "1023.0.0",
"@c8y/ngx-components": "1023.0.0",
"@c8y/options": "1023.0.0",
"@c8y/style": "1023.0.0",
"@c8y/websdk": "1023.0.0"
}
Replace 1023.0.0 with the exact patch version you are targeting.
Update TypeScript to version 5.9.3 or higher:
{
"devDependencies": {
"typescript": "5.9.3"
}
}
ngx-bootstrapnpm install [email protected]
# or with yarn
yarn add [email protected]
@angular/cdk (and Material)npm install @angular/cdk@20
# or with yarn
yarn add @angular/cdk@20
If @angular/material is also used, update it to the same major version:
npm install @angular/material@20
Verify compatibility against the Angular actively supported versions table. Key ranges for Angular 20:
| Dependency | Supported range |
|---|---|
| Node.js | ^20.11.0 \|\| ^22.0.0 |
| TypeScript | >=5.9.3 |
| RxJS | ^6.5.3 \|\| ^7.4.0 |
Update .nvmrc / .node-version and package.json accordingly.
rm -rf node_modules
npm install
npm ls --depth=0
Resolve any peer dependency warnings before proceeding.
The global time context integration API has been redesigned. Custom widget implementations that interact with the global time context may require updates.
Action: Review any widget code that reads or subscribes to the global time context. Full migration details will be provided in upcoming Cumulocity documentation — check the official Web SDK changelog for updates before finalising this step.
Find usages to review:
grep -rn "TimeContext\|timeContext\|globalTime" src/ --include="*.ts"
@ngx-translate/core Upgraded to v17 — Scoped TranslateService@ngx-translate/core has been upgraded to version 17.0.0. A key behavioural change is that a separate TranslateService instance is now provided per plugin, rather than a single shared instance.
Impact: Code that directly injects and uses TranslateService across plugin or module boundaries may observe unexpected behaviour, as each plugin now receives its own scoped instance.
Action: Review all direct usages of TranslateService in plugins and ensure they do not rely on a shared singleton state (e.g. loaded translations, current language). Where cross-plugin translation sharing is needed, align with the new scoped service approach as documented by @ngx-translate/core v17.
Find all injection sites to review:
grep -rn "TranslateService" src/ --include="*.ts"
QueriesUtil Now Has Type DefinitionsThe QueriesUtil class now includes TypeScript type definitions. Depending on how your code uses this class, you may encounter new TypeScript compilation errors where previously inferred or untyped usages are now strictly typed.
Action: Run a type check and fix any errors surfaced around QueriesUtil:
npx tsc --noEmit
Find all usages:
grep -rn "QueriesUtil" src/ --include="*.ts"
Add the appropriate type annotations as needed. For example, if a method now requires a specific generic parameter, provide it explicitly:
// Before (was accepted without types)
const query = QueriesUtil.buildQuery(params);
// After (provide explicit types if required by the new signatures)
const query = QueriesUtil.buildQuery<MyFilter>(params);
BulkSingleOperationsListModule RemovedBulkSingleOperationsListModule has been removed. Use SingleOperationsListComponent as a standalone component instead.
Before:
import { BulkSingleOperationsListModule } from '@c8y/ngx-components';
@NgModule({
imports: [
BulkSingleOperationsListModule,
],
})
export class MyModule {}
After:
import { SingleOperationsListComponent } from '@c8y/ngx-components';
@NgModule({
imports: [
SingleOperationsListComponent,
],
})
export class MyModule {}
Or, if your module has already been migrated to standalone:
@Component({
standalone: true,
imports: [SingleOperationsListComponent],
})
export class MyComponent {}
Find all usages to migrate:
grep -rn "BulkSingleOperationsListModule" src/ --include="*.ts"
npm start
Fix any remaining compilation errors iteratively. After resolving the breaking changes above, the most common remaining issues will be TypeScript strict-mode errors introduced by QueriesUtil type additions and the @ngx-translate/core v17 API changes.
| Concern | Before (1022) | After (1023) |
|---|---|---|
| Angular version | 19.x | 20.x |
| Node.js | ^18.19 | ^20.11 | ^22.0 | ^20.11 | ^22.0 |
| TypeScript | >=5.5 <5.8 | >=5.9.3 |
| ngx-bootstrap | 19.0.2 | 20.0.2 |
| @angular/cdk | 19.x | 20.x |
| @ngx-translate/core | Shared singleton | Scoped per plugin (v17) |
| QueriesUtil | Untyped | Type definitions added — may need annotations |
| BulkSingleOperationsListModule | Available | Removed — use SingleOperationsListComponent |
| Global time context API | Previous API | Redesigned — check upcoming docs |
tools
Scaffold a new Cumulocity application using the @c8y/websdk Angular schematic without human interaction. Covers Angular CLI installation, app generation, schematic setup, AI tools configuration, dev server, and build commands. Triggers: new app, scaffold, create application, ng add websdk, setup cumulocity app, new cumulocity project.
tools
Step-by-step guide to migrate a Cumulocity Web SDK application to a target version. Detects breaking changes with the ui-breaking-changes-cli, scaffolds a reference app at the target version with the new-app skill, compares key configuration files (app.ts, bootstrap.ts, angular.json, etc.), and finishes with a code-quality-analysis review. Triggers: migrate app, upgrade version, breaking changes, sdk upgrade, migrate cumulocity, upgrade websdk.
development
Complete guide to internationalizing a Cumulocity Web SDK application. Covers all approaches to annotating and translating text (gettext, translate pipe, translate directive, TranslateService), extracting strings, creating and updating .po files, overriding existing translations, and adding brand-new languages. Triggers: i18n, internationalization, add language, translate, translation, localization, l10n, new language, po file, gettext, TranslateService, language switcher.
development
Analyze Angular / Cumulocity Web SDK code for anti-patterns, bugs, and quality issues. Use when reviewing components, services, or modules for code quality, maintainability, performance, and correctness. Covers TypeScript best practices, Angular idioms, C8Y SDK usage patterns, and project-specific conventions. Triggers: code review, anti-pattern, quality check, refactor suggestion, style guide, bug analysis.