RADZOR
ComponentsRecipesDocsContributeGitHub
Get Started
RADZOR

The universal component registry for LLM-driven development. Empowering developers to build better apps, faster.

Product
  • Components
  • Standard
Resources
  • Documentation
  • API Reference
  • AI Agent Integration
  • Pipeline Guide
  • MCP Server
Community
  • GitHub
  • X / Twitter
  • Discord

© 2026 Radzor Registry. All rights reserved.

Open Source

Build a component,
ship it to everyone.

Radzor is community-driven. Every component in the registry was contributed by a developer like you. Here's how to create yours and get it listed.

What you're building

A Radzor component is a self-contained building block that ships with real code, a machine-readable manifest, and LLM-optimized docs. Here's the file structure:

my-component/
├── radzor.manifest.json   # Component contract (required)
├── src/
│   ├── index.ts           # TypeScript implementation (required)
│   └── index.py           # Python implementation (optional)
└── llm/
    ├── integration.md     # How to integrate (recommended)
    └── examples.md        # Usage examples (recommended)

The radzor.manifest.json is the core — it tells LLMs exactly what your component does, what it accepts, and how it connects to other components. Read the full spec →

01

Scaffold your component

The CLI generates the manifest, source file, and LLM docs in one command.

$ npx radzor@latest create @radzor/my-component

✓ Created my-component/
  radzor.manifest.json
  src/index.ts
  llm/integration.md
  llm/examples.md
02

Write the implementation

Implement your component in src/index.ts (TypeScript) and optionally src/index.py (Python). Zero external dependencies is the goal — keep it self-contained.

// src/index.ts
export class MyComponent {
  private emitter = new Map<string, Function[]>();

  constructor(config: MyComponentConfig) {
    // Initialize with typed inputs from manifest
  }

  async doSomething(): Promise<Result> {
    // Your logic here
    this.emit("onComplete", { ... });
  }
}

# src/index.py (optional)
class MyComponent:
    def __init__(self, config: MyComponentConfig) -> None:
        # Initialize with typed inputs from manifest

    def do_something(self) -> Result:
        # Your logic here
        self._emit("onComplete", { ... })
03

Validate your component

The validator checks your manifest, verifies file structure, and catches common mistakes before submission.

$ npx radzor@latest validate .

✓ my-component/radzor.manifest.json
✓ @radzor/my-component@0.1.0 — valid ✓
  Category: networking
  Languages: typescript, python
  Inputs: 3 | Outputs: 1
  Actions: 2 | Events: 2
  LLM docs: ✓
04

Submit a Pull Request

Fork the components repo, add your component directory, and open a PR. We review for quality and merge.

$ cd components/
$ git checkout -b feat/my-component
$ git add my-component/
$ git commit -m "feat: add @radzor/my-component"
$ git push origin feat/my-component
# → Open PR on github.com/radzor-io/components

Guidelines

Manifest rules

  • •Name must be scoped: @radzor/my-component
  • •Version must be semver: 0.1.0
  • •Inputs/outputs use camelCase names
  • •Events start with on + PascalCase: onComplete
  • •Category from the allowed list (audio, auth, payment, ai, ...)

Code guidelines

  • •Zero dependencies whenever possible (stdlib only)
  • •Export a single class matching the component name
  • •Python: use dataclasses for config, snake_case for methods
  • •Handle errors gracefully — emit onError, don't throw
  • •Include JSDoc (TS) or docstrings (Python) on public methods

LLM docs guidelines

  • •integration.md: step-by-step setup, constraints, gotchas
  • •examples.md: real-world usage patterns with full code
  • •Include both TypeScript and Python examples when applicable
  • •Include import statements and configuration in every example

Ready to contribute?

Install the CLI, scaffold your component, and open a PR. We review every submission and merge fast.

Fork the repoRead the Spec