Browse the docs
Reference
Examples
The five fuast starter templates, what each one teaches, and the patterns worth copying.
Every template is a complete capsule with the layout your app should use, plus AGENTS.md, CLAUDE.md, README.md, tsconfig.json, fuast-env.d.ts, .gitignore, and a favicon.svg.
bunx @revnu/fuast new my-app --template <name>| Template | Shows |
|---|---|
todo |
Per-user rows, ownership checks, indexes, WebMCP tool tags, client routes, a GET endpoint, a shared helper. The default. |
guestbook |
An intentionally shared feed, author snapshots taken from ctx.auth, guests on a public app. |
signature |
Sign-in required, file attachments with client.storage, ctx.storage cleanup, summary counters, email on each signature. |
approvals |
Team features: ctx.workspace.members(), email on submit and decision, a weekday digest schedule, env-configured approvers. |
live-demo |
Realtime sync between windows: one live query per board, optimistic updates, a typing indicator, room-scoped data for guests, caps, a per-visitor write budget, and a cleanup schedule. The board embedded on the fuast.com homepage. |
Start from the dashboard
No terminal needed: New app in the dashboard opens the same templates as a gallery. Pick one, name it, and fuast deploys it to your workspace as a private app in a few seconds. Share it from the Sharing tab, and read or change its code in the app's Source tab, which type-checks and redeploys from the browser. To keep working on it with an agent or your own editor, scaffold the same template with fuast new and deploy over the app.
What to copy
- Schema, queries, mutations, endpoints, and schedules in
server/index.ts. - Validation and constants in
shared/, used by both sides. - One
createClient<typeof app>()per app, withimport type app from "../server/index". ctx.auth.requireIdentity()orrequireSignedIn()at the top of every handler that touches user data. Never trust identity from arguments.userId()for user references, with owner filters in queries and ownership checks in mutations.- An index for every filter, read with
withIndex,order, and one awaited terminal. - Render nothing while a query is
undefined, fade in loaded data, and give empty lists their own message. - Keep form input on error, and clear it on success only if it still matches what was submitted.
- Complete Tailwind class names written in the client files, with
dark:variants. No component kit.
Test as several people
http://localhost:3000/?fuast_user=alice
http://localhost:3000/?fuast_user=bob
http://localhost:3000/?fuast_guest=1Then check the data:
bunx @revnu/fuast db dump --port 3000
bunx @revnu/fuast logs --port 3000