2026-10-11 17:09 UTC

The Angular team merges a Rust-based hybrid preprocessor (NGP) with a Rust AST analyzer and Wasm target into the compiler-cli, marking the first major JavaScript/TypeScript toolchain to ship a Rust compiler component to main.

state: watchingheat: highuncertainty: mediumnovelscott: lowrust-migration angular compiler toolchainatscottcrisbetoAngular team

What is this?

The Angular team has merged a Rust-based hybrid preprocessor (NGP) into compiler-cli, using Oxc for AST analysis and targeting Wasm for browser environments. The PR introduces a hybrid architecture where Rust/Oxc analyze components, directives, and dependencies while decoupling transforms from TypeScript β€” positioning Angular for TypeScript 7 support. Key contributors include atscott and crisbeto. The snippets confirm the merge and architecture but are thin on the exact Bazel/Cargo hermetic tooling details and whether this is the first major JS/TS toolchain to ship a Rust compiler component to main (competing claims exist around VoidZero's experimental Oxc Angular compiler).

Why it matters to Scott

No intersection found in Scott's canon β€” his wikis carry no pages on Angular, Rust-in-JS-toolchains, or compiler-cli architecture. The radar has tracked rust-migration, wasm, and developer-tooling concepts, but those are radar's own bookkeeping, not Scott's positions. This is a significant developer-tool event (first major JS/TS framework shipping Rust compiler component to main), but without a Scott-authored position on Rust migration strategy or compiler architecture, it does not bear on what he builds or argues.
radar:concept.rust-migrationradar:concept.wasmradar:concept.developer-toolingradar:concept.rustradar:concept.llm-tooling
queries asked of Scott's wikis
  • rust-migration toolchain strategy hermetic builds Bazel Cargo
  • hybrid compiler architecture Rust TypeScript Wasm Oxc
  • compiler-cli integration patterns for AI-assisted development
  • Wasm compilation targets for developer tooling browser environments
  • first-mover Rust compiler component in major JS framework

Measured heat

now 0 pts/hpeak 2 pts/hcomments 0/hpeers p37momentum: steady1 platformsage 23h
points/hour across evidence Β· reading as of 2026-10-12 02:59:37.977291+11:00 Β· deterministic, not a model opinion

How the heat travelled

10-10 17:18⭐ origin directly observedAngular compiler rewritten in Rust, PR merged to main
torsi0n on hacker news
β€”
10-10 17:18amplified on hacker news πŸ‘‘hn.story.50035023
torsi0n
peak 2 Β· 0 comments Β· 98% of case engagement
10-10 18:36our radar first saw it Β· +1.3hdiscovery anchor: hn.story.50035023β€”
10-10 19:40reached heat=high Β· +2.4h Β· via queue+ledgerβ€”β€”
pace: p35 vs 923 stories at the 12h mark (now 23h old) β€” ahead of aafp-commons-signed-agent-notebook (2.0x), behind agent-chaperone-jev-tool-screening (0.7x)

Evidence (1) β€” ⭐ canonical anchor

sourceobjectauthorscorecomments
🟧 hn ⭐Angular compiler rewritten in Rust, PR merged to main
Retrieved article excerpt

Open article Β· Retrieved 2026-10-10T18:48:04.377465+00:00

## Repository navigation



# refactor(compiler-cli): integrate hybrid preprocessor into compiler-cli - #71259

#71259

Merged

[crisbeto](https://github.com/crisbeto) merged 1 commit into

[angular:main](https://github.com/angular/angular/tree/main)angular/angular:mainfrom 

[atscott:feat/compiler-cli-preprocessor](https://github.com/atscott/angular/tree/feat/compiler-cli-preprocessor)atscott/angular:feat/compiler-cli-preprocessorCopy head branch name to clipboard

Oct 8, 2026

Merged

## [refactor(compiler-cli): integrate hybrid preprocessor into compiler-cli](https://github.com/angular/angular/pull/71259#top)#71259 [crisbeto](https://github.com/crisbeto) merged 1 commit into [angular:main](https://github.com/angular/angular/tree/main)angular/angular:mainfrom [atscott:feat/compiler-cli-preprocessor](https://github.com/atscott/angular/tree/feat/compiler-cli-preprocessor)atscott/angular:feat/compiler-cli-preprocessorCopy head branch name to clipboard

## Conversation

[@atscott](https://github.com/atscott)

### @atscott **[atscott](https://github.com/atscott)** commented [Oct 8, 2026](https://github.com/angular/angular/pull/71259#issue-5765047618) β€’ edited Loading Uh oh! There was an error while loading. [Please reload this page](https://github.com/angular/angular/pull/71259).

Copy link
 

Copy Markdown

Contributor

Integrate the hybrid Angular preprocessor (NGP) under packages/compiler-cli/preprocessor, along with its language service integration, VS Code extension, and Rust/Wasm Bazel toolchain.

Key components included:

- Rust-based AST analyzer and Wasm compilation target (packages/compiler-cli/preprocessor/ng-analyze)
- Preprocessor engine and Jasmine test suites (packages/compiler-cli/preprocessor)
- Language service extension and specs (packages/compiler-cli/preprocessor/language-service)
- Experimental VS Code extension (ngp-vscode-ng-language-service)
- Rust toolchain and crate dependencies in Bazel (MODULE.bazel, Cargo.toml)

Monorepo integration & compatibility adjustments:

- Rust toolchain & hermetic Bazel testing: Made N-API optional (default = [] in Cargo.toml) and  
  added non-NAPI fallback methods on Analyzer and TestAnalyzer (analyzer.rs, test\_analyzer.rs,  
  lib.rs) for native Bazel rust\_test and Wasm compilation; replaced static Cargo.toml lookups in  
  fs.rs tests with hermetic tempfile fixtures for Bazel sandbox execution; updated driver test  
  fixture for Option local\_name.
- Angular monorepo TypeScript & linting compliance: Added tslint:disable:no-console pragmas to CLI  
  entrypoints (main.ts, ngp.ts); added explicit override modifiers (output\_ast\_printer.ts); aligned  
  TypeScript ESM imports (tcb\_ls\_util.ts); and consolidated compiler imports and type references  
  (processor.ts, hybrid\_compiler.ts).

[@angular-robot](https://github.com/apps/angular-robot)
[angular-robot](https://github.com/apps/angular-robot)
Bot
added
[detected: feature](https://github.com/angular/angular/issues?q=state%3Aopen%20label%3A%22detected%3A%20feature%22)
PR contains a feature commit
[area: compiler](https://github.com/angular/angular/issues?q=state%3Aopen%20label%3A%22area%3A%20compiler%22)
Issues related to `ngc`, Angular's template compiler
labels
[Oct 8, 2026](https://github.com/angular/angular/pull/71259#event-32804815069)

[@ngbot](https://github.com/apps/ngbot)
[ngbot](https://github.com/apps/ngbot)
Bot
modified the milestone:
[Backlog](https://github.com/angular/angular/milestone/82)
[Oct 8, 2026](https://github.com/angular/angular/pull/71259#event-32804820166)

[@atscott](https://github.com/atscott)
[atscott](https://github.com/atscott)
changed the title
~~feat(compiler-cli): integrate hybrid preprocessor into compiler-cli~~
refactor(compiler-cli): integrate hybrid preprocessor into compiler-cli
[Oct 8, 2026](https://github.com/angular/angular/pull/71259#event-32805568855)

[@atscott](https://github.com/atscott)

[atscott](https://github.com/atscott)
[force-pushed](https://github.com/angular/angular/compare/15325074f8b7784a40fb94aef9acbc8634f889e1..a1ed175a7b4078a4aaf4b4312234b4e75a61c2ed)
the

feat/compiler-cli-preprocessor
branch
4 times, most recently
from
[`1532507`](https://github.com/angular/angular/commit/15325074f8b7784a40fb94aef9acbc8634f889e1) to
[`a1ed175`](https://github.com/angular/angular/commit/a1ed175a7b4078a4aaf4b4312234b4e75a61c2ed)  [Compare](https://github.com/angular/angular/compare/15325074f8b7784a40fb94aef9acbc8634f889e1..a1ed175a7b4078a4aaf4b4312234b4e75a61c2ed)
[October 8, 2026 17:53](https://github.com/angular/angular/pull/71259#event-32812583312)

[crisbeto](https://github.com/crisbeto)

**[crisbeto](https://github.com/crisbeto)**
approved these changes
[Oct 8, 2026](https://github.com/angular/angular/pull/71259#pullrequestreview-5461113749)

[View reviewed changes](https://github.com/angular/angular/pull/71259/files)

[@atscott](https://github.com/atscott) [@mattrbeck](https://github.com/mattrbeck)[@alxhub](https://github.com/alxhub) [@crisbeto](https://github.com/crisbeto) [@JoostK](https://github.com/JoostK) [@JeanMeche](https://github.com/JeanMeche)

`refactor(compiler-cli): integrate hybrid preprocessor into compiler-cli`

 …

`dac7269`

```
Integrate the hybrid Angular preprocessor (NGP) under packages/compiler-cli/preprocessor,
along with its language service integration, VS Code extension, and Rust/Wasm Bazel toolchain.

Key components included:
- Rust-based AST analyzer and Wasm compilation target (packages/compiler-cli/preprocessor/ng-analyze)
- Preprocessor engine and Jasmine test suites (packages/compiler-cli/preprocessor)
- Language service extension and specs (packages/compiler-cli/preprocessor/language-service)
- Experimental VS Code extension (ngp-vscode-ng-language-service)
- Rust toolchain and crate dependencies in Bazel (MODULE.bazel, Cargo.toml)

Monorepo integration & compatibility adjustments:
- Rust toolchain & hermetic Bazel testing: Made N-API optional (default = [] in Cargo.toml) and
  added non-NAPI fallback methods on Analyzer and TestAnalyzer (analyzer.rs, test_analyzer.rs,
  lib.rs) for native Bazel rust_test and Wasm compilation; replaced static Cargo.toml lookups in
  fs.rs tests with hermetic tempfile fixtures for Bazel sandbox execution; updated driver test
  fixture for Option<String> local_name.
- Angular monorepo TypeScript & linting compliance: Added tslint:disable:no-console pragmas to CLI
  entrypoints (main.ts, ngp.ts); added explicit override modifiers (output_ast_printer.ts); aligned
  TypeScript ESM imports (tcb_ls_util.ts); and consolidated compiler imports and type references
  (processor.ts, hybrid_compiler.ts).

Co-authored-by: Matthew Beck <[email protected]>
Co-authored-by: Alex Rickabaugh <[email protected]>
Co-authored-by: Kristiyan Kostadinov <[email protected]>
Co-authored-by: JoostK <[email protected]>
Co-authored-by: Matthieu Riegler <[email protected]>
```

[@atscott](https://github.com/atscott)

[atscott](https://github.com/atscott)
[force-pushed](https://github.com/angular/angular/compare/a1ed175a7b4078a4aaf4b4312234b4e75a61c2ed..dac7269f6ecf3302558f501fd2d8503a66e328e0)
the

feat/compiler-cli-preprocessor
branch
from
[`a1ed175`](https://github.com/angular/angular/commit/a1ed175a7b4078a4aaf4b4312234b4e75a61c2ed) to
[`dac7269`](https://github.com/angular/angular/commit/dac7269f6ecf3302558f501fd2d8503a66e328e0)  [Compare](https://github.com/angular/angular/compare/a1ed175a7b4078a4aaf4b4312234b4e75a61c2ed..dac7269f6ecf3302558f501fd2d8503a66e328e0)
[October 8, 2026 18:34](https://github.com/angular/angular/pull/71259#event-32815505458)

[@atscott](https://github.com/atscott)

[atscott](https://github.com/atscott)
marked this pull request as ready for review
[October 8, 2026 18:49](https://github.com/angular/angular/pull/71259#event-32816516866)

[@pullapprove](https://github.com/apps/pullapprove)

[pullapprove](https://github.com/apps/pullapprove)
Bot
requested a review
from [josephperrott](https://github.com/josephperrott)
[October 8, 2026 18:49](https://github.com/angular/angular/pull/71259#event-32816544793)

[@crisbeto](https://github.com/crisbeto)
[crisbeto](https://github.com/crisbeto)
added
[action: merge](https://github.com/angular/angular/issues?q=state%3Aopen%20label%3A%22action%3A%20merge%22)
The PR is ready for merge by the caretaker
[target: patch](https://github.com/angular/angular/issues?q=state%3Aopen%20label%3A%22target%3A%20patch%22)
This PR is targeted for the next patch release
[target: minor](https://github.com/angular/angular/issues?q=state%3Aopen%20label%3A%22target%3A%20minor%22)
This PR is targeted for the next minor release
and removed
[target: patch](https://github.com/angular/angular/issues?q=state%3Aopen%20label%3A%22target%3A%20patch%22)
This PR is targeted for the next patch release
labels
[Oct 8, 2026](https://github.com/angular/angular/pull/71259#event-32826601546)

Hide details
View details

[@crisbeto](https://github.com/crisbeto)

[crisbeto](https://github.com/crisbeto)
merged commit [`4e4ad75`](https://github.com/angular/angular/commit/4e4ad75144e55538cedc65f0ac3ff5b68cb34ce9)
into

angular:main
[Oct 8, 2026](https://github.com/angular/angular/pull/71259#event-32826770256)

25 of 30 checks passed

### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/angular/angular/pull/71259).

[@crisbeto](https://github.com/crisbeto)

### **[crisbeto](https://github.com/crisbeto)** commented [Oct 8, 2026](https://github.com/angular/angular/pull/71259#issuecomment-6069327704)

Copy link
 

Copy Markdown

Member

|  |
| --- |
| This PR was merged into the repository. The changes were merged into the following branches:   - main: [4e4ad75](https://github.com/angular/angular/commit/4e4ad75144e55538cedc65f0ac3ff5b68cb34ce9) |

[@Jordan-Hall](https://github.com/Jordan-Hall)
[Jordan-Hall](https://github.com/Jordan-Hall)
mentioned this pull request
[Oct 9, 2026](https://github.com/angular/angular/pull/71259#ref-pullrequest-5780983728)

[feat(core-macro): add Angular-style template macro
Jordan-Hall/dioxus#1](https://github.com/Jordan-Hall/dioxus/pull/1)

Open

[xizhou0606](https://github.com/xizhou0606)
pushed a commit
to xizhou0606/ai-interview-experience
that referenced
this pull request
[Oct 10, 2026](https://github.com/angular/angular/pull/71259#ref-commit-162a2da)

liushurui

`Add Oct 10 tech news (incremental scan window 15:03-18:00 UTC Oct 10 …`

…

`162a2da`

```
…after e34403a's 14:00-15:03 coverage end, its feeds pulled 15:02-15:03; this session's feeds pulled 18:00-18:14 UTC with retries): Angular merged its Rust/Wasm hybrid preprocessor (NGP) into the compiler CLI (primary github.com/angular/angular/pull/71259 verified via the GitHub API - title 'refactor(compiler-cli): integrate hybrid preprocessor into compiler-cli', authored by Angular core's atscott, merged into main by crisbeto at 2026-10-08T21:23:49Z, labels action: merge / area: compiler / target: minor, 2239 files changed +372603 -18): the PR integrates the hybrid Angular preprocessor under packages/compiler-cli/preprocessor with a Rust-based AST analyzer and Wasm compilation target (packages/compiler-cli/preprocessor/ng-analyze), the preprocessor engine and Jasmine suites, language-service extension and specs, an experimental VS Code extension (ngp-vscode-ng-language-service), and a Rust toolchain with hermetic Bazel/Cargo wiring; discovered via HN submission 17:18:57Z 2p 0c id 50035023 titled 'Angular compiler rewritten in Rust, PR merged to main' - the HN title overstates (the PR integrates a hybrid preprocessor with a Rust AST analyzer, it is not a full compiler rewrite) and the entry copy follows the PR itself; gap-fill disclosure: the merge is Oct 8 21:23Z but no prior session could have seen it - no feed in the standing 45 set carries angular PRs (angular.dev/blog fetched this session carries no related post, so the PR is the canonical source), no HN submission existed through e34403a's 15:01:34Z sweep end per their record
torsi0n20

Interpretation history

Decision trace