Skip to main content

A command-line tool for xRegistry with code generation for messaging and eventing applications

Project description

xRegistry Code Generation CLI

Python Test Python Release

Generate production-ready, type-safe messaging SDKs from xRegistry message catalog definitions. One command gives you compile-ready producer/consumer code with tests, dependency management, and protocol-specific bindings.

Quick Start

1. Install (Docker or pip):

# Docker (recommended - no Python needed)
docker pull ghcr.io/xregistry/codegen/xrcg:latest

# Or via pip
pip install git+https://github.com/xregistry/codegen.git

2. Generate a Kafka producer from a sample definition:

# Using Docker (Linux/macOS)
docker run --rm -v $(pwd):/work ghcr.io/xregistry/codegen/xrcg:latest \
  generate --projectname PrinterEvents --language py --style kafkaproducer \
  --definitions https://raw.githubusercontent.com/xregistry/codegen/main/samples/message-definitions/inkjet.xreg.json \
  --output ./generated
# Using Docker (Windows PowerShell)
docker run --rm -v ${PWD}:/work ghcr.io/xregistry/codegen/xrcg:latest `
  generate --projectname PrinterEvents --language py --style kafkaproducer `
  --definitions https://raw.githubusercontent.com/xregistry/codegen/main/samples/message-definitions/inkjet.xreg.json `
  --output ./generated
# Or with pip install (any platform)
xrcg generate --projectname PrinterEvents --language py --style kafkaproducer \
  --definitions https://raw.githubusercontent.com/xregistry/codegen/main/samples/message-definitions/inkjet.xreg.json \
  --output ./generated

This produces a complete Python project with:

  • Type-safe producer classes for each message type
  • Strongly-typed data classes generated from Avro schema
  • Integration tests using Testcontainers
  • Ready to use: cd generated && pip install -e . && pytest

3. Or generate for a different platform — same definition, different target:

xrcg generate --projectname ContosoEvents --language cs --style ehproducer \
  --definitions ./contoso-erp.xreg.json --output ./generated   # C# Event Hubs

xrcg generate --projectname ContosoEvents --language ts --style mqttclient \
  --definitions ./contoso-erp.xreg.json --output ./generated   # TypeScript MQTT

xrcg generate --projectname ContosoEvents --language py --style kafkaconsumer \
  --definitions ./contoso-erp.xreg.json --output ./generated   # Python Kafka

What You Get

Unlike snippet generators, this tool produces complete SDK-like projects:

Feature What's Generated
Type-safe clients Producer/consumer classes with strongly-typed methods per message
Data classes Schema-derived classes via Avrotize (JSON Schema, Avro, Protobuf)
Build files pom.xml, .csproj, package.json, pyproject.toml with correct dependencies
Integration tests Docker-based tests using Testcontainers for Kafka, MQTT, AMQP brokers
Project structure Language-idiomatic layout ready for IDE import

Supported Languages: Java 21+, C# (.NET 6+), Python 3.9+, TypeScript/JavaScript

Supported Protocols: Apache Kafka, MQTT 5.0, AMQP 1.0, Azure Event Hubs, Azure Service Bus, Azure Event Grid, HTTP/CloudEvents

Generating Code

For complete command documentation, see Command Reference.

The Generate Command

xrcg generate --projectname <name> --language <lang> --style <style> \
  --definitions <file-or-url> --output <dir>
Option Description
--projectname Project/namespace name for generated code
--language Target language: java, cs, py, ts, asyncapi, openapi
--style Protocol binding: kafkaproducer, ehconsumer, mqttclient, etc.
--definitions Path or URL to xRegistry JSON/YAML definition
--output Output directory (will be created/overwritten)
--templates Custom template directory (optional)
--template-args Extra args as key=value (optional)

Available Templates

Run xrcg list to see all available language/style combinations:

├── java: Java 21+
│   ├── kafkaproducer, kafkaconsumer     # Apache Kafka
│   ├── ehproducer, ehconsumer           # Azure Event Hubs  
│   ├── sbproducer, sbconsumer           # Azure Service Bus
│   ├── amqpproducer, amqpconsumer       # AMQP 1.0 (RabbitMQ 4+, Artemis, Qpid)
│   └── mqttclient                       # MQTT 5.0
├── cs: C# / .NET 6.0+
│   ├── kafkaproducer, kafkaconsumer
│   ├── ehproducer, ehconsumer, ehazfn   # Event Hubs + Azure Functions
│   ├── sbproducer, sbconsumer, sbazfn
│   ├── egproducer, egazfn               # Event Grid
│   ├── amqpproducer, amqpconsumer
│   └── mqttclient
├── py: Python 3.9+
│   ├── kafkaproducer, kafkaconsumer
│   ├── ehproducer, ehconsumer
│   └── mqttclient
├── ts: TypeScript
│   ├── kafkaproducer, kafkaconsumer
│   ├── ehproducer, ehconsumer
│   ├── sbproducer, sbconsumer
│   ├── egproducer, amqpproducer, amqpconsumer
│   └── mqttclient
├── asyncapi: AsyncAPI 3.0 definitions
└── openapi: OpenAPI 3.0 definitions

Protocol-Specific Examples

AMQP 1.0 (RabbitMQ, Artemis, Qpid)
# Generate Java producer
xrcg generate --language java --style amqpproducer \
  --projectname MyProducer --definitions ./catalog.json --output ./out

