AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
Validation, database tables, API surface, form contracts, GraphQL types — from a single class.
Translation pending
Developer toolsTypeScript · VueGitHub @chokOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Write the domain: one TypeScript entity class becomes your validation, SQL tables, GraphQL/REST API and forms — no codegen. Moving it to its own process is one line of config.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Write the domain. Everything else is a projection of it — including the wire.
One class declares the business object. From it come the TypeScript type, the validator,
the SQL table, the form contract and the API surface — and because the declaration is
JSON on the wire, the domain can move to its own process, or to another language, while
the code calling it does not change.
readOnly is not a note about intent: it removes the field from what a client may ever
send, so publishing cannot be a field write — it has to be an operation.Read the full README ↗Fougere is focused on your business only. Build it. Decide later which infrastructure topology you want, And which technology you want in front of it (GraphQL, REST…).
With one entity class, everything is derived (validation, table, API…). No DTOs to write. It's the same class derived for your needs! You split your app into fronds, one per business area, and each one can run inside it or on its own.
[!IMPORTANT] Fougere is in alpha, so use it with caution: APIs and conventions may still change. There are also many known issues.
A picture (or an animation!) is worth a thousand words!
So first, add a field to an entity and everything derives from it (form, validation, APIs, SQL):
Secondly, move a frond to its own process. One line of config, and the code stays the same.
Everything your handler receives is validated against your schema, and it is served over JSON-RPC by default. You can enable REST or GraphQL as well.
[!TIP] If you need full control over routes, for example, you can set them in config.
For now, only pnpm is fully supported:
pnpm create fougere
With no arguments, it walks you through creating a new app in an interactive terminal UI.
[!NOTE] It runs
fougere newfrom the CLI.
Fougere is heavily inspired by DDD and hexagonal architecture, but doesn't follow them strictly. Think of Fougere as a core around your business logic. Primary adapters, like REST or GraphQL, can be attached to your business logic, but Fougere doesn't know about them. In the same way, the core handles storage without knowing what it is. Implementations are provided for these adapters, but you can write your own to support any kind of input or output.
The one primitive to know is the Frond, the fractal leaf of a fern (fougère in French). It is like a bounded context: you can't call another frond's services directly, only the public code its handlers expose. In return, calling that code is made simple, with several ways to reach a frond's code.
Emit<PostPublished> to announce a fact, and accept a Fact<PostPublished> to subscribe to it. Across processes, it goes over HTTP by default, or through a broker you plug in (Kafka, NATS…).fougere freeze saves each version of your schema as extended JSON Schema. Migrations are deduced from that chain of versions: no SQL to write, and the whole history of changes is kept.