Core Concepts
Page and Content
Understand the page model, key fields, and publication states.
A page is the basic content unit in Anydocs. It carries canonical body content, publication state, template-driven metadata, and optional derived text output used by search and AI systems.
What a canonical page contains
A page file serves editing, publication, and machine-readable use cases at the same time.
- `id`: unique page identifier and the target used by navigation references
- `lang`: the page language
- `slug`: reader URL path segment that must be unique within its language
- `title` and `description`: page title and summary
- `status`: one of `draft`, `in_review`, or `published`
- `tags`: optional tag list
- `content`: canonical `DocContentV1` source of truth for the page body
- `render.markdown` and `render.plainText`: optional derived text output used by search and AI delivery, usually regenerated from `content`
Templates, metadata, and review
Pages can carry structured template information in addition to body content and basic fields.
- `template`: the template id applied to the page
- `metadata`: structured values defined by the template schema, not an arbitrary free-form object
- `review`: review requirements and approval state that can block direct publication
- Public machine-readable outputs only expose metadata fields whose visibility is `public`; `internal` metadata does not appear in public `mcp/pages.<lang>.json`
Status and public visibility boundaries
Whether a page is public is controlled by status, not by file existence.
- `draft`: stays in the source project and does not enter the reader or public outputs
- `in_review`: awaits approval and still does not enter the reader or public outputs
- `published`: enters the reader, search indexes, `llms.txt`, `llms-full.txt`, and `mcp/` outputs
Maintenance guidance
Prefer Studio or MCP for normal maintenance so `content`, `render`, status, and validation rules stay aligned.
page_set_status({ projectRoot: "/path/to/project", lang: "en", pageId: "guide", status: "published" })Do not publish through page_update: Keep content edits and status changes separate. Use `page_set_status` when the page is ready to publish.