What works with what? Relay Compat ('react-relay/compat') is the most flexible.
Compat components and mutations can be used by everything. Compat components can also have any kind of children.
However components using the Relay Modern API ('react-relay') and the Relay Classic API ('react-relay/classic') cannot be used with each other.
Can RelayRootContainer use:
Classic Component
Compat Component
Modern Component
Classic Mutation
Compat Mutation
Modern Mutation
Yes
Yes
No
Yes
Yes
No
Can QueryRenderer using Classic Environment (Store in react-relay/classic) use:
Classic Component
Compat Component
Modern Component
Classic Mutation
Compat Mutation
Modern Mutation
Yes
Yes
No
Yes
Yes
No
Can QueryRenderer using Modern Environment use:
Classic Component
Compat Component
Modern Component
Classic Mutation
Compat Mutation
Modern Mutation
No
Yes
Yes
No
Yes
Yes
Can React Modern Component use:
Classic Component
Compat Component
Modern Component
Classic Mutation
Compat Mutation
Modern Mutation
No
Yes
Yes
No
Yes
Yes
Can React Compat Component use:
Classic Component
Compat Component
Modern Component
Classic Mutation
Compat Mutation
Modern Mutation
Yes
Yes
Yes
Yes*
Yes
Yes
* Modern API doesn't support mutation fragments. You might have to inline the mutation fragments from your legacy mutation in the fragment of the component.