The open standard for describing application components in a way that LLMs can discover, understand, and compose.
No install needed — npx downloads and runs it directly from npm. Or install globally for faster access:
# Run directly (no install) $ npx radzor@latest add <component> # Or install globally $ npm install -g radzor # Or as a dev dependency $ npm install -D radzor
Requires Node.js 18+
$ npx radzor@latest 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.
"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.
$ npx radzor@latest init ✓ Created radzor.json ✓ Created CLAUDE.md (Claude Code) ✓ Created .cursorrules (Cursor) ✓ Created .windsurfrules (Windsurf) ✓ Created .github/copilot-instructions.md (GitHub Copilot) ✓ Created .clinerules (Cline) Configuring MCP server for supported IDEs... ✓ Created .cursor/mcp.json (Cursor) ✓ Created .vscode/mcp.json (VS Code (Copilot)) Registry created (no components installed yet)
This generates context files so your AI coding agent automatically discovers Radzor components and reads their manifests. Learn more →
The Radzor MCP server gives your LLM direct access to all component manifests, composability data, and wiring patterns. Works with any MCP-compatible IDE.
# radzor init creates MCP config automatically, or add manually:
# .cursor/mcp.json or .vscode/mcp.json
{
"mcpServers": {
"radzor": {
"command": "npx",
"args": ["-y", "@radzor/mcp"]
}
}
}Supported: Claude Desktop, Cursor, Windsurf, VS Code (Copilot), OpenCode
Chain components together — each manifest's composability.connectsTo tells you what connects where.
$ npx radzor@latest list # List all available components $ npx radzor@latest init # Set up config + AI agent files $ npx radzor@latest add --no-deps # Skip installing npm dependencies $ npx radzor@latest graph # Display data-flow graph of installed components $ npx radzor@latest graph --mermaid # Export as Mermaid diagram syntax $ npx radzor@latest validate # Validate a radzor.manifest.json $ npx radzor@latest create my-comp # Scaffold a new component
A Radzor component is a self-contained, reusable application building block that ships with:
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.
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 | ...",
"runtime": "server | browser | universal",
"tags": ["searchable", "tags"],
"inputs": [{
"name": "apiKey",
"type": "string",
"description": "API key for the provider",
"required": true,
"envVar": "OPENAI_API_KEY"
}],
"outputs": [{
"name": "completionResult",
"type": "CompletionResult",
"description": "The LLM response",
"fields": [
{ "name": "content", "type": "string" },
{ "name": "model", "type": "string" },
{ "name": "finishReason", "type": "string" }
]
}],
"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": "completionResult",
"compatibleWith": ["@radzor/text-to-speech.action.synthesize.text"],
"mapField": "content"
}, {
"event": "onComplete",
"description": "Notify downstream when generation finishes",
"compatibleWith": ["@radzor/event-bus.action.publish.payload"]
}]
},
"llm": {
"integrationPrompt": "llm/integration.md",
"usageExamples": "llm/examples.md",
"constraints": "Runtime requirements the LLM must know about"
}
}| 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.) |
| runtime | No | Execution environment: server, browser, or universal (default: server) |
| tags | No | Searchable tags for discovery (max 10) |
| inputs | No | Typed config parameters — supports envVar for env variable mapping |
| outputs | No | Typed values produced — supports inline fields for complex types |
| 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 | Wiring rules — output→input data flow and event→action triggers |
| llm | No | LLM-specific integration metadata and constraints |
radzorrequiredSpec version this manifest conforms to
namerequiredScoped package name (@scope/name)
versionrequiredSemantic version of the component
descriptionrequiredHuman + LLM readable description (10-500 chars)
languagesrequiredLanguages the component provides implementations for
categoryrequiredPrimary category (audio, auth, payment, chat, etc.)
runtimeExecution environment: server, browser, or universal (default: server)
tagsSearchable tags for discovery (max 10)
inputsTyped config parameters — supports envVar for env variable mapping
outputsTyped values produced — supports inline fields for complex types
eventsEvents the component can emit
actionsCallable methods exposed by the component
dependenciesExternal packages and Radzor component dependencies
composabilityWiring rules — output→input data flow and event→action triggers
llmLLM-specific integration metadata and constraints
The composability field declares how a component's outputs and events can connect to other components' inputs and actions. This enables LLMs to automatically wire components together.
Each entry in connectsTo maps an output (or event) to a list of compatible targets using dot-notation: @scope/component.input.fieldName or @scope/component.action.methodName.param
Pass a component's output data into another component's input. Use mapField to extract a specific field from a complex output.
"composability": {
"connectsTo": [{
"output": "audioStream",
"compatibleWith": [
"@radzor/speech-to-text.input.audioStream",
"@radzor/audio-visualizer.input.audioStream"
]
}]
}React to a component's events by triggering another component's action. Use the event key instead of output and target an action path.
"composability": {
"connectsTo": [{
"event": "onPaymentSuccess",
"description": "Trigger notification when payment completes",
"compatibleWith": [
"@radzor/email-sender.action.send.body",
"@radzor/webhook-receiver.action.trigger.payload"
]
}]
}The Radzor registry exposes a public REST API. Base URL: https://radzor.io
/api/componentsSearch and list components with filtering and pagination.
qstringcategorystringlanguagestringpagenumberlimitnumber{
"components": [
{
"id": "...",
"name": "@radzor/audio-capture",
"slug": "audio-capture",
"description": "...",
"category": "audio",
"languages": ["typescript", "python"],
"tags": ["audio", "recording"],
"downloads": 142,
"publisher": { "name": "Radzor", "username": "system" }
}
],
"pagination": {
"page": 1, "limit": 20, "total": 32, "totalPages": 2
}
}/api/components/:slugGet full component details including manifest, versions, and ratings.
:slugstring{
"name": "@radzor/audio-capture",
"slug": "audio-capture",
"manifest": { ... },
"publisher": { "name": "...", "username": "..." },
"versions": [{ "version": "0.1.0", "changelog": "..." }],
"ratings": [{ "rating": 5, "comment": "..." }],
"_count": { "ratings": 3 }
}/api/components/:slug/manifestGet the raw manifest JSON — optimized for LLM consumption.
:slugstring{
"radzor": "1.0.0",
"name": "@radzor/audio-capture",
"inputs": [...],
"outputs": [...],
"actions": [...],
"events": [...],
"composability": { ... }
}/api/registryGet the full registry index — all components with manifests in one call.
limitnumberoffsetnumber{
"radzor": "1.0.0",
"generatedAt": "2026-04-03T...",
"count": 32,
"components": [
{
"name": "@radzor/audio-capture",
"slug": "audio-capture",
"category": "audio",
"languages": ["typescript", "python"],
"latestVersion": "0.1.0",
"manifest": { ... }
}
]
}The @radzor/mcp package exposes all 100 component manifests, composability data, and wiring patterns via the Model Context Protocol. Any MCP-compatible IDE or agent can query the registry without REST calls.
radzor init creates MCP config files automatically. Or add manually:
# .cursor/mcp.json or Claude Desktop config
{
"mcpServers": {
"radzor": {
"command": "npx",
"args": ["-y", "@radzor/mcp"]
}
}
}
# .vscode/mcp.json (Copilot)
{
"servers": {
"radzor": {
"command": "npx",
"args": ["-y", "@radzor/mcp"]
}
}
}search_componentsSearch by keyword, category, or language. Returns matching manifests.
get_manifestGet the full manifest for a specific component by slug.
get_composabilityGet all output and event connections for a component, with resolved target details.
integrateGenerate a step-by-step integration plan for a component.
composeGet a wiring plan to connect two or more components together.
Supported: Claude Desktop, Cursor, Windsurf, VS Code (Copilot), OpenCode. npm package →