Guides
Compatibility
Verified Angular, TypeScript, Node, browser, SSR and hydration support, and the limits of that evidence.
Quartz is verified against installed package tarballs in a separate Angular application, not against the monorepo. The full statement, with reproduction commands, is in docs/compatibility.md.
Supported versions
| Angular | TypeScript | Node (Angular's table) | Verified as |
|---|---|---|---|
| 21.2.0 | 5.9 | ^20.19.0 || ^22.12.0 || ^24.0.0 |
declared minimum |
| 21.2.x (21.2.25) | 5.9 | same | latest 21.2 |
| 22.x (22.2.4) | 6.0 | ^22.22.3 || ^24.15.0 || ^26.0.0 |
Angular 22 |
Peers: @angular/core and @angular/common ^21.2.0 || ^22.0.0, @angular/forms the same range and optional, rxjs ^7.8.0. Angular 21.0 and 21.1 are not supported: the Toast template uses an arrow function, which needs Angular 21.2.
What was checked on each version
- Strict AOT (
strictTemplates,skipLibCheck: false) of an app that imports only@quartz-headless/core,@quartz-headless/primitivesand@quartz-headless/primitives/forms; a deliberately invalid binding must fail the build. - Real server rendering: identical requests produce identical HTML, sequentially and concurrently.
- Hydration without errors, replaced server nodes, duplicate ids or dangling ARIA references.
- Keyboard and pointer interaction in Chromium, Firefox and WebKit, and axe on the meaningful states.
SSR and hydration notes
- Generated ids are scoped to the Angular application (
QzIdGenerator), so every request numbers from 1 and the server and client agree. Pass your ownidtoqzFormField. - The server has no viewport: responsive primitives render their desktop default and settle after hydration. A hydrated Sidebar on a phone starts closed.
- Set the SSR host allow-list (
security.allowedHosts, orNG_ALLOWED_HOSTS) or Angular silently falls back to client rendering. - Under zoneless change detection, read non-signal state through a signal (
toSignal(control.valueChanges)).
Known limits
- Genuine browser autofill is not verified โ automation cannot trigger it.
AutofillDirectiveis best-effort and depends on the browser exposing:-webkit-autofill/:autofill; do not assume universal support. - A physical IME and an OS-clipboard paste in Firefox/WebKit are manual-pending for
qz-input-otp. - No real screen-reader pass has been recorded yet; automated checks do not replace it.