Development notes

Drop provideAnimations and withNoHttpTransferCache

Two extras in app.config.ts. provideAnimations() was the leftover from BrowserAnimationsModule. withNoHttpTransferCache() was an opt-out so CacheService stayed the only SSR transfer cache. Both are gone. withEventReplay() stays.

commits f20222c72f, 28897b68a7 t3code/explain-provide-animations PR 10880

What changed

Still one file, src/app/app.config.ts. The animation provider is gone. Hydration is now provideClientHydration(withEventReplay()).

BeforeNow
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

CheckResult
First-party animation DSLNone. No trigger(), no transition(), no AnimationBuilder in app code.
ngx-toastr 20.0.5Uses animate.enter. Does not import @angular/animations.
PrimeNG 21.1.10 peersCDK, common, core, forms, router, platform-browser. No animations package.
HTTP transfer cache defaultOn, once the opt-out is gone. Auth-header GETs stay out of that cache.
Browser click-throughNot 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.

0 of 0 checked

High Hydration transfer cache

High Deprecation and toasts

Medium Overlays that used to piggyback on the engine

Low Boot and leftover package