In the article about not upgrading to Angular 22 I explained why one of my projects was still stuck on Angular 21, because of dependencies that didn't support the new version yet. RockPlayer was born after that, without that baggage, so it's possible to use the newest version from the very first commit.
OnPush became the default
Starting with Angular 22, the default change detection strategy became OnPush instead of checking the whole component tree on every event. This matters for RockPlayer because most of the time the screen just sits there, with a song playing, with no new data arriving, and it makes no sense at all to keep checking any component for changes.
Signal Forms arrived stable
RockPlayer's onboarding, that screen where you pick your favorite bands, is literally a form. It's the perfect place to actually use this, and that is exactly what happens in article 7 of this series.
HttpClient started using Fetch under the hood
This is transparent to the code we write, HttpClient keeps the same API, but it explains why some request cancellation behavior may change subtly compared to earlier versions.
What this means for RockPlayer
Components reacting to signals, a form as a signal, no NgModule anywhere, and no dependency on Zone.js to know when to redraw the screen. With the theory closed out, the next article starts building RockPlayerApi, layer by layer.