Specification

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

FieldRequiredDescription
radzorYesSpec version this manifest conforms to
nameYesScoped package name (@scope/name)
versionYesSemantic version of the component
descriptionYesHuman + LLM readable description (10-500 chars)
languagesYesLanguages the component provides implementations for
categoryYesPrimary category (audio, auth, payment, chat, etc.)
tagsNoSearchable tags for discovery (max 10)
inputsNoTyped configuration parameters the component accepts
outputsNoTyped values the component produces
eventsNoEvents the component can emit
actionsNoCallable methods exposed by the component
dependenciesNoExternal packages and Radzor component dependencies
composabilityNoRules for connecting outputs to other component inputs
llmNoLLM-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, pagination
GET /api/components/:slugGet component details including manifest
GET /api/components/:slug/manifestGet raw manifest JSON (optimized for LLM consumption)
GET /api/registryGet full registry index (all components + manifests)