Apollo is still in the works & doesn’t yet support things like mutations, pagination, multi-part queries, etc, so it’d be unfair to do a feature comparison right now, but I can tell you what I know & what I’ve discussed with MDG.
As far as vision, the biggest difference is that they have the goal of keeping the schema off the client. I really like having the schema on the client because that allows Cashay to compute an initialState (ie no defensive coding in the view layer), it can write your mutations for you, you can do type checking before it heads to the server, you don’t need to send full ASTs to the client, etc. That’s the same constraint facebook imposed on Relay & I’m convinced that’s why the relay mutations API is so darn unruly.
Apollo does support batching, which is something I may never do. For my projects, I prefer 2 smaller HTTP request instead of 1 big one, that way the user has something in front of their eyeballs faster.
Apollo’s redux package has its own HOC that takes the place of react-redux. Cashay gives you a front-end agnostic singleton. It’s great because it works with everything and allows you to call a query from anywhere, so predictive fetching is a breeze. Singletons can burn you though, especially for SSR, which is why I wrote a recipe for that.
Finally, Apollo doesn’t cache denormalized results. I think eventually they will once they start handling pagination and mutations, otherwise a large 60fps app will be untenable; but as always, I love being proved wrong!