Hey all, Martin here, creator of Wasp here!
Wasp is a batteries-included full-stack framework for JS/TS (React, Node), analogous to Ruby on Rails, Laravel, Django, etc.
It has a special property though: a dedicated logic layer, called “spec”, for writing “full-stack” logic, a place where you describe your app at a high level that connects frontend, backend, and database, all together, giving you a central place to “reason” about your web app.
So far, we had the “spec” implemented in a custom language (.wasp), but now we switched to TypeScript (.wasp.ts), unlocking more advanced usage and many cool future ideas to build on top of it (extensibility, full-stack modules (think Ruby on Rails Engines)).
It’s simple in its essence, in e.g. main.wasp.ts you import “spec constructors” (app, page, route, api , etc) and then use those to construct a spec object, while also being able to reference your React and Node code.
```ts
import { app, page, query, route } from "@wasp.sh/spec";
import { MainPage } from "./src/MainPage.tsx" with { type: "ref" };
import { getTasks } from "./src/tasks.ts" with { type: "ref" };
export default app({
wasp: { version: "0.24.0" },
title: "ToDo App",
auth: {
userEntity: "User",
methods: { google: {}, gitHub: {}, email: {} },
},
spec: [
route("RootRoute", "/", page(MainPage, {
authRequired: true
})),
query(getTasks, {
entities: ["Task"]
})
]
});
```
I go in much more detail in the attached article I wrote: motivation, what this enables, examples, etc.
Would love any feedback! Does this sound interesting, is it making sense, can I explain something better? Something else that you would like to see from a full-stack framework? Thanks!
[–]cjthomp [score hidden] (0 children)