Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# 15.0.0-rc.0 (2026-04-02)
# 15.0.0 (2026-04-22)

## Highlights

Expand Down Expand Up @@ -29,6 +29,9 @@ All scaffolded projects now include AI-ready configuration files to enhance the
* **Claude skills** for component usage, theming customization, and bundle size optimization ([#1573](https://github.com/IgniteUI/igniteui-cli/pull/1573))
* **`ig ai-config` CLI command** to configure AI tooling in an existing project: writes `.vscode/mcp.json` with `igniteui-cli` and `igniteui-theming` MCP servers and copies AI coding skill files from installed Ignite UI packages to `.claude/skills/` ([#1502](https://github.com/IgniteUI/igniteui-cli/pull/1502))
* **AI skills auto-copy on `ng add`**: the `cli-config` Angular schematic now automatically copies skill files from the installed Ignite UI package's `skills/` directory into `.claude/skills/` as part of the `ng add igniteui-angular` flow ([#1502](https://github.com/IgniteUI/igniteui-cli/pull/1502))
* **`ng add` ai-config schematic:** a dedicated `ai-config` Angular schematic configures VS Code MCP settings with `angular-cli` and `igniteui-cli` MCP servers when running `ng add igniteui-angular` ([#1624](https://github.com/IgniteUI/igniteui-cli/pull/1624))
* **Skills fallback from project template:** `ig ai-config` now falls back to copying skill files from the project template when the installed package does not include a `skills/` directory ([#1644](https://github.com/IgniteUI/igniteui-cli/pull/1644))
* **Web Components skills without framework config:** `ig ai-config` now correctly adds `igniteui-webcomponents` skills even when no framework is configured in the project ([#1634](https://github.com/IgniteUI/igniteui-cli/pull/1634))

---

Expand All @@ -54,6 +57,7 @@ A comprehensive modernization of all Angular templates to align with Angular v21
* **React packages update:** updated `igniteui-react-core/charts/gauges` to ~19.5.2 and `igniteui-react[-grids]` to ~19.6.0 ([#1567](https://github.com/IgniteUI/igniteui-cli/pull/1567))
* **Web Components packages update:** updated igniteui-webcomponents packages to latest ([#1566](https://github.com/IgniteUI/igniteui-cli/pull/1566))
* **Web Components grid fixes:** corrected component usage and dependencies in grid templates ([#1562](https://github.com/IgniteUI/igniteui-cli/pull/1562))
* **Web Components (`igc-ts`) project template modernization:** updated Vite config, switched from `eslint.config.mjs` to `eslint.config.js`, removed the `web-dev-server.config.mjs` dev server, and refreshed package scripts ([#1609](https://github.com/IgniteUI/igniteui-cli/pull/1609))

---

Expand All @@ -80,6 +84,9 @@ A comprehensive modernization of all Angular templates to align with Angular v21

### Bug Fixes & Maintenance

* **execute:** fixed CLI loading to use the correct local version when a version mismatch between global and local installations is detected ([#1640](https://github.com/IgniteUI/igniteui-cli/pull/1640))
* **templates:** hidden internal base project templates from the available project list in interactive selection ([#1649](https://github.com/IgniteUI/igniteui-cli/pull/1649))
* **mcp:** removed `@next` tag from MCP server NPM package configurations; all scaffolded projects now reference the stable release ([d56d2d7](https://github.com/IgniteUI/igniteui-cli/commit/d56d2d7f8))
* **eslint:** correct config ignores and resolve lint errors ([#1557](https://github.com/IgniteUI/igniteui-cli/pull/1557))
* **lint:** re-enable `no-console` rule ([3ffa07f](https://github.com/IgniteUI/igniteui-cli/commit/3ffa07ff8812e93dd358b38332f3abc2ea955af2))
* **tslint:** cleanup all leftover references to tslint ([#1558](https://github.com/IgniteUI/igniteui-cli/pull/1558))
Expand All @@ -89,7 +96,7 @@ A comprehensive modernization of all Angular templates to align with Angular v21
* **CLI error handling:** added `.fail()` handler to yargs to gracefully handle command validation errors (e.g., missing required subcommands) instead of showing raw stack traces ([#1614](https://github.com/IgniteUI/igniteui-cli/pull/1614))
* **Unknown command detection:** running `ig <unknown>` now prints an error message and available commands instead of silently falling through to the step-by-step interactive mode ([#1614](https://github.com/IgniteUI/igniteui-cli/pull/1614))
* **Unhandled promise rejection:** added `.catch()` in the CLI entry point to catch and display unexpected errors cleanly ([#1614](https://github.com/IgniteUI/igniteui-cli/pull/1614))
* **upgrade-packages:** aligned with React 19.4.0+ licensing migration, now upgrading `igniteui-react-dockmanager` and no longer upgrading `igniteui-react` ([#1641](https://github.com/IgniteUI/igniteui-cli/pull/1641))
* **upgrade-packages:** aligned with React 19.4.0+ licensing migration, now upgrading `igniteui-react-dockmanager` and no longer upgrading `igniteui-react` ([#1638](https://github.com/IgniteUI/igniteui-cli/pull/1638))

---

Expand Down
2 changes: 1 addition & 1 deletion packages/cli/templates/react/igr-ts/grid/basic/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class GridTemplate extends IgniteUIForReactTemplate {
this.projectType = "igr-ts";
this.components = ["Grid"];
this.controlGroup = "Data Grids";
this.packages = ["igniteui-react-grids@~19.6.0"];
this.packages = ["igniteui-react-grids@~19.6.1"];

this.hasExtraConfiguration = false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"servers": {
"igniteui-cli": {
"command": "npx",
"args": ["-y", "igniteui-cli@next", "mcp"]
"args": ["-y", "igniteui-cli", "mcp"]
},
"igniteui-theming": {
"command": "npx",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"@testing-library/react": "^16.3.0",
"element-internals-polyfill": "^3.0.2",
"functions-have-names": "^1.2.3",
"igniteui-react": "~19.6.0",
"igniteui-react": "~19.6.1",
"react": "^19.2.4",
"react-app-polyfill": "^3.0.0",
"react-dom": "^19.2.4",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"servers": {
"igniteui-cli": {
"command": "npx",
"args": ["-y", "igniteui-cli@next", "mcp"]
"args": ["-y", "igniteui-cli", "mcp"]
},
"igniteui-theming": {
"command": "npx",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
},
"dependencies": {
"@vaadin/router": "^2.0.0",
"igniteui-webcomponents": "~7.1.0",
"igniteui-webcomponents": "~7.1.2",
"lit": "^3.3.2"
},
"devDependencies": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"@vaadin/router": "^2.0.0",
"@igniteui/material-icons-extended": "^3.0.2",
"igniteui-dockmanager": "^2.1.0",
"igniteui-webcomponents": "~7.1.0",
"igniteui-webcomponents": "~7.1.2",
"igniteui-webcomponents-charts": "~7.0.0",
"igniteui-webcomponents-core": "~7.0.0",
"igniteui-webcomponents-gauges": "~7.0.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/core/util/mcp-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export interface McpServerEntry {
const IGNITEUI_MCP_SERVERS: Record<string, McpServerEntry> = {
"igniteui-cli": {
command: "npx",
args: ["-y", "igniteui-cli@next", "mcp"]
args: ["-y", "igniteui-cli", "mcp"]
},
"igniteui-theming": {
command: "npx",
Expand Down
12 changes: 6 additions & 6 deletions packages/igniteui-mcp/Specification.md
Original file line number Diff line number Diff line change
Expand Up @@ -222,8 +222,8 @@ Build: Compile the TypeScript source into the `dist/` directory.
"servers": {
"igniteui-cli": {
"command": "npx",
"args": ["-y", "igniteui-cli@next", "mcp"]
},
"args": ["-y", "igniteui-cli", "mcp"]
}
}
}
Comment thread
kdinev marked this conversation as resolved.
```
Expand All @@ -235,8 +235,8 @@ Build: Compile the TypeScript source into the `dist/` directory.
"mcpServers": {
"igniteui-cli": {
"command": "npx",
"args": ["-y", "igniteui-cli@next", "mcp"]
},
"args": ["-y", "igniteui-cli", "mcp"]
}
}
}
Comment thread
kdinev marked this conversation as resolved.
```
Expand All @@ -249,8 +249,8 @@ or `%APPDATA%\Claude\claude_desktop_config.json` (Windows)
"mcpServers": {
"igniteui-cli": {
"command": "npx",
"args": ["-y", "igniteui-cli@next", "mcp"]
},
"args": ["-y", "igniteui-cli", "mcp"]
}
}
}
Comment thread
kdinev marked this conversation as resolved.
```
6 changes: 3 additions & 3 deletions packages/igniteui-mcp/igniteui-doc-mcp/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ Add to `.vscode/mcp.json`:
"servers": {
"igniteui-cli": {
"command": "npx",
"args": ["-y", "igniteui-cli@next", "mcp"]
"args": ["-y", "igniteui-cli", "mcp"]
}
}
}
Expand All @@ -69,7 +69,7 @@ Add to `claude_desktop_config.json`:
"mcpServers": {
"igniteui-cli": {
"command": "npx",
"args": ["-y", "igniteui-cli@next", "mcp"]
"args": ["-y", "igniteui-cli", "mcp"]
}
Comment on lines 69 to 73
Copy link

Copilot AI Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The surrounding text says “If Ignite UI CLI is globally installed …”, but the shown configuration runs the CLI via npx, which does not require a global install (and may even bypass it). Update the wording to match the npx-based instructions, or change the command to use the globally-installed binary if that’s the intent.

Copilot uses AI. Check for mistakes.
}
}
Expand All @@ -84,7 +84,7 @@ Add to Cursor MCP settings:
"mcpServers": {
"igniteui-cli": {
"command": "npx",
"args": ["-y", "igniteui-cli@next", "mcp"]
"args": ["-y", "igniteui-cli", "mcp"]
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion packages/igx-templates/constants.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export const IGNITEUI_ANGULAR_PACKAGE = "igniteui-angular@~21.2.0-rc.2";
export const IGNITEUI_ANGULAR_PACKAGE = "igniteui-angular@~21.2.0";
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
},
"igniteui-cli": {
"command": "npx",
"args": ["-y", "igniteui-cli@next", "mcp"]
"args": ["-y", "igniteui-cli", "mcp"]
},
"igniteui-theming": {
"command": "npx",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"@angular/platform-browser-dynamic": "~21.2.0",
"@angular/router": "~21.2.0",
"hammerjs": "~2.0.8",
"igniteui-angular": "~21.2.0-rc.2",
"igniteui-angular": "~21.2.0",
"minireset.css": "~0.0.7",
"rxjs": "~7.8.1",
"tslib": "~2.8.1",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"@angular/router": "~21.2.0",
"angular-auth-oidc-client": "~21.0.1",
"hammerjs": "~2.0.8",
"igniteui-angular": "~21.2.0-rc.2",
"igniteui-angular": "~21.2.0",
"minireset.css": "~0.0.7",
"rxjs": "~7.8.1",
"tslib": "~2.8.1",
Expand Down
12 changes: 6 additions & 6 deletions packages/ng-schematics/src/cli-config/index_spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -324,7 +324,7 @@ export const appConfig: ApplicationConfig = {

expect(tree.exists(mcpFilePath)).toBeTruthy();
const content = JSON.parse(tree.readContent(mcpFilePath));
expect(content.servers["igniteui-cli"]).toEqual({ command: "npx", args: ["-y", "igniteui-cli@next", "mcp"] });
expect(content.servers["igniteui-cli"]).toEqual({ command: "npx", args: ["-y", "igniteui-cli", "mcp"] });
expect(content.servers["igniteui-theming"]).toEqual({ command: "npx", args: ["-y", "igniteui-theming", "igniteui-theming-mcp"] });
});

Expand All @@ -339,21 +339,21 @@ export const appConfig: ApplicationConfig = {
await runner.runSchematic("cli-config", {}, tree);

const content = JSON.parse(tree.readContent(mcpFilePath));
expect(content.servers["igniteui-cli"]).toEqual({ command: "npx", args: ["-y", "igniteui-cli@next", "mcp"] });
expect(content.servers["igniteui-cli"]).toEqual({ command: "npx", args: ["-y", "igniteui-cli", "mcp"] });
expect(content.servers["igniteui-theming"]).toEqual({ command: "npx", args: ["-y", "igniteui-theming", "igniteui-theming-mcp"] });
});

it("should add missing igniteui-theming server if only igniteui is already present", async () => {
tree.create(mcpFilePath, JSON.stringify({
servers: {
"igniteui-cli": { command: "npx", args: ["-y", "igniteui-cli@next", "mcp"] }
"igniteui-cli": { command: "npx", args: ["-y", "igniteui-cli", "mcp"] }
}
}));

await runner.runSchematic("cli-config", {}, tree);

const content = JSON.parse(tree.readContent(mcpFilePath));
expect(content.servers["igniteui-cli"]).toEqual({ command: "npx", args: ["-y", "igniteui-cli@next", "mcp"] });
expect(content.servers["igniteui-cli"]).toEqual({ command: "npx", args: ["-y", "igniteui-cli", "mcp"] });
expect(content.servers["igniteui-theming"]).toEqual({ command: "npx", args: ["-y", "igniteui-theming", "igniteui-theming-mcp"] });
});

Expand All @@ -367,15 +367,15 @@ export const appConfig: ApplicationConfig = {
await runner.runSchematic("cli-config", {}, tree);

const content = JSON.parse(tree.readContent(mcpFilePath));
expect(content.servers["igniteui-cli"]).toEqual({ command: "npx", args: ["-y", "igniteui-cli@next", "mcp"] });
expect(content.servers["igniteui-cli"]).toEqual({ command: "npx", args: ["-y", "igniteui-cli", "mcp"] });
expect(content.servers["igniteui-theming"]).toEqual({ command: "npx", args: ["-y", "igniteui-theming", "igniteui-theming-mcp"] });
});

it("should not modify .vscode/mcp.json if both servers are already present", async () => {
const existing = {
servers: {
"angular-cli": { command: "npx", args: ["-y", "@angular/cli", "mcp"] },
"igniteui-cli": { command: "npx", args: ["-y", "igniteui-cli@next", "mcp"] },
"igniteui-cli": { command: "npx", args: ["-y", "igniteui-cli", "mcp"] },
"igniteui-theming": { command: "npx", args: ["-y", "igniteui-theming", "igniteui-theming-mcp"] }
}
};
Expand Down
2 changes: 1 addition & 1 deletion packages/ng-schematics/src/ng-new/index_spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ describe("Schematics ng-new", () => {

expect(e.exists(mcpFilePath)).toBeTruthy();
const content = JSON.parse(e.readContent(mcpFilePath));
expect(content.servers["igniteui-cli"]).toEqual({ command: "npx", args: ["-y", "igniteui-cli@next", "mcp"] });
expect(content.servers["igniteui-cli"]).toEqual({ command: "npx", args: ["-y", "igniteui-cli", "mcp"] });
expect(content.servers["igniteui-theming"]).toEqual({ command: "npx", args: ["-y", "igniteui-theming", "igniteui-theming-mcp"] });
});
});
Expand Down
2 changes: 1 addition & 1 deletion spec/unit/ai-config-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import * as aiConfig from "../../packages/cli/lib/commands/ai-config";

const IGNITEUI_SERVER_KEY = "igniteui-cli";
const IGNITEUI_THEMING_SERVER_KEY = "igniteui-theming";
const igniteuiServer = { command: "npx", args: ["-y", "igniteui-cli@next", "mcp"] };
const igniteuiServer = { command: "npx", args: ["-y", "igniteui-cli", "mcp"] };
const igniteuiThemingServer = { command: "npx", args: ["-y", "igniteui-theming", "igniteui-theming-mcp"] };

function createMockFs(existingContent?: string): IFileSystem {
Expand Down
Loading