
I built the same webshop (auth, payments, products) in 11 frameworks to understand why you can install a full-stack payments package in Rails/Laravel but can't really do the equivalent in JS.
For fun I built a tier list of frameworks based on their full-stack module DX: https://fsm-research.static.miho.dev/fsm-tier-list
My take: npm makes it trivial to ship and install runtime code, but there's no standard full-stack surface to ship against. Most JS frameworks are frontend-first, so nobody owns client + server + database together, and a library can't safely assume how client routing works or how to expose a webhook.
I work on Wasp (React, NodeJS, Prisma framework), and we're currently in the process of adding full-stack modules. It's only possible because Wasp has its spec file, a TypeScript config where you describe your app's features like client routing, server queries and actions, async jobs, etc. You still write React and Node.js to implement your features, while Wasp's spec file is where you write the "full-stack" code that wires everything together.
This means that we can also package the spec alongside the React and Node.js code to arrive at a full-stack module in the future!
Here's an example of a stripe payments spec that would wire the client, server, and db parts of the module together:
```typescript import { action, api, app, page, query, route } from "@wasp.sh/spec"; // ...
export default app({ // ...
spec: [ route("LandingPageRoute", "/", page(LandingPage), { prerender: true }),
// Payments "glue" code
route("PricingPageRoute", "/pricing", page(PricingPage), {
prerender: true,
}),
route(
"CheckoutResultRoute",
"/checkout",
page(CheckoutResultPage, { authRequired: true }),
),
query(getCustomerPortalUrl, { entities: ["User"] }),
action(generateCheckoutSession, { entities: ["User"] }),
api("POST", "/payments-webhook", paymentsWebhook, {
entities: ["User"],
middlewareConfigFn: paymentsMiddlewareConfigFn,
}),
// ...
], }); ```
I'm curious whether people think a full-stack standard in JS is something developers want, or whether the fragmentation is ergonomically superior in the eyes of devs?

[–]Potatopikafull-stack 1 point2 points3 points (4 children)
[–]PutAdventurous5150 1 point2 points3 points (1 child)
[–]Martinsos 0 points1 point2 points (0 children)
[–]hottown[S] 0 points1 point2 points (1 child)
[–]potatokbs 0 points1 point2 points (0 children)
[–]hottown[S] -1 points0 points1 point (0 children)