What changed
Still one file, src/app/app.config.ts. The animation provider is gone. Hydration is now provideClientHydration(withEventReplay()).
| Before | Now |
|---|---|
BrowserAnimationsModule in AppModule |
Already gone. The standalone bootstrap copied it as provideAnimations(). |
provideAnimations() in appConfig.providers |
Removed. No replacement provider. |
provideClientHydration(withEventReplay(), withNoHttpTransferCache()) |
provideClientHydration(withEventReplay()). Angular's HTTP transfer cache is on again. |
@angular/animations in package.json |
Still there. Angular still ships the types until v23. That uninstall is a later cleanup. |
CacheService and api-cache.service write TransferState |
Unchanged. Those keys still exist. Public GETs may now sit in Angular's cache as well. |
Why we had them
The animation warning is the no-arg signature, (): Provider[]. Angular is not saying we called the wrong overload. The whole legacy engine is on the way out. Removal is planned for v23.
I searched src for from '@angular/animations'. Zero hits. The animate() methods that do exist are requestAnimationFrame loops, not Angular triggers. ngx-toastr 20 already uses animate.enter="toast-in".
withNoHttpTransferCache() landed in 2159ef92824. The commit said Angular 21 hydration would serialize public GETs a second time next to CacheService. That is the tradeoff we are taking back. provideClientHydration() caches GET responses by default and skips requests that already carry an Authorization header.
What the replacement looks like
provideAnimationsAsync() is the wrong swap. Same deprecated package, later crash. Angular did not add a new provideSomething() for this.
If we ever write first-party enter or leave motion, Angular wants a class on the element and a CSS animation. ngx-toastr already does that internally. A fade we owned would look like this.
<!-- old -->
<div [@fadeIn]>...</div>
<!-- now -->
<div animate.enter="fade-in" animate.leave="fade-out">...</div>
.fade-in {
animation: fade-in 200ms ease-out;
}
.fade-out {
animation: fade-in 200ms ease-in reverse forwards;
}
@keyframes fade-in {
from { opacity: 0; }
to { opacity: 1; }
}
How I checked it
| Check | Result |
|---|---|
| First-party animation DSL | None. No trigger(), no transition(), no AnimationBuilder in app code. |
| ngx-toastr 20.0.5 | Uses animate.enter. Does not import @angular/animations. |
| PrimeNG 21.1.10 peers | CDK, common, core, forms, router, platform-browser. No animations package. |
| HTTP transfer cache default | On, once the opt-out is gone. Auth-header GETs stay out of that cache. |
| Browser click-through | Not run. This worktree has no preview server. That is the checklist below. |
Verification checklist
Human QA on a running SSR build. Console and Network open. If the old animation engine is still required, toast open throws NG05105. If transfer cache fights CacheService, a public page will flash stale data or fire the first GET twice.