Skip to main content
skill Claude Code CX Codex Cursor GitHub Copilot

reference-compiler-cli — Claude Code skill: Angular Compiler

A skill explaining how Angular Compiler (ngtsc) works internally: decorator compilation, the traits system, and code transformation. Use it when working with packages/compiler-cli.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add angular/angular --skill reference-compiler-cli -a claude-code
Open on GitHub

What reference-compiler-cli does

Angular Compiler CLI (ngtsc) wraps the TypeScript compiler to add Angular-specific features. Its job: convert decorators like @Component, @Directive, @Pipe into static class properties (Ivy instructions such as static ɵcmp = ...), perform template type checking, and compile ahead-of-time.

The compiler rests on three core ideas. First, the traits system: each class with an Angular decorator moves through states (Pending → Analyzed → Resolved → Skipped). Second, lazy analysis—processing only runs when diagnostics or emit are needed. Third, Output AST—an intermediate format that translates to TypeScript AST during emit.

Several subsystems work together. TraitCompiler manages trait lifecycles; DecoratorHandlers (ComponentDecoratorHandler, DirectiveDecoratorHandler, etc.) extract metadata and generate Ivy instructions. TemplateTypeChecker builds Type Check Blocks—TypeScript code that tsc can verify for errors. ComponentScopeReader figures out which directives and pipes a component can use. The whole pipeline runs through phases: Construction → Analysis → Resolution → Type Checking → Emit.

What it helps with

  • understand Angular Compiler architecture when modifying packages/compiler-cli
  • grasp the mental model of decorator compilation and code transformation
  • trace how the traits system and dependency resolution work
  • learn how Type Check Blocks are generated for template type checking

Example prompts for the agent

  • Explain the architecture of `packages/compiler-cli` before I start editing ComponentDecoratorHandler
  • Using reference-compiler-cli, walk me through how directives are resolved in a template
  • Apply this skill to help me understand the traits system and compilation phases

How to install reference-compiler-cli

1Skills CLI (Vercel)

npx skills add angular/angular --skill reference-compiler-cli -a claude-code

2Manually: put the files in place

~/.claude/skills/reference-compiler-cli/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/reference-compiler-cli/

From the same set4

The whole set →

Similar

contact-research official anthropics Retrieves enriched contact profiles from Common Room by email, social handle, or name. Helps assess buyer engagement and uncover relevant conversation starters. Claude Code CX Codex Cursor +1 2,900installs prospect official anthropics Turns an ICP description into a ranked table of decision-maker leads with emails and phone numbers. One command runs the full pipeline from customer profile to enriched contacts. Claude Code CX Codex Cursor +1 2,900installs iii-error-handling iii-hq Skill teaches agents to read iii engine and SDK error codes, tell network failures from access denials, know when it is safe to retry. Use it when calling remote functions from Node, Python, Rust, or browser code. Claude Code CX Codex Cursor +1 4,000installs creative-director nexu-io This skill takes a creative concept from brief to presentation and checks it on three axes. Use it for campaign ideas and creative critique. Claude Code CX Codex Cursor +1 3,400installs create-cowork-plugin official anthropics This skill guides plugin creation from the first idea to a packaged .plugin file. Use it when you need to design a new plugin from scratch. Claude Code CX Codex Cursor +1 2,800installs receipts official Anthropic Generates a personal Claude Code activity report from local session transcripts — for justifying spend to a manager or self-review. Claude Code 2,052installs setup-matt-pocock-skills Matt Pocock This skill configures a repository for Matt Pocock's engineering skills by setting its issue tracker, triage labels, and domain docs layout. Run it before using the other skills. Claude Code 1,052,851installs to-tickets Matt Pocock Turns a plan, spec, or conversation into small end-to-end tickets with explicit blockers. Use it to agree on the work breakdown before tickets go to a tracker. Claude Code 711,230installs

Questions about reference-compiler-cli

How do I install reference-compiler-cli for Claude Code?

Run npx skills add angular/angular --skill reference-compiler-cli -a claude-code. The skill will be available at ~/.claude/skills/reference-compiler-cli/SKILL.md.

What does reference-compiler-cli do?

It explains the mental model and architecture of Angular Compiler (ngtsc): the traits system, decorator handlers, Ivy instruction generation, template type checking, and AST transformation. Use it before working on code in packages/compiler-cli.

What are the main subsystems in Angular Compiler?

Key subsystems include NgtscProgram (public API wrapping ts.Program), TraitCompiler (manages trait lifecycles), DecoratorHandlers (extract metadata for each decorator type), TemplateTypeChecker (creates Type Check Blocks), ComponentScopeReader (determines available directives and pipes), and ivyTransformFactory (transforms AST during emit).

Source text

SKILL.md · MIT
---
name: reference-compiler-cli
description: Explains the mental model and architecture of the code under `packages/compiler-cli`. You MUST use this skill any time you plan to work with code in `packages/compiler-cli`
---

# Angular Compiler CLI (`ngtsc`) Architecture

## Overview

The `packages/compiler-cli` package contains the Angular Compiler (Ivy), often referred to as `ngtsc`. It is a wrapper around the TypeScript compiler (`tsc`) that extends it with Angular-specific capabilities.

