{
  "protocol": "xeer.docs.v0",
  "docsVersion": "0.2.26",
  "framework": {
    "package": "@impetik/xeer",
    "version": "0.2.26",
    "versionRange": ">=0.2.0 <0.3.0"
  },
  "pages": [
    {
      "path": "/",
      "title": "Xeer",
      "description": "Xeer is a framework for building and shipping full-stack apps. A typed server, a reactive client, a built-in test runner, and one command to deploy.",
      "headings": [
        "Four commands, start to production",
        "A taste of the model",
        "The manifest",
        "The server",
        "The client",
        "What you get without asking",
        "Built for developers working with agents",
        "Next"
      ],
      "markdownUrl": "https://docs.xeer.run/index.md",
      "canonicalUrl": "https://docs.xeer.run/",
      "contentHash": "sha256:61c17ca724807002beadf34e686feedfbd62bc2c65d08e553defe38a546fc396",
      "asset": "index.md"
    },
    {
      "path": "/quickstart",
      "title": "Quickstart",
      "description": "Create, run, test, and deploy a Xeer app in five minutes.",
      "headings": [
        "1. Create an app",
        "Live catalog: atelier, orario, piazza, tavola, lumen-studio, northstar-saas",
        "A SvelteKit app instead",
        "2. Run it",
        "3. Change something",
        "4. Test it",
        "5. Deploy it",
        "Where to go next"
      ],
      "markdownUrl": "https://docs.xeer.run/quickstart.md",
      "canonicalUrl": "https://docs.xeer.run/quickstart",
      "contentHash": "sha256:f3ed5bfc389059f9d7194b60ad3bd031f94dd6664a20c966d02d90657ba075e1",
      "asset": "quickstart.md"
    },
    {
      "path": "/guides/project-structure",
      "title": "Project structure",
      "description": "What `xeer new` writes, and what each file is for.",
      "headings": [
        "xeer.app.json — the manifest",
        "xeer.project.json — the app's identity",
        "src/server.ts — the server",
        "src/client.tsx — the client",
        "One compiler for the editor and the CLI",
        "The two zones, and the wall between them",
        "tests/",
        "public/",
        ".xeer/ — disposable local state",
        "Bring your own tooling"
      ],
      "markdownUrl": "https://docs.xeer.run/guides/project-structure.md",
      "canonicalUrl": "https://docs.xeer.run/guides/project-structure",
      "contentHash": "sha256:e98c5ff7585138ff47df210e143df5fa9b37e1d94c1989313ff9bb891cd54dc6",
      "asset": "guides/project-structure.md"
    },
    {
      "path": "/guides/capabilities",
      "title": "Capabilities",
      "description": "The powers an app declares, and why an undeclared one does not exist.",
      "headings": [
        "Deny by default",
        "database",
        "Tables, fields, indexes",
        "The typed surface",
        "Policies: authorization in the data layer",
        "Local development, no provisioning",
        "storage",
        "The surface, in brief",
        "Why not just add an SDK client?",
        "Next"
      ],
      "markdownUrl": "https://docs.xeer.run/guides/capabilities.md",
      "canonicalUrl": "https://docs.xeer.run/guides/capabilities",
      "contentHash": "sha256:47949c9bf8d14c9d0cd22104bf63a3b7de2c1b32a384aab43e4e14fefcc5da0e",
      "asset": "guides/capabilities.md"
    },
    {
      "path": "/guides/server",
      "title": "Server functions and the database",
      "description": "Queries, mutations, endpoints, and the typed table API.",
      "headings": [
        "Queries",
        "Mutations",
        "Endpoints",
        "Path parameters",
        "Streaming a response",
        "Input types",
        "Result types",
        "The table API",
        "Filtering",
        "Paging",
        "Counting",
        "Row counts and budgets",
        "ctx",
        "ctx.auth",
        "ctx.env",
        "ctx.storage",
        "Refusing a call",
        "Authorization",
        "A complete server",
        "Next"
      ],
      "markdownUrl": "https://docs.xeer.run/guides/server.md",
      "canonicalUrl": "https://docs.xeer.run/guides/server",
      "contentHash": "sha256:62566a5695594f5654c2113e4da6638a792fd79d83e2eb9d6824e8318c1da893",
      "asset": "guides/server.md"
    },
    {
      "path": "/guides/storage",
      "title": "Storage",
      "description": "Private file storage per app: the `ctx.storage` surface, keys, browser uploads, limits, and what happens on deploy.",
      "headings": [
        "Declaring it",
        "Limits are lowerable, never raisable",
        "The surface",
        "Absence is not an error",
        "What is not on the surface",
        "Keys",
        "The appUserId gotcha",
        "Uploading from a browser",
        "1. Declare a table to record what was stored",
        "2. The upload endpoint",
        "3. The client",
        "4. Serving the bytes back out",
        "The request budget",
        "Listing and paging",
        "Limits at call time",
        "Local development and tests",
        "Throwing local data away",
        "Preview and production are separate stores",
        "Deleting an app",
        "Next"
      ],
      "markdownUrl": "https://docs.xeer.run/guides/storage.md",
      "canonicalUrl": "https://docs.xeer.run/guides/storage",
      "contentHash": "sha256:1287df8d04f017b4cf7f29f2930750a098e7f4a138011f5d23a045e48f6c3387",
      "asset": "guides/storage.md"
    },
    {
      "path": "/guides/client",
      "title": "The client",
      "description": "Reading data with hooks, writing it with mutations, and staying in sync.",
      "headings": [
        "Choosing the renderer",
        "Renderer-neutral core",
        "useQuery",
        "useMutation",
        "useAuth",
        "signIn and signOut",
        "Ready-made auth components",
        "Custom account management",
        "useXeerClient and scoped invalidation",
        "invalidateQueries",
        "mount and XeerProvider",
        "Renderer hooks",
        "Routing",
        "What client code may import",
        "npm dependencies",
        "Using React libraries",
        "Styling and assets",
        "Next"
      ],
      "markdownUrl": "https://docs.xeer.run/guides/client.md",
      "canonicalUrl": "https://docs.xeer.run/guides/client",
      "contentHash": "sha256:4368acb72af73f71318f5a421357605399a143ab7a01b1265fabdc5dad149c77",
      "asset": "guides/client.md"
    },
    {
      "path": "/guides/live-updates",
      "title": "Live updates",
      "description": "How every open client sees a change the moment it lands.",
      "headings": [
        "Turn it on first",
        "The mechanism",
        "What is on the wire",
        "Three paths, not one",
        "What you write",
        "Reliability",
        "What is not covered",
        "What this is not",
        "Next"
      ],
      "markdownUrl": "https://docs.xeer.run/guides/live-updates.md",
      "canonicalUrl": "https://docs.xeer.run/guides/live-updates",
      "contentHash": "sha256:f972941090884bb981cc05eff98d616b15859d586eeb0326cd817e36bf1a5994",
      "asset": "guides/live-updates.md"
    },
    {
      "path": "/guides/auth",
      "title": "Auth",
      "description": "Two separate identities: your builder account, and your app's own users.",
      "headings": [
        "Door 1 — you",
        "Door 2 — your app's users",
        "Door 2: your app's users",
        "Every visitor already has an identity",
        "ctx.auth",
        "appUserId is pairwise",
        "Signing in",
        "Email and password",
        "Authorization",
        "Table policies",
        "Operation guards",
        "A policy filters; a guard refuses",
        "A table with no policy",
        "Prove it",
        "Door 1: your builder account",
        "Next"
      ],
      "markdownUrl": "https://docs.xeer.run/guides/auth.md",
      "canonicalUrl": "https://docs.xeer.run/guides/auth",
      "contentHash": "sha256:7612823f1e00c292c64b03af2bb1291797d38ef4ec19208c9dcecd37798e8f83",
      "asset": "guides/auth.md"
    },
    {
      "path": "/guides/local-development",
      "title": "Local development",
      "description": "The dev server, local data, and the personas that make authorization exercisable offline.",
      "headings": [
        "What xeer dev gives you",
        "xeer check — the fast loop",
        "Local personas",
        "Switching persona: two controls",
        "Membership, roles, and permissions locally",
        "Personas are development-only, by construction",
        "Your local data",
        "Browsing and editing rows",
        "Running the real artifact",
        "Next"
      ],
      "markdownUrl": "https://docs.xeer.run/guides/local-development.md",
      "canonicalUrl": "https://docs.xeer.run/guides/local-development",
      "contentHash": "sha256:4740ff861dbb6fcbd2b222bcc28395a0af6566736ca82414ad6dccfef541e382",
      "asset": "guides/local-development.md"
    },
    {
      "path": "/guides/testing",
      "title": "Testing",
      "description": "The built-in test runner, and asserting authorization instead of assuming it.",
      "headings": [
        "What it does",
        "The API",
        "test(name, run)",
        "as(persona) — call as a specific user",
        "expect(value) — four matchers",
        "expectFailure(call) — assert a refusal",
        "Testing authorization",
        "Testing endpoints",
        "Under --json",
        "Local state, and getting it back",
        "Next"
      ],
      "markdownUrl": "https://docs.xeer.run/guides/testing.md",
      "canonicalUrl": "https://docs.xeer.run/guides/testing",
      "contentHash": "sha256:873c2d058da30c4a4e070b50bc04933805766eb78905d35e9be7fd1054a35f71",
      "asset": "guides/testing.md"
    },
    {
      "path": "/guides/env",
      "title": "Environment variables and secrets",
      "description": "Storing configuration per environment, and reading it from `ctx.env`.",
      "headings": [
        "Three environments",
        "Reading a value",
        "Why a key cannot leak to the browser",
        "Local development",
        "The local file, without a control plane",
        "Deployed values need a redeploy",
        "Values are write-only",
        "Rules and limits",
        "Next"
      ],
      "markdownUrl": "https://docs.xeer.run/guides/env.md",
      "canonicalUrl": "https://docs.xeer.run/guides/env",
      "contentHash": "sha256:b0bb6cf80f9ae73159b0ecd8258021d15d2e680ff6ce502e0a4e9478319f9b58",
      "asset": "guides/env.md"
    },
    {
      "path": "/guides/deploy",
      "title": "Deploy, preview, promote, roll back",
      "description": "Shipping to a real URL, and the levers for changing what is live.",
      "headings": [
        "Sign in",
        "Deploy",
        "Look at a build before you ship it",
        "Preview a change",
        "Promote it",
        "Deployment history",
        "Roll back",
        "Take an app offline",
        "Delete an app",
        "Moving data in and out",
        "Everything at a glance",
        "Next"
      ],
      "markdownUrl": "https://docs.xeer.run/guides/deploy.md",
      "canonicalUrl": "https://docs.xeer.run/guides/deploy",
      "contentHash": "sha256:ea2b8b955f37f49bb4b47c8cd2aff253e8a56db124a2b25c1b7e08f01038ba7a",
      "asset": "guides/deploy.md"
    },
    {
      "path": "/guides/custom-domains",
      "title": "Custom domains",
      "description": "Attach, validate, monitor, and safely remove a customer-owned hostname.",
      "headings": [
        "Add the DNS records",
        "List and remove domains",
        "Machine-readable workflow"
      ],
      "markdownUrl": "https://docs.xeer.run/guides/custom-domains.md",
      "canonicalUrl": "https://docs.xeer.run/guides/custom-domains",
      "contentHash": "sha256:059618f5df870be3b5c9ae99b6220e74c0e118a00b69994186ae2ddcf8c8e3b1",
      "asset": "guides/custom-domains.md"
    },
    {
      "path": "/guides/agents",
      "title": "Building with AI agents",
      "description": "The machine-readable surface: `--json` on every command, and the MCP server.",
      "headings": [
        "Zero-config discovery",
        "Every command speaks JSON",
        "Diagnostics are the interface",
        "The MCP server",
        "Why dev is three tools",
        "The loop that works",
        "Why the framework's shape helps",
        "These docs, as plain text",
        "Provider-specific projections",
        "Next"
      ],
      "markdownUrl": "https://docs.xeer.run/guides/agents.md",
      "canonicalUrl": "https://docs.xeer.run/guides/agents",
      "contentHash": "sha256:7bf7ff5848b6abf5c67485b26831a4bc49d734134017704d48ed9a752622a200",
      "asset": "guides/agents.md"
    },
    {
      "path": "/reference/cli",
      "title": "CLI reference",
      "description": "Every `xeer` command, its options, and what it does.",
      "headings": [
        "Global flags",
        "Agent setup",
        "Agent context",
        "Documentation search",
        "Machine action catalogue",
        "Build and check",
        "xeer new",
        "xeer init",
        "xeer check",
        "xeer diagnostics",
        "xeer build",
        "xeer doctor",
        "Run locally",
        "xeer dev",
        "xeer tunnel",
        "xeer preview",
        "xeer test",
        "Sign in",
        "xeer auth login",
        "xeer auth status",
        "xeer auth logout",
        "xeer auth as / xeer auth clear",
        "xeer token create / xeer token ls / xeer token revoke",
        "Ship",
        "xeer deploy",
        "xeer promote",
        "xeer rollback",
        "xeer deployments",
        "xeer link",
        "xeer disable / xeer enable",
        "xeer delete",
        "xeer domains",
        "Inspect",
        "xeer inspect / xeer state / xeer logs",
        "xeer state reset",
        "Move data",
        "xeer export / xeer import",
        "Query the database",
        "xeer db",
        "Environment values",
        "xeer env",
        "Environment variables the CLI reads",
        "Network failures and re-running",
        "Exit codes",
        "Requirements",
        "Next"
      ],
      "markdownUrl": "https://docs.xeer.run/reference/cli.md",
      "canonicalUrl": "https://docs.xeer.run/reference/cli",
      "contentHash": "sha256:64f6a5dbac5bbe256b4e51abcbefe4eb824fba1414be86802b256561c8448a48",
      "asset": "reference/cli.md"
    },
    {
      "path": "/reference/manifest",
      "title": "Manifest reference",
      "description": "Every field of `xeer.app.json`, with its exact rules.",
      "headings": [
        "Top level",
        "entrypoints",
        "app",
        "database",
        "Tables",
        "Fields",
        "Referencing another table",
        "Reserved fields",
        "Who chooses the id",
        "Indexes",
        "Schema changes",
        "storage",
        "capabilities",
        "client",
        "untypedDependencies",
        "budgets",
        "Normalisation",
        "Next"
      ],
      "markdownUrl": "https://docs.xeer.run/reference/manifest.md",
      "canonicalUrl": "https://docs.xeer.run/reference/manifest",
      "contentHash": "sha256:d3b5fa53e5d0ce726db03eea60b20249cbdf63846850be69ed735df4466561d7",
      "asset": "reference/manifest.md"
    },
    {
      "path": "/reference/diagnostics",
      "title": "Diagnostics reference",
      "description": "Every stable `XE####` code the compiler and CLI emit, what it means, and how to repair it.",
      "headings": [
        "CLI (XE00xx)",
        "Manifest (XE10xx)",
        "Manifest paths (XE11xx)",
        "Module graph and zones (XE12xx)",
        "Operations (XE13xx)",
        "Budgets and assets (XE14xx)",
        "Bundling (XE15xx)",
        "Development loop (XE16xx)",
        "Artifact preview (XE17xx)",
        "Local state and state transfer (XE18xx)",
        "Tests (XE19xx)",
        "Inspector (XE20xx)",
        "Scaffold (XE30xx)",
        "Agent setup (XE31xx)",
        "Existing-project initialization (XE32xx)",
        "Environment (XE40xx)",
        "Builder authentication (XE50xx)",
        "Deployment, project identity, environment variables, and service tokens (XE51xx)"
      ],
      "markdownUrl": "https://docs.xeer.run/reference/diagnostics.md",
      "canonicalUrl": "https://docs.xeer.run/reference/diagnostics",
      "contentHash": "sha256:1bf239e4ce4aae0dfd4397afa6eb4f60b73adfc391a59b26efa74496d8330964",
      "asset": "reference/diagnostics.md"
    },
    {
      "path": "/faq",
      "title": "FAQ",
      "description": "Access, infrastructure, limits, and the questions that come up first.",
      "headings": [
        "What is Xeer, in one sentence?",
        "Can I get an account?",
        "Do my app's users need a Xeer account?",
        "Do I have to use the hosted platform?",
        "What is it actually running on?",
        "Which Node.js version?",
        "Is it TypeScript-only?",
        "Why is the package called @impetik/xeer?",
        "React, or Preact?",
        "Can I use my own UI library, or Tailwind, or a component kit?",
        "Why can't I write the query I want?",
        "Where do I put an API key?",
        "How do live updates work, and how do I turn them on?",
        "Is there file or blob storage?",
        "Are there limits during the beta?",
        "Is preview a copy of production's data?",
        "What happens if a deploy goes wrong?",
        "Can I take my data out?",
        "Is it stable? Can I build something real on it?",
        "How do I report a bug or ask for something?",
        "Is it open source?",
        "Why does an agent keep coming up in the docs?"
      ],
      "markdownUrl": "https://docs.xeer.run/faq.md",
      "canonicalUrl": "https://docs.xeer.run/faq",
      "contentHash": "sha256:edea743063d5c4c5c7ca76258c2630c3b6f796d8843ed8ce0035a5b7650a5d78",
      "asset": "faq.md"
    }
  ]
}
