# Documentation (/docs)

---
title: Documentation
description: QUESTPIE derives a database schema, a typed API, an admin and a client from one description of your data. These pages cover what you declare, what you write beside it, and what you configure underneath.
kind: guide
package: questpie
---

Nine groups. These two teach, in order.

<Cards className="qp-doc-lead">
	<Card
		title="Learn"
		href="/docs/learn"
		description="What QUESTPIE is, the one-schema model, and a first app end to end."
	/>
	<Card
		title="Guides"
		href="/docs/guides"
		description="One job each, start to finish. An agent connected, a slow request traced."
	/>
</Cards>

The other seven are where you look things up.

<Cards className="qp-doc-groups">
	<Card
		title="Schema"
		href="/docs/schema"
		description="Collections, fields, relations, access rules, hooks."
	/>
	<Card
		title="Code"
		href="/docs/code"
		description="Routes, services, jobs, emails, modules, codegen."
	/>
	<Card
		title="Infrastructure"
		href="/docs/infrastructure"
		description="Storage, queue, search, realtime, KV, email, sandbox."
	/>
	<Card
		title="Client"
		href="/docs/client"
		description="The typed client, query helpers, realtime subscriptions."
	/>
	<Card
		title="Admin"
		href="/docs/admin"
		description="The generated workspace and your own views inside it."
	/>
	<Card
		title="Agents"
		href="/docs/agents"
		description="MCP, OpenAPI, and the plain-text docs."
	/>
	<Card
		title="Ship"
		href="/docs/ship"
		description="Configuration, environment, migrations, scaling, monitoring."
	/>
</Cards>

## The shortest version

You describe a table in a file. The generator reads that file and writes a typed
app object, five REST routes and a client that carries the same types. Change the
description and all of them move together, because none of it was written twice.

```ts title="src/questpie/server/collections/news.ts"
import { collection } from "#questpie/factories";

export const news = collection("news").fields(({ f }) => ({
	title: f.text(255).label("Title").required(),
	isPublished: f.boolean().default(false),
}));
```

**[What QUESTPIE is](/docs/learn)** takes that file apart: what the core builds
from it, what the modules add, and which package each piece comes from.
