I spent a few hours last weekend investigating Hub -> Next 14 / RSC / no GraphQL upgrade.
Notes:
as I said before, it's quite great; much more convenient than GraphQL
performance is not an issue, and will be noticeably better than with GraphQL; Prisma already does something dataloader-like, and React has a new cache function that deduplicates requests
the tradeoff is between "increase development speed of new features" (sometimes by 2x or more, tbh; it really is that convenient) vs "have a complete GraphQL API"; I think it's worth it, no one will care about GraphQL API for a long time, and we can always add it back
incremental migration is possible, but some things should be migrated together; for example, I migrated model pages from GraphQL, and this broke "Exports (N)" updates on save, because exports tab was loaded in layout.tsx with GraphQL; also, any common components that were taking GraphQL fragments should become server components, take an entity id in prop and query the database for an entity
for 90% of pages, server actions for mutations + RSCs for data loading are enough; server actions need zod schemas to validate inputs, but other than that everything is type-safe and there's almost no extra "glue code"
in a small number of cases, mostly dropdowns that load data asynchronously, we'll need to implement standalone API routes; we could use GraphQL for that, but it's easier just to add something ad-hoc, or use tRPC (not gRPC! gRPC is protobufs and it's a complicated tech, while tRPC is a tiny wrapper for REST APIs that gives typescript safety)
one more downside is that server components are not visible in React devtools; RSC devtools exist but only for Chrome. I don't think it's much of a problem though, server components are not stateful so it's easy to figure out what's going on
I spent a few hours last weekend investigating Hub -> Next 14 / RSC / no GraphQL upgrade.
Notes: