Awesome post! I had some of the same concerns as you. I started working on a solution similar to Relay which uses Redux to store data. I’ve been thinking about how to do it for a few months. I think I figured out how to do it technically. Since then, I’ve basically rewritten Relay from the ground up with Redux in mind, I’m not done though. This “Relay in Redux” approach enables server-side rendering and lets the library-user decide how to fetch and cache data by simply passing an action creator to the library. I also know how to do the diffing before switching routes. It builds on top of what you already have, so adoption should be straight-forward.
So far I’ve built a working proof of concept which supports queries (no mutations/subscriptions yet). I haven’t published anything yet though, because it’s a hack right now. I’d love to talk to you to get to know more of your insights.
I’m building an example application with this “Relay in Redux” clone I’m creating over at https://github.com/dferber90/webapp. However, I haven’t pushed the proof-of-concept version yet because I’m still figuring some things out. You can watch that repo in case you want to keep up. I’m @dferber90 on Twitter. I’ll tweet when it’s ready.