StreamAssignor relation to RangeAssignor

I was trying to understand the StreamAssignor that is used in Kafka Streams, but I am a bit confused and previously RangeAssignor was the default one, and majorly due to graceful joining requirements, this worked like a charm. But What I assume is range-based assignments are still a must to have for the streaming use cases for Joins? then why do we have StreamAssignor? Is it something called RangeAssignor + Cooperative Rebalancing = Stream Assignor?

previously RangeAssignor was default one and majorly due to graceful joining requirements this worked like a charm.

I guess you are referring to the plain consumer? For Kafka Streams, there is no range assignor.

But What i assume is range based assignments are still a must to have for streaming use case?

Not really. StreamAssignor is not range based (overall, the strategy is complex). Of course, for joins it still needs to ensure co-partitioning (and it does).

Is it something called RangeAssignor + Cooperative Rebalancing = Stream Assignor?

No. StreamAssignor is build from scratch and takes all kind of things into considerations. Also, it work with eager or cooperative rebalancing (note that eager/cooperative is orthogonal to the strategy, ie, round robin, range, etc).