Radzor Component Spec (RCS) v1.0.0
The open standard for describing application components in a way that LLMs can discover, understand, and compose.
Getting Started
1. Add a component
$ npx radzor add audio-capture ✓ @radzor/audio-capture@0.1.0 components/radzor/audio-capture/src/index.ts components/radzor/audio-capture/radzor.manifest.json ✓ Done! 2 files added.
2. Point your LLM at the manifest
"Use the radzor.manifest.json in components/radzor/audio-capture/ to add voice recording to my app."
The manifest tells your LLM exactly what inputs, outputs, actions, and events the component exposes — no documentation hunting required.
3. Other commands
$ npx radzor list # List all available components $ npx radzor init # Create radzor.json config $ npx radzor add --no-deps # Skip installing npm dependencies
What is a Radzor Component?
A Radzor component is a self-contained, reusable application building block that ships with:
- Real code — working implementations in one or more languages
- A standardized manifest — machine-readable JSON describing inputs, outputs, events, actions, and composability rules
- LLM instructions — integration prompts and usage examples optimized for AI code generation
The manifest is the key innovation. It enables LLMs to understand what a component does without reading its source code, and to automatically wire components together based on type-compatible I/O.
The Manifest: radzor.manifest.json
Every component must include a radzor.manifest.json at its root. Here is the full schema:
{
"radzor": "1.0.0",
"name": "@scope/component-name",
"version": "0.1.0",
"description": "What this component does (10-500 chars)",
"languages": ["typescript", "python"],
"category": "audio | auth | payment | chat | ...",
"tags": ["searchable", "tags"],
"inputs": [{
"name": "paramName",
"type": "string",
"description": "What this input configures",
"default": "optional-default",
"required": true
}],
"outputs": [{
"name": "outputName",
"type": "TypeAnnotation",
"description": "What this output provides"
}],
"events": [{
"name": "onEventName",
"payload": { "field": "type" },
"description": "When this event fires"
}],
"actions": [{
"name": "methodName",
"params": [{ "name": "arg", "type": "string", "description": "..." }],
"returns": "Promise<void>",
"description": "What this method does"
}],
"dependencies": {
"packages": { "npm-package": "^1.0.0" },
"radzor": ["@radzor/other-component"]
},
"composability": {
"connectsTo": [{
"output": "outputName",
"compatibleWith": ["@radzor/other.input.inputName"]
}]
},
"llm": {
"integrationPrompt": "llm/integration.md",
"usageExamples": "llm/examples.md",
"constraints": "Runtime requirements the LLM must know about"
}
}Field Reference
| Field | Required | Description |
|---|---|---|
| radzor | Yes | Spec version this manifest conforms to |
| name | Yes | Scoped package name (@scope/name) |
| version | Yes | Semantic version of the component |
| description | Yes | Human + LLM readable description (10-500 chars) |
| languages | Yes | Languages the component provides implementations for |
| category | Yes | Primary category (audio, auth, payment, chat, etc.) |
| tags | No | Searchable tags for discovery (max 10) |
| inputs | No | Typed configuration parameters the component accepts |
| outputs | No | Typed values the component produces |
| events | No | Events the component can emit |
| actions | No | Callable methods exposed by the component |
| dependencies | No | External packages and Radzor component dependencies |
| composability | No | Rules for connecting outputs to other component inputs |
| llm | No | LLM-specific integration metadata and constraints |
Composability
The composability field declares how a component's outputs can connect to other components' inputs. This enables LLMs to automatically wire components together.
Each entry in connectsTo maps an output name to a list of compatible inputs using dot-notation: @scope/component.input.fieldName
"composability": {
"connectsTo": [{
"output": "audioStream",
"compatibleWith": [
"@radzor/speech-to-text.input.audioStream",
"@radzor/audio-visualizer.input.audioStream"
]
}]
}Registry API
The Radzor registry exposes a REST API for programmatic access:
GET /api/componentsList components with search, filter, paginationGET /api/components/:slugGet component details including manifestGET /api/components/:slug/manifestGet raw manifest JSON (optimized for LLM consumption)GET /api/registryGet full registry index (all components + manifests)