# Generate C# consumer  
xrcg generate --language cs --style amqpconsumer \
  --projectname MyConsumer --definitions ./catalog.json --output ./out

See RabbitMQ AMQP 1.0 Setup Guide for broker configuration.

AsyncAPI / OpenAPI Generation
# Generate AsyncAPI producer definition
xrcg generate --language asyncapi --style producer \
  --projectname MyAPI --definitions ./catalog.json --output ./out

# With binary CloudEvents mode
xrcg generate --language asyncapi --style producer \
  --projectname MyAPI --definitions ./catalog.json --output ./out \
  --template-args ce_content_mode=binary

# Generate OpenAPI for HTTP producer
xrcg generate --language openapi --style producer \
  --projectname MyAPI --definitions ./catalog.json --output ./out

Custom Templates

Override built-in templates or add new language/style combinations:

xrcg generate --templates ./my-templates --language java --style myproducer ...

Template directory structure mirrors the built-in templates. See Authoring Templates.

Installation Details

Docker (Recommended)

docker pull ghcr.io/xregistry/codegen/xrcg:latest

Create a shell alias for convenience:

# Linux/macOS (.bashrc or .zshrc)
alias xrcg='docker run --rm -v $(pwd):/work ghcr.io/xregistry/codegen/xrcg:latest'

# Windows PowerShell (profile)
function xrcg { docker run --rm -v ${PWD}:/work ghcr.io/xregistry/codegen/xrcg:latest $args }

Note: File paths must be relative to your current directory due to Docker volume mapping.

Python Package

Requires Python 3.10+:

pip install git+https://github.com/xregistry/codegen.git

For development setup, see Development Environment.

Working with xRegistry Definitions

The generator consumes xRegistry message catalog documents—JSON/YAML files that describe schemas, messages, and endpoints. You can:

Sample Definitions

Sample Description
contoso-erp.xreg.json ERP system events (orders, payments, inventory)
fabrikam-motorsports.xreg.json Motorsports telemetry stream
inkjet.xreg.json IoT printer events

Managing Definitions with CLI

Manifest Mode (Local Files)

Work with local JSON files for version-controlled, offline workflows:

# Create a message group
xrcg manifest messagegroup add --manifest=./catalog.json --id=orders --envelope=CloudEvents/1.0

# Add a message definition
xrcg manifest message add --manifest=./catalog.json --messagegroupid=orders \
  --id=OrderPlaced --description="Order was placed"

# Validate the file
xrcg validate --definitions ./catalog.json
Catalog Mode (Remote Registry)

Interact with a remote xRegistry HTTP API for team collaboration:

# Configure registry connection
xrcg config set registry.base_url https://registry.example.com
xrcg config set registry.auth_token <token>

# Work with remote registry
xrcg catalog messagegroup add --id=orders ...
xrcg catalog message list --messagegroupid=orders

Currently supports xrserver registry.

Validate Command

Check definition files for errors:

xrcg validate --definitions ./catalog.json
xrcg validate --definitions https://example.com/catalog.json

Configuration

Store defaults to avoid repetition:

xrcg config set defaults.language java
xrcg config set defaults.output_dir ./generated
xrcg config list

Config location: ~/.config/xrcg/config.json (Linux), %APPDATA%\xrcg\config.json (Windows)

What is xRegistry?

xRegistry is a CNCF project defining a standard format for describing messaging and eventing infrastructure. A message catalog document contains:

  • Schema groups — Payload schemas (JSON Schema, Avro, Protobuf)
  • Message groups — Message definitions with CloudEvents envelope metadata
  • Endpoints — Protocol bindings (Kafka topics, AMQP queues, HTTP endpoints)

The code generator follows references between these elements to produce cohesive, type-safe SDKs.

Community

License

Apache 2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xrcg-0.9.2.dev0.tar.gz (659.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

xrcg-0.9.2.dev0-py3-none-any.whl (913.9 kB view details)

Uploaded Python 3

File details

Details for the file xrcg-0.9.2.dev0.tar.gz.

File metadata

  • Download URL: xrcg-0.9.2.dev0.tar.gz
  • Upload date:
  • Size: 659.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for xrcg-0.9.2.dev0.tar.gz
Algorithm Hash digest
SHA256 f1b0fc186f6409bb09d1dc12d5ca4a0eefbeb644f7a265e40c61873ed512759f
MD5 38a9070a03f36361edab356ea20fe93b
BLAKE2b-256 c9300aca59efe60ecb4ad379bef9c0df622f313ebd12b6af1940bc327bf6a82b

See more details on using hashes here.

File details

Details for the file xrcg-0.9.2.dev0-py3-none-any.whl.

File metadata

  • Download URL: xrcg-0.9.2.dev0-py3-none-any.whl
  • Upload date:
  • Size: 913.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for xrcg-0.9.2.dev0-py3-none-any.whl
Algorithm Hash digest
SHA256 7ef6b34539bc719d5fd1c3b232bce72923d1615364e11b606409a2fa7b432fa0
MD5 6106b53eb86c0696ec3ec5d9b9abdf8c
BLAKE2b-256 338a90bf65ee1d29613dfc411fa4c611fb805bbfe4f7796ca6ca6bf9a8713ec4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page