{"name":"fuast docs","summary":"fuast runs small full-stack TypeScript apps called capsules for teams: a realtime database, sign-in, workspaces and sharing, storage, schedules, and email are built in. An agent writes the capsule, checks it locally with `fuast dev`, and ships it with `fuast deploy`.","agents":"https://fuast.com/agents.md","llms":"https://fuast.com/llms.txt","llmsFull":"https://fuast.com/llms-full.txt","sections":[{"section":"Start","pages":[{"title":"fuast docs","description":"Start here. What a capsule is, the server and client contracts, auth and env, inspection, deploys, limits, and where to read next.","route":"","url":"https://fuast.com/docs","markdown":"https://fuast.com/docs.md","headings":[{"id":"start-here","text":"Start here","depth":2,"url":"https://fuast.com/docs.md#start-here"},{"id":"server-contract","text":"Server contract","depth":2,"url":"https://fuast.com/docs.md#server-contract"},{"id":"client-contract","text":"Client contract","depth":2,"url":"https://fuast.com/docs.md#client-contract"},{"id":"auth-and-env","text":"Auth and env","depth":2,"url":"https://fuast.com/docs.md#auth-and-env"},{"id":"inspect-the-runtime","text":"Inspect the runtime","depth":2,"url":"https://fuast.com/docs.md#inspect-the-runtime"},{"id":"deploy","text":"Deploy","depth":2,"url":"https://fuast.com/docs.md#deploy"},{"id":"current-limits","text":"Current limits","depth":2,"url":"https://fuast.com/docs.md#current-limits"},{"id":"read-next","text":"Read next","depth":2,"url":"https://fuast.com/docs.md#read-next"}]},{"title":"Agent start guide","description":"Everything an AI agent needs to build, verify, deploy, and share a fuast app, in the order it needs it.","route":"agents","url":"https://fuast.com/docs/agents","markdown":"https://fuast.com/docs/agents.md","headings":[{"id":"start-here","text":"Start here","depth":2,"url":"https://fuast.com/docs/agents.md#start-here"},{"id":"limits-to-check-first","text":"Limits to check first","depth":2,"url":"https://fuast.com/docs/agents.md#limits-to-check-first"},{"id":"app-structure-and-apis","text":"App structure and APIs","depth":2,"url":"https://fuast.com/docs/agents.md#app-structure-and-apis"},{"id":"ui-rules","text":"UI rules","depth":2,"url":"https://fuast.com/docs/agents.md#ui-rules"},{"id":"external-data-and-schedules","text":"External data and schedules","depth":2,"url":"https://fuast.com/docs/agents.md#external-data-and-schedules"},{"id":"run-and-verify","text":"Run and verify","depth":2,"url":"https://fuast.com/docs/agents.md#run-and-verify"},{"id":"deploy-hand-over-and-verify","text":"Deploy, hand over, and verify","depth":2,"url":"https://fuast.com/docs/agents.md#deploy-hand-over-and-verify"},{"id":"after-the-person-claims-the-app","text":"After the person claims the app","depth":3,"url":"https://fuast.com/docs/agents.md#after-the-person-claims-the-app"},{"id":"when-you-are-already-logged-in","text":"When you are already logged in","depth":3,"url":"https://fuast.com/docs/agents.md#when-you-are-already-logged-in"},{"id":"read-when-needed","text":"Read when needed","depth":2,"url":"https://fuast.com/docs/agents.md#read-when-needed"}]},{"title":"MCP server","description":"Connect Claude, ChatGPT, Cursor, VS Code, or Claude Code to fuast over MCP. Build, check, deploy, inspect, and share apps from an agent that has no terminal. Setup per client, sign-in, every tool, limits, and OAuth details.","route":"mcp","url":"https://fuast.com/docs/mcp","markdown":"https://fuast.com/docs/mcp.md","headings":[{"id":"connect-your-agent","text":"Connect your agent","depth":2,"url":"https://fuast.com/docs/mcp.md#connect-your-agent"},{"id":"one-command-for-coding-agents","text":"One command for coding agents","depth":3,"url":"https://fuast.com/docs/mcp.md#one-command-for-coding-agents"},{"id":"claude-web-desktop-mobile","text":"Claude (web, desktop, mobile)","depth":3,"url":"https://fuast.com/docs/mcp.md#claude-web-desktop-mobile"},{"id":"claude-code","text":"Claude Code","depth":3,"url":"https://fuast.com/docs/mcp.md#claude-code"},{"id":"codex","text":"Codex","depth":3,"url":"https://fuast.com/docs/mcp.md#codex"},{"id":"gemini-cli","text":"Gemini CLI","depth":3,"url":"https://fuast.com/docs/mcp.md#gemini-cli"},{"id":"cursor","text":"Cursor","depth":3,"url":"https://fuast.com/docs/mcp.md#cursor"},{"id":"vs-code","text":"VS Code","depth":3,"url":"https://fuast.com/docs/mcp.md#vs-code"},{"id":"chatgpt","text":"ChatGPT","depth":3,"url":"https://fuast.com/docs/mcp.md#chatgpt"},{"id":"any-other-client","text":"Any other client","depth":3,"url":"https://fuast.com/docs/mcp.md#any-other-client"},{"id":"the-fuast-skill","text":"The fuast skill","depth":2,"url":"https://fuast.com/docs/mcp.md#the-fuast-skill"},{"id":"three-ways-to-authenticate","text":"Three ways to authenticate","depth":2,"url":"https://fuast.com/docs/mcp.md#three-ways-to-authenticate"},{"id":"no-account","text":"No account","depth":3,"url":"https://fuast.com/docs/mcp.md#no-account"},{"id":"sign-in-with-your-fuast-account-oauth","text":"Sign in with your fuast account (OAuth)","depth":3,"url":"https://fuast.com/docs/mcp.md#sign-in-with-your-fuast-account-oauth"},{"id":"api-token","text":"API token","depth":3,"url":"https://fuast.com/docs/mcp.md#api-token"},{"id":"tools","text":"Tools","depth":2,"url":"https://fuast.com/docs/mcp.md#tools"},{"id":"guide-for-connected-agents","text":"Guide for connected agents","depth":2,"url":"https://fuast.com/docs/mcp.md#guide-for-connected-agents"},{"id":"limits","text":"Limits","depth":2,"url":"https://fuast.com/docs/mcp.md#limits"},{"id":"protocol","text":"Protocol","depth":2,"url":"https://fuast.com/docs/mcp.md#protocol"},{"id":"oauth-for-client-builders","text":"OAuth for client builders","depth":2,"url":"https://fuast.com/docs/mcp.md#oauth-for-client-builders"},{"id":"disconnect-an-agent","text":"Disconnect an agent","depth":2,"url":"https://fuast.com/docs/mcp.md#disconnect-an-agent"},{"id":"troubleshooting","text":"Troubleshooting","depth":2,"url":"https://fuast.com/docs/mcp.md#troubleshooting"}]},{"title":"Test and debug","description":"Check a capsule without a browser. fuast check before every deploy, fuast run for headless handler calls, inspect --query for one query's reads, logs with source-mapped stacks, the dev type error overlay, and run-many for parallel dev servers.","route":"testing","url":"https://fuast.com/docs/testing","markdown":"https://fuast.com/docs/testing.md","headings":[{"id":"check-before-you-deploy","text":"Check before you deploy","depth":2,"url":"https://fuast.com/docs/testing.md#check-before-you-deploy"},{"id":"type-errors-in-the-browser","text":"Type errors in the browser","depth":2,"url":"https://fuast.com/docs/testing.md#type-errors-in-the-browser"},{"id":"call-handlers-headlessly","text":"Call handlers headlessly","depth":2,"url":"https://fuast.com/docs/testing.md#call-handlers-headlessly"},{"id":"measure-one-query","text":"Measure one query","depth":2,"url":"https://fuast.com/docs/testing.md#measure-one-query"},{"id":"read-logs-and-stacks","text":"Read logs and stacks","depth":2,"url":"https://fuast.com/docs/testing.md#read-logs-and-stacks"},{"id":"check-the-data","text":"Check the data","depth":2,"url":"https://fuast.com/docs/testing.md#check-the-data"},{"id":"test-several-people","text":"Test several people","depth":2,"url":"https://fuast.com/docs/testing.md#test-several-people"},{"id":"many-dev-servers-at-once","text":"Many dev servers at once","depth":2,"url":"https://fuast.com/docs/testing.md#many-dev-servers-at-once"},{"id":"before-you-report-done","text":"Before you report done","depth":2,"url":"https://fuast.com/docs/testing.md#before-you-report-done"}]}]},{"section":"Build","pages":[{"title":"Capsule API","description":"The complete author-facing API of fuast/server and fuast/client, with handler capabilities, endpoint responses, logging, errors, and types.","route":"capsule-api","url":"https://fuast.com/docs/capsule-api","markdown":"https://fuast.com/docs/capsule-api.md","headings":[{"id":"file-layout","text":"File layout","depth":2,"url":"https://fuast.com/docs/capsule-api.md#file-layout"},{"id":"capsule","text":"capsule()","depth":2,"url":"https://fuast.com/docs/capsule-api.md#capsule"},{"id":"define-the-server","text":"Define the server","depth":2,"url":"https://fuast.com/docs/capsule-api.md#define-the-server"},{"id":"handlers","text":"Handlers","depth":2,"url":"https://fuast.com/docs/capsule-api.md#handlers"},{"id":"handler-capabilities","text":"Handler capabilities","depth":2,"url":"https://fuast.com/docs/capsule-api.md#handler-capabilities"},{"id":"handler-context","text":"Handler context","depth":2,"url":"https://fuast.com/docs/capsule-api.md#handler-context"},{"id":"endpoints","text":"Endpoints","depth":2,"url":"https://fuast.com/docs/capsule-api.md#endpoints"},{"id":"endpoint-responses","text":"Endpoint responses","depth":3,"url":"https://fuast.com/docs/capsule-api.md#endpoint-responses"},{"id":"logging","text":"Logging","depth":2,"url":"https://fuast.com/docs/capsule-api.md#logging"},{"id":"errors","text":"Errors","depth":2,"url":"https://fuast.com/docs/capsule-api.md#errors"},{"id":"shared-code","text":"Shared code","depth":2,"url":"https://fuast.com/docs/capsule-api.md#shared-code"},{"id":"client","text":"Client","depth":2,"url":"https://fuast.com/docs/capsule-api.md#client"},{"id":"optimistic-updates","text":"Optimistic updates","depth":3,"url":"https://fuast.com/docs/capsule-api.md#optimistic-updates"},{"id":"loading-empty-and-loaded","text":"Loading, empty, and loaded","depth":3,"url":"https://fuast.com/docs/capsule-api.md#loading-empty-and-loaded"},{"id":"forms","text":"Forms","depth":3,"url":"https://fuast.com/docs/capsule-api.md#forms"},{"id":"auth-on-the-client","text":"Auth on the client","depth":3,"url":"https://fuast.com/docs/capsule-api.md#auth-on-the-client"},{"id":"calling-your-endpoints","text":"Calling your endpoints","depth":3,"url":"https://fuast.com/docs/capsule-api.md#calling-your-endpoints"},{"id":"routes","text":"Routes","depth":3,"url":"https://fuast.com/docs/capsule-api.md#routes"},{"id":"error-boundaries","text":"Error boundaries","depth":3,"url":"https://fuast.com/docs/capsule-api.md#error-boundaries"},{"id":"deploy-reloads","text":"Deploy reloads","depth":3,"url":"https://fuast.com/docs/capsule-api.md#deploy-reloads"},{"id":"fuast-ui","text":"fuast/ui","depth":2,"url":"https://fuast.com/docs/capsule-api.md#fuast-ui"},{"id":"types","text":"Types","depth":2,"url":"https://fuast.com/docs/capsule-api.md#types"}]},{"title":"Database","description":"Tables, field types, indexes, sort rules, collect vs paginate, count, relationships, user references, consistency, schema changes, and a schedule-driven ingest example.","route":"database","url":"https://fuast.com/docs/database","markdown":"https://fuast.com/docs/database.md","headings":[{"id":"tables-and-fields","text":"Tables and fields","depth":2,"url":"https://fuast.com/docs/database.md#tables-and-fields"},{"id":"field-types","text":"Field types","depth":2,"url":"https://fuast.com/docs/database.md#field-types"},{"id":"numbers-and-time","text":"Numbers and time","depth":3,"url":"https://fuast.com/docs/database.md#numbers-and-time"},{"id":"optional-fields","text":"Optional fields","depth":3,"url":"https://fuast.com/docs/database.md#optional-fields"},{"id":"reading-and-writing","text":"Reading and writing","depth":2,"url":"https://fuast.com/docs/database.md#reading-and-writing"},{"id":"indexes","text":"Indexes","depth":2,"url":"https://fuast.com/docs/database.md#indexes"},{"id":"terminals","text":"Terminals","depth":3,"url":"https://fuast.com/docs/database.md#terminals"},{"id":"sort-rules","text":"Sort rules","depth":2,"url":"https://fuast.com/docs/database.md#sort-rules"},{"id":"collect-or-paginate","text":"Collect or paginate","depth":2,"url":"https://fuast.com/docs/database.md#collect-or-paginate"},{"id":"count","text":"Count","depth":2,"url":"https://fuast.com/docs/database.md#count"},{"id":"pagination","text":"Pagination","depth":2,"url":"https://fuast.com/docs/database.md#pagination"},{"id":"dashboard-counts","text":"Dashboard counts","depth":2,"url":"https://fuast.com/docs/database.md#dashboard-counts"},{"id":"relationships","text":"Relationships","depth":2,"url":"https://fuast.com/docs/database.md#relationships"},{"id":"user-references","text":"User references","depth":2,"url":"https://fuast.com/docs/database.md#user-references"},{"id":"consistency","text":"Consistency","depth":2,"url":"https://fuast.com/docs/database.md#consistency"},{"id":"schema-changes","text":"Schema changes","depth":2,"url":"https://fuast.com/docs/database.md#schema-changes"},{"id":"rename-a-table","text":"Rename a table","depth":3,"url":"https://fuast.com/docs/database.md#rename-a-table"},{"id":"export-and-import","text":"Export and import","depth":2,"url":"https://fuast.com/docs/database.md#export-and-import"}]},{"title":"Auth","description":"Accounts, workspaces, guests on public apps, requireSignIn, requireIdentity and requireSignedIn, guest upgrade, endpoint credentials with X-Fuast-Token, app origins, and local test identities.","route":"auth","url":"https://fuast.com/docs/auth","markdown":"https://fuast.com/docs/auth.md","headings":[{"id":"accounts","text":"Accounts","depth":2,"url":"https://fuast.com/docs/auth.md#accounts"},{"id":"workspaces","text":"Workspaces","depth":2,"url":"https://fuast.com/docs/auth.md#workspaces"},{"id":"who-can-open-an-app","text":"Who can open an app","depth":2,"url":"https://fuast.com/docs/auth.md#who-can-open-an-app"},{"id":"guests-on-public-apps","text":"Guests on public apps","depth":2,"url":"https://fuast.com/docs/auth.md#guests-on-public-apps"},{"id":"require-an-identity","text":"Require an identity","depth":2,"url":"https://fuast.com/docs/auth.md#require-an-identity"},{"id":"require-sign-in-for-the-whole-app","text":"Require sign-in for the whole app","depth":2,"url":"https://fuast.com/docs/auth.md#require-sign-in-for-the-whole-app"},{"id":"auth-in-the-client","text":"Auth in the client","depth":2,"url":"https://fuast.com/docs/auth.md#auth-in-the-client"},{"id":"guest-upgrade","text":"Guest upgrade","depth":2,"url":"https://fuast.com/docs/auth.md#guest-upgrade"},{"id":"endpoint-credentials","text":"Endpoint credentials","depth":2,"url":"https://fuast.com/docs/auth.md#endpoint-credentials"},{"id":"the-http-call-api","text":"The HTTP call API","depth":2,"url":"https://fuast.com/docs/auth.md#the-http-call-api"},{"id":"app-origins","text":"App origins","depth":2,"url":"https://fuast.com/docs/auth.md#app-origins"},{"id":"local-identities","text":"Local identities","depth":2,"url":"https://fuast.com/docs/auth.md#local-identities"}]},{"title":"Storage","description":"Store user uploads and server-generated files. client.storage, ctx.storage, HTTP routes, access rules, blocked types, limits, errors, and CLI.","route":"storage","url":"https://fuast.com/docs/storage","markdown":"https://fuast.com/docs/storage.md","headings":[{"id":"upload-from-the-client","text":"Upload from the client","depth":2,"url":"https://fuast.com/docs/storage.md#upload-from-the-client"},{"id":"server-side-storage","text":"Server-side storage","depth":2,"url":"https://fuast.com/docs/storage.md#server-side-storage"},{"id":"who-can-read-a-file","text":"Who can read a file","depth":2,"url":"https://fuast.com/docs/storage.md#who-can-read-a-file"},{"id":"http-routes","text":"HTTP routes","depth":2,"url":"https://fuast.com/docs/storage.md#http-routes"},{"id":"blocked-types-and-safe-serving","text":"Blocked types and safe serving","depth":2,"url":"https://fuast.com/docs/storage.md#blocked-types-and-safe-serving"},{"id":"limits","text":"Limits","depth":2,"url":"https://fuast.com/docs/storage.md#limits"},{"id":"errors","text":"Errors","depth":2,"url":"https://fuast.com/docs/storage.md#errors"},{"id":"example-attachment-on-a-document","text":"Example: attachment on a document","depth":2,"url":"https://fuast.com/docs/storage.md#example-attachment-on-a-document"},{"id":"local-development","text":"Local development","depth":2,"url":"https://fuast.com/docs/storage.md#local-development"},{"id":"from-the-cli","text":"From the CLI","depth":2,"url":"https://fuast.com/docs/storage.md#from-the-cli"}]},{"title":"Schedules","description":"Run handlers on a cron schedule. Syntax, identity, transactions, catch-up after downtime, testing, and inspection.","route":"schedules","url":"https://fuast.com/docs/schedules","markdown":"https://fuast.com/docs/schedules.md","headings":[{"id":"cron-syntax","text":"Cron syntax","depth":2,"url":"https://fuast.com/docs/schedules.md#cron-syntax"},{"id":"what-a-schedule-can-do","text":"What a schedule can do","depth":2,"url":"https://fuast.com/docs/schedules.md#what-a-schedule-can-do"},{"id":"timing-and-catch-up","text":"Timing and catch-up","depth":2,"url":"https://fuast.com/docs/schedules.md#timing-and-catch-up"},{"id":"work-in-batches","text":"Work in batches","depth":2,"url":"https://fuast.com/docs/schedules.md#work-in-batches"},{"id":"test-a-schedule","text":"Test a schedule","depth":2,"url":"https://fuast.com/docs/schedules.md#test-a-schedule"},{"id":"inspect-schedules","text":"Inspect schedules","depth":2,"url":"https://fuast.com/docs/schedules.md#inspect-schedules"}]},{"title":"Jobs","description":"Run a mutation or action later with ctx.scheduler. Durable, transactional delayed jobs with retries, inspection, and cancellation.","route":"jobs","url":"https://fuast.com/docs/jobs","markdown":"https://fuast.com/docs/jobs.md","headings":[{"id":"schedule-cancel","text":"Schedule, cancel","depth":2,"url":"https://fuast.com/docs/jobs.md#schedule-cancel"},{"id":"typed-names-and-arguments","text":"Typed names and arguments","depth":3,"url":"https://fuast.com/docs/jobs.md#typed-names-and-arguments"},{"id":"where-you-can-schedule","text":"Where you can schedule","depth":2,"url":"https://fuast.com/docs/jobs.md#where-you-can-schedule"},{"id":"how-jobs-run","text":"How jobs run","depth":2,"url":"https://fuast.com/docs/jobs.md#how-jobs-run"},{"id":"delivery-and-retries","text":"Delivery and retries","depth":3,"url":"https://fuast.com/docs/jobs.md#delivery-and-retries"},{"id":"limits","text":"Limits","depth":2,"url":"https://fuast.com/docs/jobs.md#limits"},{"id":"inspect-and-cancel","text":"Inspect and cancel","depth":2,"url":"https://fuast.com/docs/jobs.md#inspect-and-cancel"},{"id":"test-jobs","text":"Test jobs","depth":2,"url":"https://fuast.com/docs/jobs.md#test-jobs"}]},{"title":"Email","description":"Send transactional email from handlers with ctx.email.send. Where it works, delivery, transactions, limits, and local development.","route":"email","url":"https://fuast.com/docs/email","markdown":"https://fuast.com/docs/email.md","headings":[{"id":"where-it-works","text":"Where it works","depth":2,"url":"https://fuast.com/docs/email.md#where-it-works"},{"id":"email-and-transactions","text":"Email and transactions","depth":2,"url":"https://fuast.com/docs/email.md#email-and-transactions"},{"id":"who-to-email","text":"Who to email","depth":2,"url":"https://fuast.com/docs/email.md#who-to-email"},{"id":"limits","text":"Limits","depth":2,"url":"https://fuast.com/docs/email.md#limits"},{"id":"local-development","text":"Local development","depth":2,"url":"https://fuast.com/docs/email.md#local-development"}]},{"title":"Agent tools (WebMCP)","description":"Expose queries, mutations, and actions to browser agents as WebMCP tools with the tool option.","route":"agent-tools","url":"https://fuast.com/docs/agent-tools","markdown":"https://fuast.com/docs/agent-tools.md","headings":[{"id":"tag-a-handler","text":"Tag a handler","depth":2,"url":"https://fuast.com/docs/agent-tools.md#tag-a-handler"},{"id":"arguments","text":"Arguments","depth":2,"url":"https://fuast.com/docs/agent-tools.md#arguments"},{"id":"how-a-tool-call-runs","text":"How a tool call runs","depth":2,"url":"https://fuast.com/docs/agent-tools.md#how-a-tool-call-runs"},{"id":"write-descriptions-for-agents","text":"Write descriptions for agents","depth":2,"url":"https://fuast.com/docs/agent-tools.md#write-descriptions-for-agents"},{"id":"inspect-tools","text":"Inspect tools","depth":2,"url":"https://fuast.com/docs/agent-tools.md#inspect-tools"}]}]},{"section":"Teams","pages":[{"title":"Teams","description":"Workspaces, roles, sharing modes, invites and access requests, ctx.workspace.members(), and workspace-shared team tables.","route":"teams","url":"https://fuast.com/docs/teams","markdown":"https://fuast.com/docs/teams.md","headings":[{"id":"workspaces","text":"Workspaces","depth":2,"url":"https://fuast.com/docs/teams.md#workspaces"},{"id":"roles","text":"Roles","depth":3,"url":"https://fuast.com/docs/teams.md#roles"},{"id":"sharing","text":"Sharing","depth":2,"url":"https://fuast.com/docs/teams.md#sharing"},{"id":"invites-and-access-requests","text":"Invites and access requests","depth":3,"url":"https://fuast.com/docs/teams.md#invites-and-access-requests"},{"id":"workspace-members","text":"Workspace members","depth":2,"url":"https://fuast.com/docs/teams.md#workspace-members"},{"id":"members-in-fuast-dev","text":"Members in fuast dev","depth":3,"url":"https://fuast.com/docs/teams.md#members-in-fuast-dev"},{"id":"team-tables","text":"Team tables","depth":2,"url":"https://fuast.com/docs/teams.md#team-tables"},{"id":"putting-it-together","text":"Putting it together","depth":2,"url":"https://fuast.com/docs/teams.md#putting-it-together"}]},{"title":"Custom domains","description":"Serve a hosted app at a domain you own (tools.acme.com). DNS records to create, verification, HTTPS, sign-in, and the CLI and dashboard commands.","route":"domains","url":"https://fuast.com/docs/domains","markdown":"https://fuast.com/docs/domains.md","headings":[{"id":"dns-records","text":"DNS records","depth":2,"url":"https://fuast.com/docs/domains.md#dns-records"},{"id":"verification","text":"Verification","depth":2,"url":"https://fuast.com/docs/domains.md#verification"},{"id":"https","text":"HTTPS","depth":2,"url":"https://fuast.com/docs/domains.md#https"},{"id":"what-changes-for-the-app","text":"What changes for the app","depth":2,"url":"https://fuast.com/docs/domains.md#what-changes-for-the-app"},{"id":"aliases","text":"Aliases","depth":2,"url":"https://fuast.com/docs/domains.md#aliases"},{"id":"http-api","text":"HTTP API","depth":2,"url":"https://fuast.com/docs/domains.md#http-api"},{"id":"running-your-own-platform","text":"Running your own platform","depth":2,"url":"https://fuast.com/docs/domains.md#running-your-own-platform"}]}]},{"section":"Examples","pages":[{"title":"Approvals example","description":"A team approvals tool. Workspace members as approvers, email on submit and decision, and a weekday digest schedule.","route":"examples/approvals","url":"https://fuast.com/docs/examples/approvals","markdown":"https://fuast.com/docs/examples/approvals.md","headings":[{"id":"what-it-shows","text":"What it shows","depth":2,"url":"https://fuast.com/docs/examples/approvals.md#what-it-shows"},{"id":"workspace-members-as-approvers","text":"Workspace members as approvers","depth":2,"url":"https://fuast.com/docs/examples/approvals.md#workspace-members-as-approvers"},{"id":"the-digest","text":"The digest","depth":2,"url":"https://fuast.com/docs/examples/approvals.md#the-digest"},{"id":"configure","text":"Configure","depth":2,"url":"https://fuast.com/docs/examples/approvals.md#configure"},{"id":"try-it","text":"Try it","depth":2,"url":"https://fuast.com/docs/examples/approvals.md#try-it"}]},{"title":"Guestbook example","description":"An intentionally shared feed where authorship comes from ctx.auth and author names are stored as snapshots.","route":"examples/guestbook","url":"https://fuast.com/docs/examples/guestbook","markdown":"https://fuast.com/docs/examples/guestbook.md","headings":[{"id":"what-it-shows","text":"What it shows","depth":2,"url":"https://fuast.com/docs/examples/guestbook.md#what-it-shows"},{"id":"server-pattern","text":"Server pattern","depth":2,"url":"https://fuast.com/docs/examples/guestbook.md#server-pattern"},{"id":"variations","text":"Variations","depth":2,"url":"https://fuast.com/docs/examples/guestbook.md#variations"},{"id":"try-it","text":"Try it","depth":2,"url":"https://fuast.com/docs/examples/guestbook.md#try-it"}]},{"title":"Live board example","description":"A shared sticky-note board that syncs between windows. One live query per board, optimistic updates, a typing indicator, and the limits that make a public guest app safe to leave open.","route":"examples/live-demo","url":"https://fuast.com/docs/examples/live-demo","markdown":"https://fuast.com/docs/examples/live-demo.md","headings":[{"id":"what-it-shows","text":"What it shows","depth":2,"url":"https://fuast.com/docs/examples/live-demo.md#what-it-shows"},{"id":"url-parameters","text":"URL parameters","depth":2,"url":"https://fuast.com/docs/examples/live-demo.md#url-parameters"},{"id":"server-pattern","text":"Server pattern","depth":2,"url":"https://fuast.com/docs/examples/live-demo.md#server-pattern"},{"id":"client-pattern","text":"Client pattern","depth":2,"url":"https://fuast.com/docs/examples/live-demo.md#client-pattern"},{"id":"what-it-costs","text":"What it costs","depth":2,"url":"https://fuast.com/docs/examples/live-demo.md#what-it-costs"},{"id":"try-it","text":"Try it","depth":2,"url":"https://fuast.com/docs/examples/live-demo.md#try-it"}]},{"title":"Signature example","description":"Share an agreement or PDF and collect drawn signatures tied to verified identities. Storage, summary counters, and email.","route":"examples/signature","url":"https://fuast.com/docs/examples/signature","markdown":"https://fuast.com/docs/examples/signature.md","headings":[{"id":"what-it-shows","text":"What it shows","depth":2,"url":"https://fuast.com/docs/examples/signature.md#what-it-shows"},{"id":"upload-then-write","text":"Upload, then write","depth":2,"url":"https://fuast.com/docs/examples/signature.md#upload-then-write"},{"id":"try-it","text":"Try it","depth":2,"url":"https://fuast.com/docs/examples/signature.md#try-it"}]},{"title":"Todo example","description":"The default template. Per-user todos with ownership checks, indexes, WebMCP tools, client routes, and a GET endpoint.","route":"examples/todo","url":"https://fuast.com/docs/examples/todo","markdown":"https://fuast.com/docs/examples/todo.md","headings":[{"id":"what-it-shows","text":"What it shows","depth":2,"url":"https://fuast.com/docs/examples/todo.md#what-it-shows"},{"id":"server-pattern","text":"Server pattern","depth":2,"url":"https://fuast.com/docs/examples/todo.md#server-pattern"},{"id":"client-pattern","text":"Client pattern","depth":2,"url":"https://fuast.com/docs/examples/todo.md#client-pattern"},{"id":"try-it","text":"Try it","depth":2,"url":"https://fuast.com/docs/examples/todo.md#try-it"}]}]},{"section":"Reference","pages":[{"title":"Reference","description":"Every fuast CLI command and flag, deploys, tokens, inspection routes, the HTTP call API, the realtime protocol, and environment variables.","route":"reference","url":"https://fuast.com/docs/reference","markdown":"https://fuast.com/docs/reference.md","headings":[{"id":"cli","text":"CLI","depth":2,"url":"https://fuast.com/docs/reference.md#cli"},{"id":"targeting-an-app","text":"Targeting an app","depth":3,"url":"https://fuast.com/docs/reference.md#targeting-an-app"},{"id":"create","text":"Create","depth":3,"url":"https://fuast.com/docs/reference.md#create"},{"id":"develop","text":"Develop","depth":3,"url":"https://fuast.com/docs/reference.md#develop"},{"id":"deploy","text":"Deploy","depth":3,"url":"https://fuast.com/docs/reference.md#deploy"},{"id":"deploy-without-an-account","text":"Deploy without an account","depth":3,"url":"https://fuast.com/docs/reference.md#deploy-without-an-account"},{"id":"share","text":"Share","depth":3,"url":"https://fuast.com/docs/reference.md#share"},{"id":"account-and-tokens","text":"Account and tokens","depth":3,"url":"https://fuast.com/docs/reference.md#account-and-tokens"},{"id":"inspect-and-operate","text":"Inspect and operate","depth":3,"url":"https://fuast.com/docs/reference.md#inspect-and-operate"},{"id":"inspection-routes","text":"Inspection routes","depth":2,"url":"https://fuast.com/docs/reference.md#inspection-routes"},{"id":"http-call-api","text":"HTTP call API","depth":2,"url":"https://fuast.com/docs/reference.md#http-call-api"},{"id":"realtime-protocol","text":"Realtime protocol","depth":2,"url":"https://fuast.com/docs/reference.md#realtime-protocol"},{"id":"operate-a-platform","text":"Operate a platform","depth":3,"url":"https://fuast.com/docs/reference.md#operate-a-platform"},{"id":"environment-variables","text":"Environment variables","depth":2,"url":"https://fuast.com/docs/reference.md#environment-variables"},{"id":"app-env","text":"App env","depth":3,"url":"https://fuast.com/docs/reference.md#app-env"},{"id":"cli-env","text":"CLI env","depth":3,"url":"https://fuast.com/docs/reference.md#cli-env"},{"id":"platform-environment","text":"Platform environment","depth":3,"url":"https://fuast.com/docs/reference.md#platform-environment"},{"id":"deploys-and-data","text":"Deploys and data","depth":2,"url":"https://fuast.com/docs/reference.md#deploys-and-data"}]},{"title":"Limits","description":"Every limit fuast enforces, with its default, the exact error, and what to change. Handler and database budgets, actions, app state, daily quotas, storage, email, server env, deploys, unclaimed previews, rate limits, and how to check usage.","route":"limits","url":"https://fuast.com/docs/limits","markdown":"https://fuast.com/docs/limits.md","headings":[{"id":"handler-limits","text":"Handler limits","depth":2,"url":"https://fuast.com/docs/limits.md#handler-limits"},{"id":"outbound-fetch","text":"Outbound fetch","depth":2,"url":"https://fuast.com/docs/limits.md#outbound-fetch"},{"id":"action-limits","text":"Action limits","depth":2,"url":"https://fuast.com/docs/limits.md#action-limits"},{"id":"endpoint-and-connection-limits","text":"Endpoint and connection limits","depth":2,"url":"https://fuast.com/docs/limits.md#endpoint-and-connection-limits"},{"id":"app-limits","text":"App limits","depth":2,"url":"https://fuast.com/docs/limits.md#app-limits"},{"id":"email-limits","text":"Email limits","depth":2,"url":"https://fuast.com/docs/limits.md#email-limits"},{"id":"storage-limits","text":"Storage limits","depth":2,"url":"https://fuast.com/docs/limits.md#storage-limits"},{"id":"team-table-limits","text":"Team table limits","depth":2,"url":"https://fuast.com/docs/limits.md#team-table-limits"},{"id":"server-env-limits","text":"Server env limits","depth":2,"url":"https://fuast.com/docs/limits.md#server-env-limits"},{"id":"deploy-limits","text":"Deploy limits","depth":2,"url":"https://fuast.com/docs/limits.md#deploy-limits"},{"id":"unclaimed-previews","text":"Unclaimed previews","depth":2,"url":"https://fuast.com/docs/limits.md#unclaimed-previews"},{"id":"rate-limits","text":"Rate limits","depth":2,"url":"https://fuast.com/docs/limits.md#rate-limits"},{"id":"reading-a-quota-error","text":"Reading a quota error","depth":2,"url":"https://fuast.com/docs/limits.md#reading-a-quota-error"},{"id":"checking-usage","text":"Checking usage","depth":2,"url":"https://fuast.com/docs/limits.md#checking-usage"},{"id":"self-hosted-overrides","text":"Self-hosted overrides","depth":2,"url":"https://fuast.com/docs/limits.md#self-hosted-overrides"}]},{"title":"Security","description":"The fuast threat model in one page. What the platform guarantees, what your capsule must do itself, app origins and cookies, secrets, endpoints, agent tools, and how to report a vulnerability.","route":"security","url":"https://fuast.com/docs/security","markdown":"https://fuast.com/docs/security.md","headings":[{"id":"what-fuast-guarantees","text":"What fuast guarantees","depth":2,"url":"https://fuast.com/docs/security.md#what-fuast-guarantees"},{"id":"what-your-capsule-must-do","text":"What your capsule must do","depth":2,"url":"https://fuast.com/docs/security.md#what-your-capsule-must-do"},{"id":"app-origins-and-cookies","text":"App origins and cookies","depth":2,"url":"https://fuast.com/docs/security.md#app-origins-and-cookies"},{"id":"embedding","text":"Embedding","depth":2,"url":"https://fuast.com/docs/security.md#embedding"},{"id":"local-development","text":"Local development","depth":2,"url":"https://fuast.com/docs/security.md#local-development"},{"id":"tokens","text":"Tokens","depth":2,"url":"https://fuast.com/docs/security.md#tokens"},{"id":"mcp-and-oauth","text":"MCP and OAuth","depth":2,"url":"https://fuast.com/docs/security.md#mcp-and-oauth"},{"id":"unclaimed-previews","text":"Unclaimed previews","depth":2,"url":"https://fuast.com/docs/security.md#unclaimed-previews"},{"id":"restricted-apps","text":"Restricted apps","depth":2,"url":"https://fuast.com/docs/security.md#restricted-apps"},{"id":"platform-operators","text":"Platform operators","depth":2,"url":"https://fuast.com/docs/security.md#platform-operators"},{"id":"reporting-a-vulnerability","text":"Reporting a vulnerability","depth":2,"url":"https://fuast.com/docs/security.md#reporting-a-vulnerability"}]},{"title":"Isolation and security model","description":"How fuast keeps capsule code away from the platform and from other apps. Process split, isolates, transactions, app origins, storage hardening, rate limits, and red-team checks.","route":"isolation","url":"https://fuast.com/docs/isolation","markdown":"https://fuast.com/docs/isolation.md","headings":[{"id":"the-rule","text":"The rule","depth":2,"url":"https://fuast.com/docs/isolation.md#the-rule"},{"id":"two-processes","text":"Two processes","depth":2,"url":"https://fuast.com/docs/isolation.md#two-processes"},{"id":"deploy-path","text":"Deploy path","depth":2,"url":"https://fuast.com/docs/isolation.md#deploy-path"},{"id":"inside-an-isolate","text":"Inside an isolate","depth":2,"url":"https://fuast.com/docs/isolation.md#inside-an-isolate"},{"id":"outbound-fetch","text":"Outbound fetch","depth":2,"url":"https://fuast.com/docs/isolation.md#outbound-fetch"},{"id":"data-separation","text":"Data separation","depth":2,"url":"https://fuast.com/docs/isolation.md#data-separation"},{"id":"app-origins","text":"App origins","depth":2,"url":"https://fuast.com/docs/isolation.md#app-origins"},{"id":"identity","text":"Identity","depth":2,"url":"https://fuast.com/docs/isolation.md#identity"},{"id":"storage-hardening","text":"Storage hardening","depth":2,"url":"https://fuast.com/docs/isolation.md#storage-hardening"},{"id":"rate-limits-and-quotas","text":"Rate limits and quotas","depth":2,"url":"https://fuast.com/docs/isolation.md#rate-limits-and-quotas"},{"id":"inspection","text":"Inspection","depth":2,"url":"https://fuast.com/docs/isolation.md#inspection"},{"id":"red-team-checks","text":"Red-team checks","depth":2,"url":"https://fuast.com/docs/isolation.md#red-team-checks"}]},{"title":"Migrating to fuast v2","description":"Upgrade a capsule written for the original fuast API. What stays, what changes, before-and-after code, and a prompt to hand an agent.","route":"migration-v2","url":"https://fuast.com/docs/migration-v2","markdown":"https://fuast.com/docs/migration-v2.md","headings":[{"id":"deployed-v1-apps","text":"Deployed v1 apps","depth":2,"url":"https://fuast.com/docs/migration-v2.md#deployed-v1-apps"},{"id":"what-stays-the-same","text":"What stays the same","depth":2,"url":"https://fuast.com/docs/migration-v2.md#what-stays-the-same"},{"id":"what-changed","text":"What changed","depth":2,"url":"https://fuast.com/docs/migration-v2.md#what-changed"},{"id":"before-and-after","text":"Before and after","depth":2,"url":"https://fuast.com/docs/migration-v2.md#before-and-after"},{"id":"data-notes","text":"Data notes","depth":2,"url":"https://fuast.com/docs/migration-v2.md#data-notes"},{"id":"regenerate-fuast-env-d-ts","text":"Regenerate fuast-env.d.ts","depth":2,"url":"https://fuast.com/docs/migration-v2.md#regenerate-fuast-env-d-ts"},{"id":"agent-migration-prompt","text":"Agent migration prompt","depth":2,"url":"https://fuast.com/docs/migration-v2.md#agent-migration-prompt"}]},{"title":"Support","description":"Supported platforms and browsers, what counts as the public API, compatibility across releases, persistence and deletion, and how to get help.","route":"support","url":"https://fuast.com/docs/support","markdown":"https://fuast.com/docs/support.md","headings":[{"id":"cli-platforms","text":"CLI platforms","depth":2,"url":"https://fuast.com/docs/support.md#cli-platforms"},{"id":"browsers","text":"Browsers","depth":2,"url":"https://fuast.com/docs/support.md#browsers"},{"id":"public-api","text":"Public API","depth":2,"url":"https://fuast.com/docs/support.md#public-api"},{"id":"compatibility","text":"Compatibility","depth":2,"url":"https://fuast.com/docs/support.md#compatibility"},{"id":"persistence","text":"Persistence","depth":2,"url":"https://fuast.com/docs/support.md#persistence"},{"id":"getting-help","text":"Getting help","depth":2,"url":"https://fuast.com/docs/support.md#getting-help"}]},{"title":"Examples","description":"The five fuast starter templates, what each one teaches, and the patterns worth copying.","route":"examples","url":"https://fuast.com/docs/examples","markdown":"https://fuast.com/docs/examples.md","headings":[{"id":"start-from-the-dashboard","text":"Start from the dashboard","depth":2,"url":"https://fuast.com/docs/examples.md#start-from-the-dashboard"},{"id":"what-to-copy","text":"What to copy","depth":2,"url":"https://fuast.com/docs/examples.md#what-to-copy"},{"id":"test-as-several-people","text":"Test as several people","depth":2,"url":"https://fuast.com/docs/examples.md#test-as-several-people"}]}]}]}