
Angular Language Service (`Angular.ng-template`) v22.0.1 — the official Google/Angular Team VS Code extension — shipped June 11, 2026 with two headline features: 19 individually-configurable inlay hint settings that annotate template binding types inline, and Document Symbols support that makes `@if`/`@for` blocks and template references visible in VS Code's Outline panel. The release also bundles TypeScript 6.0 with strict mode on by default and patches a Critical-severity RCE vulnerability fixed in v21.2.4.
Angular.ng-template) shipped v22.0.1 on June 11, 2026 — a patch on the June 3 major release that brought two features Angular developers have been asking about for years: 19 individually-configurable inlay hints for Angular templates, and Document Symbols support that makes @if, @for, and template references appear in the VS Code Outline panel. 1Angular.ng-template · Publisher: Angular Team (Google) · Version: v22.0.1 (2026-06-11) · IDE: VS Code · Language: Angular (HTML templates + inline templates) · License: MIT · Install from VS Code Marketplace.html external templates and inline templates in .ts files. Without it, VS Code treats @if (user$ | async; as user) as generic HTML with zero type awareness. With it, you get completions scoped to your component's interface, AOT-level diagnostics in the editor (the same errors the compiler would catch at build time), hover info, and Go to Definition that jumps into the component class. 1tsconfig.json with angularCompilerOptions present. For full type checking, the Angular team recommends setting "strictTemplates": true in that block. 1
(click)="onSave($event)" with no visual hint about what $event actually is. v22.0.0 changes that with a full angular.inlayHints.* namespace — 19 settings, all off by default, each targeting a specific annotation context. 1// .vscode/settings.json
{
"angular.inlayHints.forLoopVariableTypes": true,
"angular.inlayHints.ifAliasTypes": "complex",
"angular.inlayHints.letDeclarationTypes": true,
"angular.inlayHints.propertyBindingTypes": true,
"angular.inlayHints.eventParameterTypes": true,
"angular.inlayHints.interactiveInlayHints": true
}forLoopVariableTypes: true enabled, a template like this:@for (item of products$; track item.id) {
<product-card [product]="item" />
}item — typically something like : Product — without you opening a hover tooltip. The ifAliasTypes: "complex" option only shows the annotation when the aliased expression is non-trivial, keeping simple cases clean. 1interactiveInlayHints: true setting makes those annotations clickable — clicking one navigates to the type definition, turning inlay hints into a lightweight navigation mechanism for deeply nested template expressions. 1"editor.inlayHints.enabled": "on" globally, then dial back by enabling only the hints that proved useful for your typical work. To kill all Angular hints in one shot, set "editor.inlayHints.enabled": "off" — this silences all editor-wide inlay hints, so coordinate with your team before committing it to workspace settings.Ctrl+Shift+O / Cmd+Shift+O) understand Angular template structure. Before v22, the Outline showed component class members but was silent about what lived inside the template. 3angular.documentSymbols.enabled: true (the default), a component with an inline template renders in the Outline as a nested tree:MyDashboardComponent (class)
└── (template)
├── @if (isLoaded)
│ └── dashboard-grid
└── @for (widget of widgets)
└── widget-cardangular.documentSymbols.showImplicitForVariables option (default: false) adds the implicit @for loop variables to the symbol tree — $index, $count, $first, $last, $even, $odd — useful when you're debugging a template that references these and can't immediately remember which implicit variable does what. 1angular/angular monorepo (100k+ stars, 27.2k forks):strict mode by default. If your project previously relied on the extension's bundled TypeScript being lenient, you may see new type errors surface in your templates after upgrading. The fix is explicit: set "strict": false in your tsconfig.json if you're not ready for strict mode, or address the new errors. 3typescript.tsdk or js/ts.tsdk.path in your VS Code settings. Loading TypeScript from an external path risks an API version mismatch between what @angular/language-service expects and what VS Code provides — the extension silently breaks in that scenario. The safest path is to let the extension use its bundled copy. 1Angular.ng-template versions below v21.2.4. Two attack vectors were reported: 4tsdk path loading: The extension read tsdk-related paths from .vscode/settings.json without validating workspace trust, then passed those paths directly to the background Node.js language server. A crafted repository could include a malicious tsserverlibrary.js pointed to by workspace settings — the extension would load and execute it silently when the folder was opened, without any user interaction. 5tsdk paths to absolute paths before passing them to the language server. 4
Angular.ng-template, and confirm the version reads 22.0.1 (or at minimum 21.2.4). Auto-update should have already handled this, but extensions with auto-update disabled or managed via .vsix files may have missed it. 6| Extension ID | Angular.ng-template |
| Latest version | v22.0.1 (2026-06-11) |
| IDE | VS Code |
| Target language | Angular (HTML templates + TypeScript inline templates) |
| Plain HTML support | No — Angular templates only |
| Bundled TypeScript | 6.0 (strict mode on by default in v22) |
| Additional editor support | Neovim/Vim via coc-angular; Eclipse via Wild Web Developer; Emacs via lsp-mode |
| Required project config | tsconfig.json with angularCompilerOptions |
| Recommended template config | "strictTemplates": true in angularCompilerOptions |
| Pricing | Free, MIT license |
| Security: safe version | ≥ v21.2.4 (GHSA-ccq4-xmxr-8hcq patched) |
settings.json update even for developers who already had the extension installed and forgot about it. 1marketplace.visualstudio.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.