Server Actions in production: where they hold up and where they don't
Server Actions are great for forms and one-off mutations. They fall down on long-running work, multi-step flows, and anywhere you need progressive enhancement to actually work without JS.
Server Actions feel like the future when you write them. One file, no API route, type-safe end-to-end. After two years of shipping them I have a clearer picture of where the abstraction earns its keep and where it leaks.
Where they win: form submissions with simple validation, optimistic UI for likes/saves/comments, anything where the round-trip is tight and the failure mode is local. The DX is better than tRPC for these cases. Use them.
Where they break: long-running jobs (use a queue), multi-step wizards (the redirect-on-success pattern collapses), anywhere you need real progressive enhancement (the `<form action={fn}>` works but the recovery story is rough). For those, an explicit API route is still the answer.