# Docsloth Registry — full text > Every page of the registry as Markdown, in catalog order, generated from packages/contracts. The HTML projections live beside them on the market routes and in the publication bundle under /pages/. --- # Docsloth Registry Component registry 57 protocol components for agent-readable documentation, served from one catalog. Every entry carries a trust class, a JSON Schema for its props, a specification and an install command, and every generated page ships an HTML and Markdown twin from one source of truth. ## Featured Six renderer-native blocks from the current catalog. Their example output is produced by `@docsloth/renderer` on every page; the same catalog feeds the per-entry pages and the machine-readable API. ### prose Readable structured narrative Trust class: pure · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/prose@1.0.0 ``` ### callout Important contextual warnings Trust class: pure · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/callout@1.0.0 ``` ### code Syntax-highlighted copyable code Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/code@1.0.0 ``` ### table Filterable structured reference Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/table@1.0.0 ``` ### tabs Switch related presentations Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/tabs@1.0.0 ``` ### steps Ordered walkthrough steps Trust class: pure · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/steps@1.0.0 ``` ## Categories The registry is organised into category routes. Membership is derived from the catalog, so a category with no matching entry renders an honest empty state instead of a placeholder listing. | Category | Route | Entries | Status | | --- | --- | --- | --- | | [Components](https://registry.docsloth.dev/components) | [/components](https://registry.docsloth.dev/components) | 57 | populated from the catalog | | [Blocks](https://registry.docsloth.dev/blocks) | [/blocks](https://registry.docsloth.dev/blocks) | 57 | populated from the catalog | | [Templates](https://registry.docsloth.dev/templates) | [/templates](https://registry.docsloth.dev/templates) | 0 | roadmap — honest empty state | | [Themes](https://registry.docsloth.dev/themes) | [/themes](https://registry.docsloth.dev/themes) | 0 | roadmap — honest empty state | | [Adapters](https://registry.docsloth.dev/adapters) | [/adapters](https://registry.docsloth.dev/adapters) | 0 | roadmap — honest empty state | | [Recipes](https://registry.docsloth.dev/recipes) | [/recipes](https://registry.docsloth.dev/recipes) | 0 | roadmap — honest empty state | ## All components ### prose Readable structured narrative Trust class: pure · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/prose@1.0.0 ``` ### callout Important contextual warnings Trust class: pure · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/callout@1.0.0 ``` ### tabs Switch related presentations Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/tabs@1.0.0 ``` ### table Filterable structured reference Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/table@1.0.0 ``` ### code Syntax-highlighted copyable code Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/code@1.0.0 ``` ### code-diff Inspect a versioned example change Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/code-diff@1.0.0 ``` ### live-code Execute an example in an approved environment Trust class: connected · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/live-code@1.0.0 ``` ### terminal Interactive command example with sandbox binding Trust class: connected · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/terminal@1.0.0 ``` ### api-console Build and send approved API requests Trust class: connected · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/api-console@1.0.0 ``` ### api-reference Render canonical API schema and examples Trust class: pure · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/api-reference@1.0.0 ``` ### schema-explorer Explore an object or database schema Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/schema-explorer@1.0.0 ``` ### graph Explore services and software relationships Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/graph@1.0.0 ``` ### sequence Explain message ordering Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/sequence@1.0.0 ``` ### state-machine Explore a bounded state machine Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/state-machine@1.0.0 ``` ### tutorial Verified multistep task tutorial Trust class: connected · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/tutorial@1.0.0 ``` ### wizard Collect configuration and validate prerequisites Trust class: connected · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/wizard@1.0.0 ``` ### chat Page-scoped sourced documentation assistance Trust class: agentic · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/chat@1.0.0 ``` ### chat-bubble Floating contextual documentation assistant Trust class: agentic · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/chat-bubble@1.0.0 ``` ### troubleshooter Diagnose an authorized redacted error Trust class: agentic · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/troubleshooter@1.0.0 ``` ### agent-task Run a scoped documentation task Trust class: agentic · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/agent-task@1.0.0 ``` ### search Published content search with static fallback Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/search@1.0.0 ``` ### video Accessible recorded walkthrough Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/video@1.0.0 ``` ### gif Short annotated motion with static alternative Trust class: pure · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/gif@1.0.0 ``` ### image Accessible versioned screenshot Trust class: pure · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/image@1.0.0 ``` ### release-timeline Published version and migration history Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/release-timeline@1.0.0 ``` ### migration Before-and-after change guide Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/migration@1.0.0 ``` ### permissions Read-only permission matrix Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/permissions@1.0.0 ``` ### configurator Prepare safe software configuration Trust class: connected · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/configurator@1.0.0 ``` ### webhook-debugger Inspect synthetic approved webhook delivery Trust class: connected · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/webhook-debugger@1.0.0 ``` ### event-stream Inspect an authorized event stream Trust class: connected · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/event-stream@1.0.0 ``` ### logs View redacted approved diagnostic logs Trust class: connected · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/logs@1.0.0 ``` ### status Read-only authorized deployment status Trust class: connected · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/status@1.0.0 ``` ### feedback Submit bounded document feedback Trust class: connected · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/feedback@1.0.0 ``` ### checklist Track local tutorial progress Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/checklist@1.0.0 ``` ### cards Choose task-oriented navigation Trust class: pure · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/cards@1.0.0 ``` ### breadcrumbs Show page hierarchy Trust class: pure · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/breadcrumbs@1.0.0 ``` ### version-selector Choose an actual available release Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/version-selector@1.0.0 ``` ### locale-selector Choose an available language Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/locale-selector@1.0.0 ``` ### copy-context Export permitted agent context Trust class: connected · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/copy-context@1.0.0 ``` ### apply-to-repo Prepare a reader-authorized integration PR Trust class: agentic · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/apply-to-repo@1.0.0 ``` ### embed Isolated approved external UI Trust class: connected · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/embed@1.0.0 ``` ### metrics Display authorized aggregate metrics Trust class: connected · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/metrics@1.0.0 ``` ### media-transcript Accessible transcript tied to media version Trust class: pure · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/media-transcript@1.0.0 ``` ### faq Task-oriented evidenced question answers Trust class: pure · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/faq@1.0.0 ``` ### glossary Software terminology and concepts Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/glossary@1.0.0 ``` ### download Integrity-checked approved artifact download Trust class: connected · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/download@1.0.0 ``` ### pricing-reference Owner-sourced product prices; never inferred from code Trust class: pure · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/pricing-reference@1.0.0 ``` ### source-evidence Expose audience-safe verification evidence Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/source-evidence@1.0.0 ``` ### steps Ordered walkthrough steps Trust class: pure · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/steps@1.0.0 ``` ### accordion Progressive disclosure of optional detail Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/accordion@1.0.0 ``` ### badge Compact status label Trust class: pure · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/badge@1.0.0 ``` ### kbd Keyboard shortcut chord Trust class: pure · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/kbd@1.0.0 ``` ### api-playground Describe an API request without executing it Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/api-playground@1.0.0 ``` ### openapi-operation Static OpenAPI operation reference Trust class: pure · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/openapi-operation@1.0.0 ``` ### mermaid Mermaid diagram source kept readable for agents Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/mermaid@1.0.0 ``` ### code-group Labelled alternative code samples Trust class: interactive · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/code-group@1.0.0 ``` ### versioned-content Version-scoped content region Trust class: pure · Status: implemented_native · Renderer: native block ```sh docsloth component add @docsloth/versioned-content@1.0.0 ``` ## Publishing Components enter the registry as declarative packages: build from source, publish to a registry, and the catalog index picks the entry up. The full contract — package kinds, the `POST /v1/packages` call, tokens and immutability rules — is in [/publish](https://registry.docsloth.dev/publish) and machine-readable at [/api/v1/publish.json](https://registry.docsloth.dev/api/v1/publish.json). ```sh docsloth component build --dir ./package docsloth component publish --dir ./package --registry https://registry.docsloth.dev ``` ## Trust classes | Trust class | Components | Contract | | --- | --- | --- | | pure | 15 | pure render; no side effects, network or permission states | | interactive | 22 | local interaction only; no network or secrets | | connected | 15 | requires an explicit host capability grant; never receives raw credentials | | agentic | 5 | proposes named tools; every effect is host-authorized per call | ## Agent surfaces The registry publishes agent surfaces next to the human pages: llms.txt (root index), llms-full.txt (every page as Markdown), one scoped index per trust class under _llms/, catalog.json (machine-readable catalog), the machine-readable /api/v1 (search index, catalog, per-component metadata, version resolution and the publishing contract), sitemap.xml, and a Markdown twin for every page. ## Status All 57 entries carry the catalog's implementation status (57 `implemented_native` today). The status shown per component is the catalog value, not a marketing claim; when the catalog changes, this site changes with it. --- # Components Registry category `/components` — every entry in packages/contracts/component-catalog.json, whatever its package kind. | Field | Value | | --- | --- | | Route | [/components](https://registry.docsloth.dev/components) | | Catalog entries | 57 | | Status | populated from the current catalog | | Source of truth | packages/contracts/component-catalog.json | ## Components entries (57) | Component | Trust class | Status | Renderer | | --- | --- | --- | --- | | [prose](https://registry.docsloth.dev/components/prose.html) | pure | implemented_native | native block | | [callout](https://registry.docsloth.dev/components/callout.html) | pure | implemented_native | native block | | [tabs](https://registry.docsloth.dev/components/tabs.html) | interactive | implemented_native | native block | | [table](https://registry.docsloth.dev/components/table.html) | interactive | implemented_native | native block | | [code](https://registry.docsloth.dev/components/code.html) | interactive | implemented_native | native block | | [code-diff](https://registry.docsloth.dev/components/code-diff.html) | interactive | implemented_native | native block | | [live-code](https://registry.docsloth.dev/components/live-code.html) | connected | implemented_native | native block | | [terminal](https://registry.docsloth.dev/components/terminal.html) | connected | implemented_native | native block | | [api-console](https://registry.docsloth.dev/components/api-console.html) | connected | implemented_native | native block | | [api-reference](https://registry.docsloth.dev/components/api-reference.html) | pure | implemented_native | native block | | [schema-explorer](https://registry.docsloth.dev/components/schema-explorer.html) | interactive | implemented_native | native block | | [graph](https://registry.docsloth.dev/components/graph.html) | interactive | implemented_native | native block | | [sequence](https://registry.docsloth.dev/components/sequence.html) | interactive | implemented_native | native block | | [state-machine](https://registry.docsloth.dev/components/state-machine.html) | interactive | implemented_native | native block | | [tutorial](https://registry.docsloth.dev/components/tutorial.html) | connected | implemented_native | native block | | [wizard](https://registry.docsloth.dev/components/wizard.html) | connected | implemented_native | native block | | [chat](https://registry.docsloth.dev/components/chat.html) | agentic | implemented_native | native block | | [chat-bubble](https://registry.docsloth.dev/components/chat-bubble.html) | agentic | implemented_native | native block | | [troubleshooter](https://registry.docsloth.dev/components/troubleshooter.html) | agentic | implemented_native | native block | | [agent-task](https://registry.docsloth.dev/components/agent-task.html) | agentic | implemented_native | native block | | [search](https://registry.docsloth.dev/components/search.html) | interactive | implemented_native | native block | | [video](https://registry.docsloth.dev/components/video.html) | interactive | implemented_native | native block | | [gif](https://registry.docsloth.dev/components/gif.html) | pure | implemented_native | native block | | [image](https://registry.docsloth.dev/components/image.html) | pure | implemented_native | native block | | [release-timeline](https://registry.docsloth.dev/components/release-timeline.html) | interactive | implemented_native | native block | | [migration](https://registry.docsloth.dev/components/migration.html) | interactive | implemented_native | native block | | [permissions](https://registry.docsloth.dev/components/permissions.html) | interactive | implemented_native | native block | | [configurator](https://registry.docsloth.dev/components/configurator.html) | connected | implemented_native | native block | | [webhook-debugger](https://registry.docsloth.dev/components/webhook-debugger.html) | connected | implemented_native | native block | | [event-stream](https://registry.docsloth.dev/components/event-stream.html) | connected | implemented_native | native block | | [logs](https://registry.docsloth.dev/components/logs.html) | connected | implemented_native | native block | | [status](https://registry.docsloth.dev/components/status.html) | connected | implemented_native | native block | | [feedback](https://registry.docsloth.dev/components/feedback.html) | connected | implemented_native | native block | | [checklist](https://registry.docsloth.dev/components/checklist.html) | interactive | implemented_native | native block | | [cards](https://registry.docsloth.dev/components/cards.html) | pure | implemented_native | native block | | [breadcrumbs](https://registry.docsloth.dev/components/breadcrumbs.html) | pure | implemented_native | native block | | [version-selector](https://registry.docsloth.dev/components/version-selector.html) | interactive | implemented_native | native block | | [locale-selector](https://registry.docsloth.dev/components/locale-selector.html) | interactive | implemented_native | native block | | [copy-context](https://registry.docsloth.dev/components/copy-context.html) | connected | implemented_native | native block | | [apply-to-repo](https://registry.docsloth.dev/components/apply-to-repo.html) | agentic | implemented_native | native block | | [embed](https://registry.docsloth.dev/components/embed.html) | connected | implemented_native | native block | | [metrics](https://registry.docsloth.dev/components/metrics.html) | connected | implemented_native | native block | | [media-transcript](https://registry.docsloth.dev/components/media-transcript.html) | pure | implemented_native | native block | | [faq](https://registry.docsloth.dev/components/faq.html) | pure | implemented_native | native block | | [glossary](https://registry.docsloth.dev/components/glossary.html) | interactive | implemented_native | native block | | [download](https://registry.docsloth.dev/components/download.html) | connected | implemented_native | native block | | [pricing-reference](https://registry.docsloth.dev/components/pricing-reference.html) | pure | implemented_native | native block | | [source-evidence](https://registry.docsloth.dev/components/source-evidence.html) | interactive | implemented_native | native block | | [steps](https://registry.docsloth.dev/components/steps.html) | pure | implemented_native | native block | | [accordion](https://registry.docsloth.dev/components/accordion.html) | interactive | implemented_native | native block | | [badge](https://registry.docsloth.dev/components/badge.html) | pure | implemented_native | native block | | [kbd](https://registry.docsloth.dev/components/kbd.html) | pure | implemented_native | native block | | [api-playground](https://registry.docsloth.dev/components/api-playground.html) | interactive | implemented_native | native block | | [openapi-operation](https://registry.docsloth.dev/components/openapi-operation.html) | pure | implemented_native | native block | | [mermaid](https://registry.docsloth.dev/components/mermaid.html) | interactive | implemented_native | native block | | [code-group](https://registry.docsloth.dev/components/code-group.html) | interactive | implemented_native | native block | | [versioned-content](https://registry.docsloth.dev/components/versioned-content.html) | pure | implemented_native | native block | Machine metadata: every entry is served as JSON under [/api/v1](https://registry.docsloth.dev/api/v1/index.json); per-entry metadata and version resolution live at `/api/v1/components/.json`. All 57 entries in the current catalog are installable block packages; the [blocks category](https://registry.docsloth.dev/blocks) is the install-oriented view of the same catalog, and the [templates](https://registry.docsloth.dev/templates), [themes](https://registry.docsloth.dev/themes), [adapters](https://registry.docsloth.dev/adapters) and [recipes](https://registry.docsloth.dev/recipes) routes are roadmap categories with honest empty states until entries are registered. ## Other categories Category membership is derived from the single catalog read by the generator; an empty category means the catalog has no matching entry today. | Category | Route | Entries | Status | | --- | --- | --- | --- | | [Components](https://registry.docsloth.dev/components) | [/components](https://registry.docsloth.dev/components) | 57 | populated | | [Blocks](https://registry.docsloth.dev/blocks) | [/blocks](https://registry.docsloth.dev/blocks) | 57 | populated | | [Templates](https://registry.docsloth.dev/templates) | [/templates](https://registry.docsloth.dev/templates) | 0 | roadmap | | [Themes](https://registry.docsloth.dev/themes) | [/themes](https://registry.docsloth.dev/themes) | 0 | roadmap | | [Adapters](https://registry.docsloth.dev/adapters) | [/adapters](https://registry.docsloth.dev/adapters) | 0 | roadmap | | [Recipes](https://registry.docsloth.dev/recipes) | [/recipes](https://registry.docsloth.dev/recipes) | 0 | roadmap | --- # Blocks Registry category `/blocks` — catalog entries that resolve to a renderer-native document-IR block. | Field | Value | | --- | --- | | Route | [/blocks](https://registry.docsloth.dev/blocks) | | Catalog entries | 57 | | Status | populated from the current catalog | | Source of truth | packages/contracts/component-catalog.json | ## Blocks entries (57) | Block | Package | Version | Digest | Install | | --- | --- | --- | --- | --- | | [prose](https://registry.docsloth.dev/components/prose.html) | @docsloth/prose | 1.0.0 | sha256:d4b0bbe677092b9f… | `docsloth component add @docsloth/prose@1.0.0` | | [callout](https://registry.docsloth.dev/components/callout.html) | @docsloth/callout | 1.0.0 | sha256:584792d30684ff49… | `docsloth component add @docsloth/callout@1.0.0` | | [tabs](https://registry.docsloth.dev/components/tabs.html) | @docsloth/tabs | 1.0.0 | sha256:2b5dfd26ede0e42e… | `docsloth component add @docsloth/tabs@1.0.0` | | [table](https://registry.docsloth.dev/components/table.html) | @docsloth/table | 1.0.0 | sha256:9eb3021214ce7a96… | `docsloth component add @docsloth/table@1.0.0` | | [code](https://registry.docsloth.dev/components/code.html) | @docsloth/code | 1.0.0 | sha256:f8b010a4d36aafdd… | `docsloth component add @docsloth/code@1.0.0` | | [code-diff](https://registry.docsloth.dev/components/code-diff.html) | @docsloth/code-diff | 1.0.0 | sha256:8c0bab13a0340978… | `docsloth component add @docsloth/code-diff@1.0.0` | | [live-code](https://registry.docsloth.dev/components/live-code.html) | @docsloth/live-code | 1.0.0 | sha256:337712c7adaa1265… | `docsloth component add @docsloth/live-code@1.0.0` | | [terminal](https://registry.docsloth.dev/components/terminal.html) | @docsloth/terminal | 1.0.0 | sha256:914d3972d1e95775… | `docsloth component add @docsloth/terminal@1.0.0` | | [api-console](https://registry.docsloth.dev/components/api-console.html) | @docsloth/api-console | 1.0.0 | sha256:e2d2026301632769… | `docsloth component add @docsloth/api-console@1.0.0` | | [api-reference](https://registry.docsloth.dev/components/api-reference.html) | @docsloth/api-reference | 1.0.0 | sha256:f160e0216f9fe7a0… | `docsloth component add @docsloth/api-reference@1.0.0` | | [schema-explorer](https://registry.docsloth.dev/components/schema-explorer.html) | @docsloth/schema-explorer | 1.0.0 | sha256:6ef70bb86f675d5c… | `docsloth component add @docsloth/schema-explorer@1.0.0` | | [graph](https://registry.docsloth.dev/components/graph.html) | @docsloth/graph | 1.0.0 | sha256:6d641e2333187733… | `docsloth component add @docsloth/graph@1.0.0` | | [sequence](https://registry.docsloth.dev/components/sequence.html) | @docsloth/sequence | 1.0.0 | sha256:a080361d569b2b4b… | `docsloth component add @docsloth/sequence@1.0.0` | | [state-machine](https://registry.docsloth.dev/components/state-machine.html) | @docsloth/state-machine | 1.0.0 | sha256:91bd9464a06f102f… | `docsloth component add @docsloth/state-machine@1.0.0` | | [tutorial](https://registry.docsloth.dev/components/tutorial.html) | @docsloth/tutorial | 1.0.0 | sha256:d8935cd3b71884c7… | `docsloth component add @docsloth/tutorial@1.0.0` | | [wizard](https://registry.docsloth.dev/components/wizard.html) | @docsloth/wizard | 1.0.0 | sha256:500b2eb0f2f3cd3c… | `docsloth component add @docsloth/wizard@1.0.0` | | [chat](https://registry.docsloth.dev/components/chat.html) | @docsloth/chat | 1.0.0 | sha256:55a9c459b0ce2a7b… | `docsloth component add @docsloth/chat@1.0.0` | | [chat-bubble](https://registry.docsloth.dev/components/chat-bubble.html) | @docsloth/chat-bubble | 1.0.0 | sha256:f2e372a38f97e05c… | `docsloth component add @docsloth/chat-bubble@1.0.0` | | [troubleshooter](https://registry.docsloth.dev/components/troubleshooter.html) | @docsloth/troubleshooter | 1.0.0 | sha256:cc7e3d2eb1477955… | `docsloth component add @docsloth/troubleshooter@1.0.0` | | [agent-task](https://registry.docsloth.dev/components/agent-task.html) | @docsloth/agent-task | 1.0.0 | sha256:493a794a66adc031… | `docsloth component add @docsloth/agent-task@1.0.0` | | [search](https://registry.docsloth.dev/components/search.html) | @docsloth/search | 1.0.0 | sha256:17cff85734c80028… | `docsloth component add @docsloth/search@1.0.0` | | [video](https://registry.docsloth.dev/components/video.html) | @docsloth/video | 1.0.0 | sha256:5e1d7e446c9173e2… | `docsloth component add @docsloth/video@1.0.0` | | [gif](https://registry.docsloth.dev/components/gif.html) | @docsloth/gif | 1.0.0 | sha256:deb4d9079a20d46f… | `docsloth component add @docsloth/gif@1.0.0` | | [image](https://registry.docsloth.dev/components/image.html) | @docsloth/image | 1.0.0 | sha256:916c97ac0ee5c5bc… | `docsloth component add @docsloth/image@1.0.0` | | [release-timeline](https://registry.docsloth.dev/components/release-timeline.html) | @docsloth/release-timeline | 1.0.0 | sha256:4f0e51678b85f762… | `docsloth component add @docsloth/release-timeline@1.0.0` | | [migration](https://registry.docsloth.dev/components/migration.html) | @docsloth/migration | 1.0.0 | sha256:1e33029c22b4ace4… | `docsloth component add @docsloth/migration@1.0.0` | | [permissions](https://registry.docsloth.dev/components/permissions.html) | @docsloth/permissions | 1.0.0 | sha256:4723e1b392af90ca… | `docsloth component add @docsloth/permissions@1.0.0` | | [configurator](https://registry.docsloth.dev/components/configurator.html) | @docsloth/configurator | 1.0.0 | sha256:97c8deb6cdb1b954… | `docsloth component add @docsloth/configurator@1.0.0` | | [webhook-debugger](https://registry.docsloth.dev/components/webhook-debugger.html) | @docsloth/webhook-debugger | 1.0.0 | sha256:84dab19a37c1a8b2… | `docsloth component add @docsloth/webhook-debugger@1.0.0` | | [event-stream](https://registry.docsloth.dev/components/event-stream.html) | @docsloth/event-stream | 1.0.0 | sha256:562d76e0327281cf… | `docsloth component add @docsloth/event-stream@1.0.0` | | [logs](https://registry.docsloth.dev/components/logs.html) | @docsloth/logs | 1.0.0 | sha256:ab7d4448c13820a9… | `docsloth component add @docsloth/logs@1.0.0` | | [status](https://registry.docsloth.dev/components/status.html) | @docsloth/status | 1.0.0 | sha256:595525426f7f977b… | `docsloth component add @docsloth/status@1.0.0` | | [feedback](https://registry.docsloth.dev/components/feedback.html) | @docsloth/feedback | 1.0.0 | sha256:ea984d36a3eb7427… | `docsloth component add @docsloth/feedback@1.0.0` | | [checklist](https://registry.docsloth.dev/components/checklist.html) | @docsloth/checklist | 1.0.0 | sha256:90d811d2436bb54d… | `docsloth component add @docsloth/checklist@1.0.0` | | [cards](https://registry.docsloth.dev/components/cards.html) | @docsloth/cards | 1.0.0 | sha256:135257635d5f1c26… | `docsloth component add @docsloth/cards@1.0.0` | | [breadcrumbs](https://registry.docsloth.dev/components/breadcrumbs.html) | @docsloth/breadcrumbs | 1.0.0 | sha256:eb968b49affbedc9… | `docsloth component add @docsloth/breadcrumbs@1.0.0` | | [version-selector](https://registry.docsloth.dev/components/version-selector.html) | @docsloth/version-selector | 1.0.0 | sha256:124601d299ec95bd… | `docsloth component add @docsloth/version-selector@1.0.0` | | [locale-selector](https://registry.docsloth.dev/components/locale-selector.html) | @docsloth/locale-selector | 1.0.0 | sha256:e44ff75e611cc9dc… | `docsloth component add @docsloth/locale-selector@1.0.0` | | [copy-context](https://registry.docsloth.dev/components/copy-context.html) | @docsloth/copy-context | 1.0.0 | sha256:7384e22a62ec776e… | `docsloth component add @docsloth/copy-context@1.0.0` | | [apply-to-repo](https://registry.docsloth.dev/components/apply-to-repo.html) | @docsloth/apply-to-repo | 1.0.0 | sha256:3314002b84cf7826… | `docsloth component add @docsloth/apply-to-repo@1.0.0` | | [embed](https://registry.docsloth.dev/components/embed.html) | @docsloth/embed | 1.0.0 | sha256:77645d8b323a2fc8… | `docsloth component add @docsloth/embed@1.0.0` | | [metrics](https://registry.docsloth.dev/components/metrics.html) | @docsloth/metrics | 1.0.0 | sha256:689a423f12cd771f… | `docsloth component add @docsloth/metrics@1.0.0` | | [media-transcript](https://registry.docsloth.dev/components/media-transcript.html) | @docsloth/media-transcript | 1.0.0 | sha256:ed248c31e409e5b4… | `docsloth component add @docsloth/media-transcript@1.0.0` | | [faq](https://registry.docsloth.dev/components/faq.html) | @docsloth/faq | 1.0.0 | sha256:7bb429cc396b17aa… | `docsloth component add @docsloth/faq@1.0.0` | | [glossary](https://registry.docsloth.dev/components/glossary.html) | @docsloth/glossary | 1.0.0 | sha256:4c45f87cd38b58fb… | `docsloth component add @docsloth/glossary@1.0.0` | | [download](https://registry.docsloth.dev/components/download.html) | @docsloth/download | 1.0.0 | sha256:f1a556413ebbbde3… | `docsloth component add @docsloth/download@1.0.0` | | [pricing-reference](https://registry.docsloth.dev/components/pricing-reference.html) | @docsloth/pricing-reference | 1.0.0 | sha256:ae1e3fa052f90eca… | `docsloth component add @docsloth/pricing-reference@1.0.0` | | [source-evidence](https://registry.docsloth.dev/components/source-evidence.html) | @docsloth/source-evidence | 1.0.0 | sha256:91585e02b9857ea1… | `docsloth component add @docsloth/source-evidence@1.0.0` | | [steps](https://registry.docsloth.dev/components/steps.html) | @docsloth/steps | 1.0.0 | sha256:0ba6c7b14beefa47… | `docsloth component add @docsloth/steps@1.0.0` | | [accordion](https://registry.docsloth.dev/components/accordion.html) | @docsloth/accordion | 1.0.0 | sha256:320b0d6b28817df9… | `docsloth component add @docsloth/accordion@1.0.0` | | [badge](https://registry.docsloth.dev/components/badge.html) | @docsloth/badge | 1.0.0 | sha256:861bab9e5ab9cd4f… | `docsloth component add @docsloth/badge@1.0.0` | | [kbd](https://registry.docsloth.dev/components/kbd.html) | @docsloth/kbd | 1.0.0 | sha256:e8a75f9817fa29cb… | `docsloth component add @docsloth/kbd@1.0.0` | | [api-playground](https://registry.docsloth.dev/components/api-playground.html) | @docsloth/api-playground | 1.0.0 | sha256:e32a8142a4770416… | `docsloth component add @docsloth/api-playground@1.0.0` | | [openapi-operation](https://registry.docsloth.dev/components/openapi-operation.html) | @docsloth/openapi-operation | 1.0.0 | sha256:0d07bbe12d974160… | `docsloth component add @docsloth/openapi-operation@1.0.0` | | [mermaid](https://registry.docsloth.dev/components/mermaid.html) | @docsloth/mermaid | 1.0.0 | sha256:96b5e8ca9f6f9073… | `docsloth component add @docsloth/mermaid@1.0.0` | | [code-group](https://registry.docsloth.dev/components/code-group.html) | @docsloth/code-group | 1.0.0 | sha256:eb5f37eae33a615a… | `docsloth component add @docsloth/code-group@1.0.0` | | [versioned-content](https://registry.docsloth.dev/components/versioned-content.html) | @docsloth/versioned-content | 1.0.0 | sha256:1e23f883a5debc8a… | `docsloth component add @docsloth/versioned-content@1.0.0` | Machine metadata: every entry is served as JSON under [/api/v1](https://registry.docsloth.dev/api/v1/index.json); per-entry metadata and version resolution live at `/api/v1/components/.json`. ## Other categories Category membership is derived from the single catalog read by the generator; an empty category means the catalog has no matching entry today. | Category | Route | Entries | Status | | --- | --- | --- | --- | | [Components](https://registry.docsloth.dev/components) | [/components](https://registry.docsloth.dev/components) | 57 | populated | | [Blocks](https://registry.docsloth.dev/blocks) | [/blocks](https://registry.docsloth.dev/blocks) | 57 | populated | | [Templates](https://registry.docsloth.dev/templates) | [/templates](https://registry.docsloth.dev/templates) | 0 | roadmap | | [Themes](https://registry.docsloth.dev/themes) | [/themes](https://registry.docsloth.dev/themes) | 0 | roadmap | | [Adapters](https://registry.docsloth.dev/adapters) | [/adapters](https://registry.docsloth.dev/adapters) | 0 | roadmap | | [Recipes](https://registry.docsloth.dev/recipes) | [/recipes](https://registry.docsloth.dev/recipes) | 0 | roadmap | --- # Templates Registry category `/templates` — starter page skeletons assembled from catalog blocks. | Field | Value | | --- | --- | | Route | [/templates](https://registry.docsloth.dev/templates) | | Catalog entries | 0 | | Status | roadmap — no entries yet (honest empty state) | | Source of truth | packages/contracts/component-catalog.json | ## Empty by design The catalog has no template entry and the package format has no template kind yet; templates are a roadmap category. A template appears here once it is registered as a catalog entry. This page is generated from the catalog: when a matching entry is registered, the listing replaces this empty state automatically. No placeholder entry is rendered because a placeholder would be a listing that does not exist. ## How an entry gets here ```sh docsloth component build --dir ./package docsloth component publish --dir ./package --registry https://registry.docsloth.dev [--token "$DOCSLOTH_TOKEN"] ``` The publishing contract is documented at [/publish](https://registry.docsloth.dev/publish) and served machine-readable at [/api/v1/publish.json](https://registry.docsloth.dev/api/v1/publish.json). ## Other categories Category membership is derived from the single catalog read by the generator; an empty category means the catalog has no matching entry today. | Category | Route | Entries | Status | | --- | --- | --- | --- | | [Components](https://registry.docsloth.dev/components) | [/components](https://registry.docsloth.dev/components) | 57 | populated | | [Blocks](https://registry.docsloth.dev/blocks) | [/blocks](https://registry.docsloth.dev/blocks) | 57 | populated | | [Templates](https://registry.docsloth.dev/templates) | [/templates](https://registry.docsloth.dev/templates) | 0 | roadmap | | [Themes](https://registry.docsloth.dev/themes) | [/themes](https://registry.docsloth.dev/themes) | 0 | roadmap | | [Adapters](https://registry.docsloth.dev/adapters) | [/adapters](https://registry.docsloth.dev/adapters) | 0 | roadmap | | [Recipes](https://registry.docsloth.dev/recipes) | [/recipes](https://registry.docsloth.dev/recipes) | 0 | roadmap | --- # Themes Registry category `/themes` — token and stylesheet packages (kind: theme). | Field | Value | | --- | --- | | Route | [/themes](https://registry.docsloth.dev/themes) | | Catalog entries | 0 | | Status | roadmap — no entries yet (honest empty state) | | Source of truth | packages/contracts/component-catalog.json | ## Empty by design The package format accepts kind: theme, but no theme package is registered in the catalog. First-party token work ships as @docsloth/theme-tokens in this repository and is not a catalog entry. This page is generated from the catalog: when a matching entry is registered, the listing replaces this empty state automatically. No placeholder entry is rendered because a placeholder would be a listing that does not exist. ## How an entry gets here ```sh docsloth component build --dir ./package docsloth component publish --dir ./package --registry https://registry.docsloth.dev [--token "$DOCSLOTH_TOKEN"] ``` The publishing contract is documented at [/publish](https://registry.docsloth.dev/publish) and served machine-readable at [/api/v1/publish.json](https://registry.docsloth.dev/api/v1/publish.json). ## Other categories Category membership is derived from the single catalog read by the generator; an empty category means the catalog has no matching entry today. | Category | Route | Entries | Status | | --- | --- | --- | --- | | [Components](https://registry.docsloth.dev/components) | [/components](https://registry.docsloth.dev/components) | 57 | populated | | [Blocks](https://registry.docsloth.dev/blocks) | [/blocks](https://registry.docsloth.dev/blocks) | 57 | populated | | [Templates](https://registry.docsloth.dev/templates) | [/templates](https://registry.docsloth.dev/templates) | 0 | roadmap | | [Themes](https://registry.docsloth.dev/themes) | [/themes](https://registry.docsloth.dev/themes) | 0 | roadmap | | [Adapters](https://registry.docsloth.dev/adapters) | [/adapters](https://registry.docsloth.dev/adapters) | 0 | roadmap | | [Recipes](https://registry.docsloth.dev/recipes) | [/recipes](https://registry.docsloth.dev/recipes) | 0 | roadmap | --- # Adapters Registry category `/adapters` — format projections (kind: adapter), such as framework importers. | Field | Value | | --- | --- | | Route | [/adapters](https://registry.docsloth.dev/adapters) | | Catalog entries | 0 | | Status | roadmap — no entries yet (honest empty state) | | Source of truth | packages/contracts/component-catalog.json | ## Empty by design The package format accepts kind: adapter; this repository ships @docsloth/adapters-docusaurus and @docsloth/adapters-mkdocs, but neither is registered in the catalog yet, so this category is empty. This page is generated from the catalog: when a matching entry is registered, the listing replaces this empty state automatically. No placeholder entry is rendered because a placeholder would be a listing that does not exist. ## How an entry gets here ```sh docsloth component build --dir ./package docsloth component publish --dir ./package --registry https://registry.docsloth.dev [--token "$DOCSLOTH_TOKEN"] ``` The publishing contract is documented at [/publish](https://registry.docsloth.dev/publish) and served machine-readable at [/api/v1/publish.json](https://registry.docsloth.dev/api/v1/publish.json). ## Other categories Category membership is derived from the single catalog read by the generator; an empty category means the catalog has no matching entry today. | Category | Route | Entries | Status | | --- | --- | --- | --- | | [Components](https://registry.docsloth.dev/components) | [/components](https://registry.docsloth.dev/components) | 57 | populated | | [Blocks](https://registry.docsloth.dev/blocks) | [/blocks](https://registry.docsloth.dev/blocks) | 57 | populated | | [Templates](https://registry.docsloth.dev/templates) | [/templates](https://registry.docsloth.dev/templates) | 0 | roadmap | | [Themes](https://registry.docsloth.dev/themes) | [/themes](https://registry.docsloth.dev/themes) | 0 | roadmap | | [Adapters](https://registry.docsloth.dev/adapters) | [/adapters](https://registry.docsloth.dev/adapters) | 0 | roadmap | | [Recipes](https://registry.docsloth.dev/recipes) | [/recipes](https://registry.docsloth.dev/recipes) | 0 | roadmap | --- # Recipes Registry category `/recipes` — composed how-to entries that combine catalog components. | Field | Value | | --- | --- | | Route | [/recipes](https://registry.docsloth.dev/recipes) | | Catalog entries | 0 | | Status | roadmap — no entries yet (honest empty state) | | Source of truth | packages/contracts/component-catalog.json | ## Empty by design No recipe entry or recipe contract exists yet; recipes are a roadmap category and are registered in the catalog before they appear here. This page is generated from the catalog: when a matching entry is registered, the listing replaces this empty state automatically. No placeholder entry is rendered because a placeholder would be a listing that does not exist. ## How an entry gets here ```sh docsloth component build --dir ./package docsloth component publish --dir ./package --registry https://registry.docsloth.dev [--token "$DOCSLOTH_TOKEN"] ``` The publishing contract is documented at [/publish](https://registry.docsloth.dev/publish) and served machine-readable at [/api/v1/publish.json](https://registry.docsloth.dev/api/v1/publish.json). ## Other categories Category membership is derived from the single catalog read by the generator; an empty category means the catalog has no matching entry today. | Category | Route | Entries | Status | | --- | --- | --- | --- | | [Components](https://registry.docsloth.dev/components) | [/components](https://registry.docsloth.dev/components) | 57 | populated | | [Blocks](https://registry.docsloth.dev/blocks) | [/blocks](https://registry.docsloth.dev/blocks) | 57 | populated | | [Templates](https://registry.docsloth.dev/templates) | [/templates](https://registry.docsloth.dev/templates) | 0 | roadmap | | [Themes](https://registry.docsloth.dev/themes) | [/themes](https://registry.docsloth.dev/themes) | 0 | roadmap | | [Adapters](https://registry.docsloth.dev/adapters) | [/adapters](https://registry.docsloth.dev/adapters) | 0 | roadmap | | [Recipes](https://registry.docsloth.dev/recipes) | [/recipes](https://registry.docsloth.dev/recipes) | 0 | roadmap | --- # Publish a component How a package enters the registry: build a declarative package from source, publish it to a registry, and read it back from the catalog. The package format is the same one every catalog entry uses. ## The package contract A package is a directory with a manifest (`component-package.json`), a payload and a JSON Schema for its props. `kind: block` packages are declarative document-IR content; nothing in a package executes on the host. | kind | what it ships | status | | --- | --- | --- | | `block` | declarative document-IR specs, prop schemas, tokens, READMEs | 57 entries in the current catalog | | `theme` | tokens and stylesheets | accepted by the format; no catalog entry yet | | `adapter` | format projections, such as framework importers | accepted by the format; no catalog entry yet | | `plugin` | third-party executable code | refused until a host sandbox with explicit capability grants exists | ## Build and publish ```sh docsloth component build --dir ./package [--out ./dist] ``` ```sh docsloth component publish --dir ./package --registry https://registry.docsloth.dev --token "$DOCSLOTH_TOKEN" ``` A directory registry works the same way without a token: `docsloth component publish --dir ./package --registry ./registry` writes `index.json` and `packages///{manifest.json,files/…}`. ## HTTP publishing contract | Field | Value | | --- | --- | | Method and path | `POST /v1/packages` | | Authorization | `Bearer ` (from `--token` or `DOCSLOTH_TOKEN`); the token is never stored in the manifest, the registry or stdout | | Body | `{ "manifest": { … }, "files": { "": "" } }` | | Success | `2xx { "ok": true, "digest": "sha256:…", "unchanged": true\|false }` | | Refusal | `409` (or any non-2xx) when a name+version is republished with different bytes (`DSL1705`); an identical republish is a no-op | The machine-readable contract is [/api/v1/publish.json](https://registry.docsloth.dev/api/v1/publish.json). Publishing auth and the hosted write path are cloud-side (owner / registry team); this static site documents the contract and does not accept publishes. ## What this registry serves | Surface | Path | What it carries | | --- | --- | --- | | Search index | [/api/v1/search.json](https://registry.docsloth.dev/api/v1/search.json) | every catalog entry with its description, trust class, status, tools, URLs and install ref | | Catalog | [/api/v1/catalog.json](https://registry.docsloth.dev/api/v1/catalog.json) | the same JSON as /catalog.json (one derivation, two routes) | | Component metadata | `/api/v1/components/.json` | one entry plus its version resolution | | Version resolution | [/api/v1/versions.json](https://registry.docsloth.dev/api/v1/versions.json) | 57 entries; 57 carry a built package version and digest, 0 keep the catalog placeholder | | Publishing contract | [/api/v1/publish.json](https://registry.docsloth.dev/api/v1/publish.json) | the POST /v1/packages contract, immutability rules and package kinds | | Agent index | [/llms.txt](https://registry.docsloth.dev/llms.txt) | the human/agent table of contents for every page | ## Honest limits The registry site is static: the API endpoints are pre-rendered files generated from `packages/contracts/component-catalog.json`, there is no request-time database and no query-time search service — clients filter the search index themselves. Version resolution reports the versions present in this generated catalog; a hosted registry resolves `latest` across all published versions. Index signatures, yank/revoke and publisher identity are registry-operator concerns and are out of scope here; see `docs/MARKET_FLOW.md` for the full chain and the failure codes. --- # prose Readable structured narrative | Field | Value | | --- | --- | | Trust class | pure | | Implementation status | implemented_native | | Renderer | native block | | Key prop (production schema) | markdown | | Key prop (protocol fixture) | text | | Tools | none | | Package version | 1.0.0 | | Package digest | sha256:d4b0bbe677092b9f3f18da834e52d00da0e036a88f98875af0f69040fbc6d21e | ## Install ```sh docsloth component add @docsloth/prose@1.0.0 ``` Live package: sha256:d4b0bbe677092b9f3f18da834e52d00da0e036a88f98875af0f69040fbc6d21e with 2 file digest(s); the catalog entry is generated from the built package, not a placeholder. ## Props The prop schema is normative in `packages/contracts/component-props/prose.schema.json`. | Prop | Type | Required | Constraints | | --- | --- | --- | --- | | `title` | string | no | maxLength: 160 | | `markdown` | string | yes | maxLength: 200000 | | `source` | object | no | additionalProperties: false | | `source.publication_id` | string | yes | format: uuid | | `source.fact_ids` | array | yes | | | `source.evidence_ids` | array | yes | | Example props generated from this schema: ```json { "title": "example-title", "markdown": "example-markdown", "source": { "publication_id": "00000000-0000-4000-8000-000000000000", "fact_ids": [ "00000000-0000-4000-8000-000000000000" ], "evidence_ids": [ "00000000-0000-4000-8000-000000000000" ] } } ``` Required props: markdown. ## Example Example document IR (the block the renderer consumes): ```json { "type": "prose", "props": { "text": "Readable structured narrative rendered from the document IR." } } ``` Renderer HTML (entities decoded and wrapped for display): ```html
Readable structured narrative rendered from the document IR.
``` Preview (interface-only; the markup above is the same output): The renderer resolves this component as a native block; the preview above is its real HTML output, and Markdown parity for native blocks is covered by the renderer test suite. ## Specification Generated from `packages/contracts/component-specs/prose.md`. ### Contract Production props are normative in `../contracts/component-props/prose.schema.json`. The corresponding `component-fixtures` manifest is only a minimal protocol fixture; use the production props schema when building the published package. The packaged artifact ships exactly its generated `component-package.json` manifest plus `props.schema.json` (the production props schema, copied byte-for-byte) and `spec.md` (this spec, copied byte-for-byte); it contains no executable payload, fallback implementation, Storybook, test suite, SSR harness or README. Rendering behavior and the acceptance cases below belong to the renderer and the repository tests, not to the package. Installation pins the package version and the digest of every shipped byte. ### Intended behavior Render sanitized semantic rich text with stable heading anchors; arbitrary raw HTML is off. ### Failure and fallback Malformed nodes reject a patch rather than emit unsafe HTML. ### Required acceptance cases Heading order, links, source badges and equivalent plain Markdown. Also test empty data, loading, denied access, browser without JS, mobile 360px, keyboard navigation, dark mode and an explicit constrained agent tool call. The server independently authorizes capability requests; a package manifest cannot grant authority. ### Data and maintenance Data bindings resolve from a specific publication/release vector and permitted fact/evidence graph. Configuration edits create versioned component patches. Update invalidation uses dependency IDs, never indiscriminate whole-page regeneration. Human-owned props survive automatic updates unless invalidated with an explicit conflict. Missing optional resources leave an honest inert/readable fallback, not a broken page or fake success. ### Cost and tools Pure/local interaction must never invoke a model by accident. Any model, remote query or executor call must reserve approved budget before dispatch. Public visitors do not inherit owner resources. The component may call only named tools in its signed manifest with valid typed inputs. A cancelled job stops polling and closes resources. No component gets platform administration, raw credentials or an unlimited execution loop. ## Package manifest Protocol fixture: `packages/contracts/component-fixtures/prose.json`. | Field | Value | | --- | --- | | Name | @docsloth/prose | | Version | 1.0.0 | | Protocol | 1.x | | License | Apache-2.0 | | Runtime | react | | Entry | dist/index.js | | Recording policy | masked | | Fallback | html, markdown, json | | Network hosts | none | | Production write | no | | Max runtime seconds | 0 | | Integrity | all zeros (protocol fixture placeholder) | ## Sources | Source | Path | | --- | --- | | Component page | https://registry.docsloth.dev/components/prose.html | | Markdown twin | https://registry.docsloth.dev/docs/prose.md | | LLM index | https://registry.docsloth.dev/llms.txt | | Specification | packages/contracts/component-specs/prose.md | | Prop schema | packages/contracts/component-props/prose.schema.json | | Protocol fixture | packages/contracts/component-fixtures/prose.json | | Catalog | packages/contracts/component-catalog.json | --- # callout Important contextual warnings | Field | Value | | --- | --- | | Trust class | pure | | Implementation status | implemented_native | | Renderer | native block | | Key prop (production schema) | tone | | Key prop (protocol fixture) | text | | Tools | none | | Package version | 1.0.0 | | Package digest | sha256:584792d30684ff49b50b69c8535eab21256c68c9a43ce20bff7cd02f4122235b | ## Install ```sh docsloth component add @docsloth/callout@1.0.0 ``` Live package: sha256:584792d30684ff49b50b69c8535eab21256c68c9a43ce20bff7cd02f4122235b with 2 file digest(s); the catalog entry is generated from the built package, not a placeholder. ## Props The prop schema is normative in `packages/contracts/component-props/callout.schema.json`. | Prop | Type | Required | Constraints | | --- | --- | --- | --- | | `title` | string | no | maxLength: 160 | | `tone` | "note" \| "warning" \| "danger" \| "success" | yes | | | `body` | string | yes | maxLength: 20000 | | `dismissible` | boolean | no | | Example props generated from this schema: ```json { "title": "example-title", "tone": "note", "body": "example-body", "dismissible": true } ``` Required props: tone, body. ## Example Example document IR (the block the renderer consumes): ```json { "type": "callout", "props": { "text": "Important contextual warning kept visible to agents and readers.", "tone": "info" } } ``` Renderer HTML (entities decoded and wrapped for display): ```html ``` Preview (interface-only; the markup above is the same output): The renderer resolves this component as a native block; the preview above is its real HTML output, and Markdown parity for native blocks is covered by the renderer test suite. ## Specification Generated from `packages/contracts/component-specs/callout.md`. ### Contract Production props are normative in `../contracts/component-props/callout.schema.json`. The corresponding `component-fixtures` manifest is only a minimal protocol fixture; use the production props schema when building the published package. The packaged artifact ships exactly its generated `component-package.json` manifest plus `props.schema.json` (the production props schema, copied byte-for-byte) and `spec.md` (this spec, copied byte-for-byte); it contains no executable payload, fallback implementation, Storybook, test suite, SSR harness or README. Rendering behavior and the acceptance cases below belong to the renderer and the repository tests, not to the package. Installation pins the package version and the digest of every shipped byte. ### Intended behavior The React component renders title, body and an explicit tone label, so meaning does not depend on color. Warning and danger notices are always persistent: the current schema does not carry required-step context. Note and success callouts may be dismissed only when `dismissible: true`. Dismissal is local to the current content; changing title, body, tone or effective permission resets it. No network, model or executor call occurs. ### Failure and fallback Unknown tones use Note. Missing or malformed body has a readable content-unavailable fallback. Author text is escaped. Server output keeps the content visible and omits dismissal controls until hydration, so no-JS readers see the complete notice. The native document renderer remains a static aside; dismissal is provided by the hydrated React component. ### Required acceptance cases Keyboard dismissal only when permitted; danger remains visible. Also test empty data, loading, denied access, browser without JS, mobile 360px, keyboard navigation, dark mode and an explicit constrained agent tool call. The server independently authorizes capability requests; a package manifest cannot grant authority. ### Data and maintenance Data bindings resolve from a specific publication/release vector and permitted fact/evidence graph. Configuration edits create versioned component patches. Update invalidation uses dependency IDs, never indiscriminate whole-page regeneration. Human-owned props survive automatic updates unless invalidated with an explicit conflict. Missing optional resources leave an honest inert/readable fallback, not a broken page or fake success. ### Cost and tools Pure/local interaction must never invoke a model by accident. Any model, remote query or executor call must reserve approved budget before dispatch. Public visitors do not inherit owner resources. The component may call only named tools in its signed manifest with valid typed inputs. A cancelled job stops polling and closes resources. No component gets platform administration, raw credentials or an unlimited execution loop. ## Package manifest Protocol fixture: `packages/contracts/component-fixtures/callout.json`. | Field | Value | | --- | --- | | Name | @docsloth/callout | | Version | 1.0.0 | | Protocol | 1.x | | License | Apache-2.0 | | Runtime | react | | Entry | dist/index.js | | Recording policy | masked | | Fallback | html, markdown, json | | Network hosts | none | | Production write | no | | Max runtime seconds | 0 | | Integrity | all zeros (protocol fixture placeholder) | ## Sources | Source | Path | | --- | --- | | Component page | https://registry.docsloth.dev/components/callout.html | | Markdown twin | https://registry.docsloth.dev/docs/callout.md | | LLM index | https://registry.docsloth.dev/llms.txt | | Specification | packages/contracts/component-specs/callout.md | | Prop schema | packages/contracts/component-props/callout.schema.json | | Protocol fixture | packages/contracts/component-fixtures/callout.json | | Catalog | packages/contracts/component-catalog.json | --- # tabs Switch related presentations | Field | Value | | --- | --- | | Trust class | interactive | | Implementation status | implemented_native | | Renderer | native block | | Key prop (production schema) | tabs | | Key prop (protocol fixture) | activeTab | | Tools | select_tab | | Package version | 1.0.0 | | Package digest | sha256:2b5dfd26ede0e42e1f49f55a30405ae643e5dc18fe13460286d0ad1b7f2bcc22 | ## Install ```sh docsloth component add @docsloth/tabs@1.0.0 ``` Live package: sha256:2b5dfd26ede0e42e1f49f55a30405ae643e5dc18fe13460286d0ad1b7f2bcc22 with 2 file digest(s); the catalog entry is generated from the built package, not a placeholder. ## Props The prop schema is normative in `packages/contracts/component-props/tabs.schema.json`. | Prop | Type | Required | Constraints | | --- | --- | --- | --- | | `title` | string | no | maxLength: 160 | | `tabs` | array | yes | minItems: 1 | | `default_id` | string | yes | maxLength: 256 | | `sync_key` | string | no | maxLength: 256 | Example props generated from this schema: ```json { "title": "example-title", "tabs": [ { "id": "example-id", "label": "example-label", "block_ids": [ "00000000-0000-4000-8000-000000000000" ] } ], "default_id": "example-default_id", "sync_key": "example-sync_key" } ``` Required props: tabs, default_id. ## Example Example document IR (the block the renderer consumes): ```json { "type": "tabs", "props": { "title": "Install", "active": 0 }, "children": [ { "type": "prose", "props": { "label": "npm", "text": "npm add @docsloth/renderer" } }, { "type": "code", "props": { "label": "pnpm", "language": "bash", "code": "pnpm add @docsloth/renderer" } } ] } ``` Renderer HTML (entities decoded and wrapped for display): ```html
npm add @docsloth/renderer
pnpm add @docsloth/renderer
``` Preview (interface-only; the markup above is the same output): The renderer resolves this component as a native block; the preview above is its real HTML output, and Markdown parity for native blocks is covered by the renderer test suite. ## Specification Generated from `packages/contracts/component-specs/tabs.md`. ### Contract Production props are normative in `../contracts/component-props/tabs.schema.json`. The corresponding `component-fixtures` manifest is only a minimal protocol fixture; use the production props schema when building the published package. The packaged artifact ships exactly its generated `component-package.json` manifest plus `props.schema.json` (the production props schema, copied byte-for-byte) and `spec.md` (this spec, copied byte-for-byte); it contains no executable payload, fallback implementation, Storybook, test suite, SSR harness or README. Rendering behavior and the acceptance cases below belong to the renderer and the repository tests, not to the package. Installation pins the package version and the digest of every shipped byte. ### Intended behavior ARIA tabs, arrow keys, retain each panel in readable fallback; sync language preference within version. ### React host integration The official React `Tabs` uses production `tabs`, `default_id`, `title` and `sync_key` props. It selects by ID across reordering; removing a selected tab restores the declared default (or the first tab when that default is absent). Arrow keys wrap, Home/End move to either end, and each tab is linked to its panel through ARIA attributes, following the [WAI-ARIA tabs pattern](https://www.w3.org/WAI/ARIA/apg/patterns/tabs/). A host supplies already-authorized, rendered release blocks with the exported `ComponentContentProvider` from `@docsloth/official-components/host`. Its `blocks` prop is a `ReadonlyMap` and `releaseId` identifies the publication release. Tabs resolve only their declared `block_ids` from that map; missing blocks show “Content unavailable.” No block fetch or tool call occurs on selection. The JSON component props remain serializable; the provider is a React host API, separate from those props. Tabs sharing a `sync_key` within one provider share the selected ID. Preferences stay in memory, are isolated from other providers, and reset when `releaseId` changes. The host must change that ID when switching releases. All panels render visibly on the server for readable no-JS fallback; hydration hides inactive panels while keeping their content mounted. This provider does not automatically wire the separate native document renderer or connected executor tools. ```tsx ``` ### Failure and fallback Unknown selected ID resets to declared default, not arbitrary new tab. ### Required acceptance cases No request or write occurs merely by selecting a tab. Also test empty data, loading, denied access, browser without JS, mobile 360px, keyboard navigation, dark mode and an explicit constrained agent tool call. The server independently authorizes capability requests; a package manifest cannot grant authority. ### Data and maintenance Data bindings resolve from a specific publication/release vector and permitted fact/evidence graph. Configuration edits create versioned component patches. Update invalidation uses dependency IDs, never indiscriminate whole-page regeneration. Human-owned props survive automatic updates unless invalidated with an explicit conflict. Missing optional resources leave an honest inert/readable fallback, not a broken page or fake success. ### Cost and tools Pure/local interaction must never invoke a model by accident. Any model, remote query or executor call must reserve approved budget before dispatch. Public visitors do not inherit owner resources. The component may call only named tools in its signed manifest with valid typed inputs. A cancelled job stops polling and closes resources. No component gets platform administration, raw credentials or an unlimited execution loop. ### Native renderer block `packages/renderer` renders a `tabs` block from the document IR: children carry `props.label` and the renderer emits an accessible `role="tablist"` whose `role="tab"` buttons wire `aria-controls` to matching `role="tabpanel"` panels. Production props for a packaged instance remain normative in `../contracts/component-props/tabs.schema.json`. #### Native block props | prop | type | required | behaviour | | --- | --- | --- | --- | | `title` | string | no | Accessible name of the tablist (`aria-label`, default `Tabs`). | | `active` | integer | no | Zero-based index selected by default; unknown values degrade to the first tab. | | `activeTab` | string | no | Label or `props.id` of the selected tab; unknown ids degrade to the first tab. | | `children` | DocBlock[] | yes | One panel per child; each child needs a non-empty `props.label`. A missing label degrades the whole block to the labelled fallback. | Panels stay in the DOM (no `hidden`) so no-JS and agent readers see every presentation. The tab buttons are content labels, not chrome, so they are not marked `data-markdown-ignore`; Markdown flattens the block to `###