The core goal of `ngtsc` is to compile Angular decorators (like `@Component`, `@Directive`, `@Pipe`) into static properties on the class (Ivy instructions, e.g., `static ɵcmp = ...`). It also performs template type checking and ahead-of-time (AOT) compilation.

## Mental Model

The compiler is designed as a **lazy, incremental, and partial** compilation pipeline.

1.  **Wrapper Pattern**: `NgtscProgram` wraps the standard `ts.Program`. It intercepts calls to act as a drop-in replacement for standard tooling.
2.  **Traits System**: Every class with an Angular decorator is considered a "Trait". The compiler manages the state of these traits through a state machine:
    - **Pending**: Detected but not processed.
    - **Analyzed**: Metadata extracted, template parsed (but dependencies not yet linked).
    - **Resolved**: Dependencies (directives/pipes in template) resolved, import cycles handled.
    - **Skipped**: Not an Angular class.
3.  **Lazy Analysis**: Analysis only happens when necessary (e.g., when diagnostics are requested or emit is prepared).
4.  **Output AST**: The compiler generates an intermediate "Output AST" (`o.Expression`) for the generated code, which is then translated into TypeScript AST nodes during the emit phase.

## Key Subsystems

### 1. Core Orchestration (`ngtsc/core`)

- **`NgtscProgram`**: The public API implementing `api.Program`. It manages the `ts.Program` and the `NgCompiler`.
- **`NgCompiler`**: The brain of the compiler. It orchestrates the compilation phases (Analysis, Resolution, Type Checking, Emit). It holds the `TraitCompiler`.

### 2. Trait Compilation (`ngtsc/transform`)

- **`TraitCompiler`**: Manages the lifecycle of "Traits". It iterates over source files, identifies decorated classes, and delegates to the appropriate `DecoratorHandler`.
- **`Trait`**: A state container for a class, holding its handler, analysis results, and resolution results.

### 3. Decorator Handlers (`ngtsc/annotations`)

- **`DecoratorHandler`**: An interface for handling specific decorators.
- **`ComponentDecoratorHandler`**: The most complex handler. It:
  - Extracts metadata (selector, inputs, outputs).
  - Parses the template.
  - Resolves used directives and pipes (`R3TargetBinder`).
  - Generates the `ɵcmp` instruction.
- **`DirectiveDecoratorHandler`**, **`PipeDecoratorHandler`**, **`NgModuleDecoratorHandler`**: Handle their respective decorators.

### 4. Template Type Checking (`ngtsc/typecheck`)

- **`TemplateTypeChecker`**: Generates "Type Check Blocks" (TCBs). A TCB is a block of TypeScript code that represents the template's logic in a way `tsc` can understand and check for errors.
- **`generateTypeCheckBlock`** (from `@angular/compiler`, called by `TypeCheckFile` and `InlineTcbOp`): Generates TypeScript source for checking template bindings, events, directive usage, and host bindings.

### 5. Metadata & Scope (`ngtsc/metadata`, `ngtsc/scope`)

- **`MetadataReader`**: Reads Angular metadata from source files (using `LocalMetadataRegistry`) and `.d.ts` files (using `DtsMetadataReader`).
- **`ComponentScopeReader`**: Determines the "compilation scope" of a component (which directives/pipes are available to it), handling `NgModule` transitive exports and Standalone Component imports.

### 6. Emit & Transformation (`ngtsc/transform`)

- **`ivyTransformFactory`**: A TypeScript transformer factory.
- **`IvyCompilationVisitor`**: Visits classes, triggers compilation via `TraitCompiler`, and collects the Output AST.
- **`IvyTransformationVisitor`**: Translates the Output AST into TypeScript AST, injects the `static ɵ...` fields, and removes the original decorators.

## Compilation Phases

1.  **Construction**: `NgtscProgram` creates `NgCompiler`, which sets up all registries and the `TraitCompiler`.
2.  **Analysis** (`analyzeSync`):
    - The `TraitCompiler` scans files.
    - `DecoratorHandler`s extract metadata and parse templates.
    - No cross-file resolution happens here (allowing for parallelism and caching).
3.  **Resolution** (`resolve`):
    - `TraitCompiler` resolves traits.
    - Components link their templates to specific Directives and Pipes (found via `ComponentScopeReader`).
    - Import cycles are detected and handled (e.g., via "remote scoping").
4.  **Type Checking**:
    - `TemplateTypeChecker` creates TCBs for all components.
    - TypeScript diagnostics are retrieved for these TCBs.
5.  **Emit** (`prepareEmit`):
    - `ivyTransformFactory` is created.
    - TS `emit` is called.
    - The transformers run, injecting the compiled Ivy instructions into the JS/DTS output.

## Important File Locations

- `packages/compiler-cli/src/ngtsc/program.ts`: Entry point (`NgtscProgram`).
- `packages/compiler-cli/src/ngtsc/core/src/compiler.ts`: Core logic (`NgCompiler`).
- `packages/compiler-cli/src/ngtsc/transform/src/trait.ts`: Trait state machine.
- `packages/compiler-cli/src/ngtsc/annotations/component/src/handler.ts`: Component compilation logic.
- `packages/compiler-cli/src/ngtsc/typecheck/src/checker.ts`: Type checking logic (`TemplateTypeCheckerImpl`).
- `packages/compiler-cli/src/ngtsc/transform/src/transform.ts`: AST transformation logic.

© angular · MIT · angular/angular

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor