Well, freezed can be used for both data classes and unions! This means you’ll get automatically generated value equality, copyWith , exhaustive switch, and even JSON serialization support from one place ! Basically you get built_value and sum_types without all the weirdness and boilerplate.