https://github.com/ZenWave360/zenwave-sdk
DDD and API-First tools for Event-Driven microservices. Create Software Easy to Understand.
https://github.com/ZenWave360/zenwave-sdk
api-first asyncapi code-generator ddd jdl jhipster openapi
Last synced: 4 months ago
JSON representation
DDD and API-First tools for Event-Driven microservices. Create Software Easy to Understand.
- Host: GitHub
- URL: https://github.com/ZenWave360/zenwave-sdk
- Owner: ZenWave360
- License: mit
- Created: 2022-02-01T20:41:00.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2025-06-11T09:57:40.000Z (4 months ago)
- Last Synced: 2025-06-11T10:55:24.167Z (4 months ago)
- Topics: api-first, asyncapi, code-generator, ddd, jdl, jhipster, openapi
- Language: Java
- Homepage: https://www.zenwave360.io
- Size: 26.7 MB
- Stars: 48
- Watchers: 2
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
- awesome-java - ZenWave SDK
README
# ZenWave SDK
![]()
![]()
> 👉 ZenWave360 Helps You Create Software Easy to Understand
[](https://search.maven.org/artifact/io.zenwave360.sdk/zenwave-sdk)

[](https://github.com/ZenWave360/zenwave-sdk/actions/workflows/publish-maven-snapshots.yml)
[](https://github.com/ZenWave360/zenwave-sdk/actions/workflows/publish-maven-central.yml)
[](https://github.com/ZenWave360/zenwave-sdk/actions/workflows/publish-maven-central.yml)
[](https://github.com/ZenWave360/zenwave-sdk/blob/main/LICENSE)> **Note**: Starting with version 2.0.0, the Maven `groupId` has changed to `io.zenwave360`. The code remains fully compatible.
> You can find [Previous Releases Documentation](https://github.com/ZenWave360/zenwave-sdk/tree/1.7.x?tab=readme-ov-file#available-plugins) here.ZenWave SDK is a configurable and extensible toolkit for **Domain Driven Design (DDD)** and **API-First** that can generate code from a mix of different models including:
- ZDL Domain Language
- AsyncAPI
- OpenAPI**Table of Contents:**
- [ZenWave SDK](#zenwave-sdk)
- [Jbang Instalation](#jbang-instalation)
- [Features / Roadmap](#features--roadmap)
- [Building from source](#building-from-source)
- [Usage](#usage)
- [Available Plugins](#available-plugins)
- [ZenWave SDK Documentation](#zenwave-sdk-documentation)## JBang Instalation
The easiest way to install ZenWave SDK is as a [JBang alias](https://www.jbang.dev/documentation/guide/latest/alias_catalogs.html):
```shell
jbang alias add --fresh --force --name=zw release@zenwave360/zenwave-sdk
```or if you prefer to use the latest **snapshot** versions:
```shell
jbang alias add --fresh --force --name=zw snapshots@zenwave360/zenwave-sdk
```or if you prefer to use the _next_ experimental/unstable **snapshot** versions:
```shell
jbang alias add --fresh --force --name=zw next@zenwave360/zenwave-sdk
```If you plan to use **custom plugins** you will need to use the command in the following format:
```shell
jbang alias add --name=zw --force \
-m=io.zenwave360.sdk.Main \
--repos=mavencentral,snapshots=https://s01.oss.sonatype.org/content/repositories/snapshots \
--deps=\
org.slf4j:slf4j-simple:1.7.36,\
io.zenwave360.sdk.plugins:asyncapi-spring-cloud-streams3:1.7.1,\
io.zenwave360.sdk.plugins:asyncapi-jsonschema2pojo:1.7.1,\
io.zenwave360.sdk.plugins:openapi-spring-webtestclient:1.7.1,\
io.zenwave360.sdk.plugins:backend-application-default:1.7.1,\
io.zenwave360.sdk.plugins:zdl-to-openapi:1.7.1,\
io.zenwave360.sdk.plugins:zdl-to-asyncapi:1.7.1,\
io.zenwave360.sdk.plugins:jdl-to-asyncapi:1.7.1,\
io.zenwave360.sdk.plugins:zdl-to-markdown:1.7.1,\
io.zenwave360.sdk.plugins:openapi-controllers:1.7.1
io.zenwave360.sdk:zenwave-sdk-cli:1.7.1
```You can include any **custom plugin** jars in the `--deps` option.
JBang will use you maven settings for repository resolution, but you can also specify a custom maven repository in the `--repos` option.
## Features / Roadmap
- [x] ZenWave SDK CLI
- [x] Default parsers, processors, plugins, templating, formatters, writers, etc... for AsyncAPI, OpenAPI and JDL.
- [x] Help command: detailed, json, markdown, list of available plugins
- [x] Fork existing (custom or standard) plugin command
- [x] ZenWave SDK Maven Plugin
- [x] Standard Plugins
- [x] JDL Backend Application (flexible hexagonal architecture)
- [x] Domain Entities
- [x] Inbound
- [x] Service Ports, DTOs, Mappers
- [x] Implementation for CRUD operations
- [x] Acceptance Tests: SpringData InMemory Repositories
- [x] Outbound: SpringData Repositories, ElasticSearch... (for REST or Async see other plugins)
- [x] Adapters:
- [x] Spring MVC
- [ ] ~~Spring WebFlux~~
- [ ] Flavors
- [x] MongoDB
- [x] Imperative
- [ ] ~~Reactive~~
- [x] JPA
- [x] Imperative
- [ ] ~~Reactive~~
- [x] Unit/Integration Testing
- [x] Edge Integration Testing: partial spring-boot context for outbound adapters (with testcontainers)
- [x] Sociable Vertical Testing: manual dependency setup with in memory infrastructure _test-doubles_
- [x] Vertical Integration Testing: full spring-boot context for inbound adapters (with testcontainers)
- [x] JDL OpenAPI Controllers
- [x] OpenAPI to Spring WebTestClient
- [x] AsyncAPI Spring Cloud Streams3
- [x] Consumer and Producer. Imperative and Reactive.
- [x] Business Exceptions Dead Letter Queues Routing
- [x] Producer with Transactional Outbox pattern
- [x] For MongoDB
- [x] For JDBC
- [x] Enterprise Envelop Pattern
- [x] Automatically fill headers at runtime from payload paths, tracing-id supplier...
- [x] JDL to Specs
- [x] JDL to OpenAPI
- [x] JDL to AsyncAPI
- [x] AsyncAPI schemas
- [x] AVRO schemas
- [x] API Testing
- [x] KarateDSL
- [x] OpenAPI to Karate E2E Tests (please use [KarateIDE VSCode Extension](https://github.com/ZenWave360/karate-ide) instead)
- [x] OpenAPI to Karate/ApiMock Stateful Mocks (please use [KarateIDE VSCode Extension](https://github.com/ZenWave360/karate-ide) and [ZenWave ApiMock](https://github.com/ZenWave360/zenwave-apimock) instead)
- [x] OpenAPI to Spring WebTestClient
- [x] OpenAPI to REST-assured
- [ ] ~~OpenAPI to Pact (_postponed sine die_)~~
- [x] Reverser Engineering
- [x] OpenAPI 2 JDL
- [x] Java 2 JDL
- [x] Spring Data MongoDB annotations
- [x] JPA annotations## Building from source
```shell
git clone https://github.com/ZenWave360/zenwave-sdk.git
cd zenwave-sdk
mvn clean install
```## Usage
Use the following jbang format:
```shell
jbang zw -p optionName=value optionName2=value
```You can get a list of all available plugins:
```shell
$ jbang zw -h listUsage: [-f] [-h[=]] [-p[=]]
[...]
[...]
-f, --force Force overwrite
-h, --help[=] Help with output format
-p, --plugin[=]
Plugin Class or short-code
INFO Reflections - Reflections took 566 ms to scan 59 urls, producing 2513 keys and 13329 values
ZW> SDK (2.0.0)Available plugins:
BackendApplicationDefaultPlugin: Generates a full backend application using the provided 'layout' property (2.0.0)
ZDLToOpenAPIPlugin: Generates a draft OpenAPI definitions from your ZDL entities and services. (2.0.0)
ZDLToAsyncAPIPlugin: Generates a draft AsyncAPI file with events from your ZDL services. (2.0.0)
OpenAPIControllersPlugin: Generates implementations based on ZDL models and OpenAPI definitions SpringMVC generated OpenAPI interfaces. (2.0.0)
AsyncApiJsonSchema2PojoPlugin: Generate Plain Old Java Objects from OpenAPI/AsyncAPI schemas or full JSON-Schema files. (2.0.0)
SpringCloudStreams3Plugin: Generates strongly typed SpringCloudStreams3 producer/consumer classes for AsyncAPI (2.0.0)
SpringCloudStreams3AdaptersPlugin: Generates Spring Cloud Streams Consumers from AsyncAPI definitions. (2.0.0)
SpringWebTestClientPlugin: Generates test for SpringMVC or Spring WebFlux using WebTestClient based on OpenAPI specification. (2.0.0)
OpenAPIKaratePlugin: Generates test for KarateDSL based on OpenAPI specification. (2.0.0)
JDLToAsyncAPIPlugin: Generates a full AsyncAPI definitions for CRUD operations from JDL models (2.0.0)
ZdlToJsonPlugin: Prints to StdOut ZDL Model as JSON (2.0.0)
OpenAPIToJDLPlugin: Generates JDL model from OpenAPI schemas (2.0.0)
ZdlToMarkdownPlugin: Generates Markdown glossary from Zdl Models (2.0.0)Use: "jbang zw -p -h" to get help on a specific plugin
```NOTE: it will list any available plugin, standard or custom, inside any of these root java packages "io", "com" or "org".
And get help for a given plugin:
```shell
jbang zw --help -p
```You can add choose a help format from the following: help, detailed, markdown, or list:
```shell
jbang zw --help markdown -p
```## Available Plugins
Refer to individual plugin's documentation for more information:
| **Plugin** | **Description** | **Model Types** |
|------------------------------------------------------------------------------------------|-------------------------------------|----------------------------|
| [Backend Application Default](./plugins/backend-application-default/README.md) | Backend Application Default | ZDL |
| [AsyncAPI JSON Schema to POJO](./plugins/asyncapi-jsonschema2pojo/README.md) | AsyncAPI JSON Schema to POJO | AsyncAPI, JsonSchema |
| [AsyncAPI to Spring Cloud Streams 3](./plugins/asyncapi-spring-cloud-streams3/README.md) | AsyncAPI to Spring Cloud Streams 3 | AsyncAPI, AVRO, JsonSchema |
| [OpenAPI Controllers](./plugins/openapi-controllers/README.md) | JDL OpenAPI Controllers | OpenAPI, ZDL |
| [OpenAPI to Spring WebTestClient](./plugins/openapi-spring-webtestclient/README.md) | OpenAPI to Spring WebTestClient | OpenAPI |
| [ZDL to OpenAPI](./plugins/zdl-to-openapi/README.md) | ZDL to OpenAPI and OpenAPI to ZDL | ZDL, OpenAPI |
| [ZDL to AsyncAPI](./plugins/zdl-to-asyncapi/README.md) | ZDL to AsyncAPI | ZDL, AsyncAPI |
| [ZDL to Markdown](./plugins/zdl-to-markdown/README.md) | ZDL to Markdown | ZDL |
| [Java 2 JDL Reverse Engineering](./plugins/java-to-jdl/README.md) | Java 2 JDL Reverse Engineering | Java, JDL |
| [Java 2 AsyncAPI Reverse Engineering](./plugins/java-to-asyncapi/README.md) | Java 2 AsyncAPI Reverse Engineering | Java |
| [MCP Server](./plugins/zenwave-mcp-server/README.md) | ZenWave MCP Server | ZDL |# ZenWave SDK Documentation
Please refer to the [documentation](https://zenwave360.github.io/zenwave-sdk/) website for more information.