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.1.dev0.tar.gz (659.8 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.1.dev0-py3-none-any.whl (913.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: xrcg-0.9.1.dev0.tar.gz
  • Upload date:
  • Size: 659.8 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.1.dev0.tar.gz
Algorithm Hash digest
SHA256 7b43e8c975cb8c9e637da9b55e2729bd65efd783fa345cd7517b073c6f70c9ed
MD5 0abeb8a857e8edc84004754e391e592a
BLAKE2b-256 3821f2cc964fcfc8e19b2fcbddea6971b7a7a1a524c23d08a245c41d0128eae4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: xrcg-0.9.1.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.1.dev0-py3-none-any.whl
Algorithm Hash digest
SHA256 9a364873ba5a2aad7875078b125924b687b538af6a0a42e5e9ce311630b2c3a2
MD5 6e59c58d8a896c5537a8b82ee727f163
BLAKE2b-256 0389b27c43007725128d50641ecb72c345810c2d3fe1225023b7746e3e6cc1d8

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