As of today, what is the current stable Angular version (22.2.x was seen on npm), what is the recommended way to produce a fully prerendered static site with the Angular CLI (application builder, SSR with prerender routes, no server at runtime), and which modern features are worth showcasing visibly in a small personal site: zoneless, signals and signal forms, deferrable views, incremental hydration, the resource API, control flow. Also: what is the right way to host a three.js canvas component inside a prerendered Angular page (client-only rendering, afterNextRender, dynamic import), and any known pitfalls with the neon sign component's approach. Primary sources: angular.dev, the Angular GitHub releases, the CLI docs. The finding should be concrete enough that the stack ticket can be decided from it without further reading.
Current Angular version and the showcase feature set
Question
Answer
Resolved 2026-10-14 by a research subagent. Findings: branch research/angular-current-setup, file research/angular-current-setup.md. Worktree at ~/Projects/rryter.ch-research-angular. Caveat: blog.angular.dev blocks automated fetches, so stability claims come from angular.dev (events/v22, roadmap) and the CHANGELOG.
- Version: Angular 22.2.2 is latest (published 2026-10-08). Angular is on a 12-month major cadence: v22.3 around Nov 2026, v23 around June 2027. TypeScript 6.0, Node 22.22+/24/26.
- Scaffold:
ng new rryter-ch --ssr --zoneless --style=css --test-runner=vitest; zoneless, Vitest, standalone, strict and the 2025 file naming are defaults. Then set"outputMode": "static"in angular.json and delete thessrblock andsrc/server.ts. - Prerender:
app.routes.server.tswith{ path: '**', renderMode: RenderMode.Prerender }; unparameterised routes are discovered automatically.RenderMode.Serveris a build error in static mode. - Output: deploy
dist/rryter-ch/browser/(one<route>/index.htmlper route,index.csr.htmlshell,prerendered-routes.json). Nothing runs at request time, so hosting stays an open choice. - Stable and worth showing: signals,
resource()/httpResource()(stable in v22), Signal Forms (@angular/forms/signals, stable in v22), control flow,@defer, incremental hydration (default withprovideClientHydration()in v22). Zoneless default since v21, OnPush default since v22 (mention in a "built with" line).@boundaryis developer preview in v22.2; no selectorless authoring format has shipped. - three.js inside a prerendered page: keep the neon-sign component as is (
afterNextRender+ dynamicimport()never runs at prerender time, static template so no hydration mismatch). Host it as@defer (hydrate on viewport) { <twy-neon-sign/> } @placeholder { <img poster> }so the poster is in the prerendered HTML and three.js stays lazy. - Pitfalls: stacking context for the
z-index:-1canvas; canvas background must equal the page colour (opaque canvas with 50 % bleed); keep the destroyed guard around the async import; no platform checks in templates; headless Chromium may lack WebGL in e2e (--use-gl=angle --use-angle=swiftshader, or assert on the poster path). - Tests: Vitest + jsdom via
@angular/build:unit-test(default). E2E: plain@playwright/testservingdist/rryter-ch/browserto test the real prerendered output. - Sign dependencies:
[email protected],@types/[email protected]; copyangular/twy-neon-sign/*into the app and both posters intopublic/.