AsyncAPI tooling update - 1

Jonas Lagoni Avatar

Jonas Lagoni

ยท10 min read

This is meant as an update on what happened in the AsyncAPI tooling landscape for the past couple of months. Why 1 you might ask? Well, the previous times I made an update statement was through gist which I don't particularly like for giving updates. So this switches it up! If you are looking for the latest updates in other areas, check them out here:

I would love to know what you would like out of these updates, what gives you value when you are reading these updates? Anything from the other updates you found gave value this one missed out on?

This post bundles updates from the following official tools, but not limited to: bundler, chatbot, studio, diff, glee, create-glee-app, cli, optimizer, modelina, generator, generator-react-sdk, java-template, java-spring-cloud-stream-template, java-spring-template, dotnet-nats-template and ts-nats-template.

Highlights

These are some of the highlights of changes that have happened in the tools and what's to come!

CLI

There is a lot of effort being put into the CLI to incorporate the many tools we have, so you have the power of each tool right at your fingertip.

peter-rr integrated the Converter so you can now easily upgrade your AsyncAPI documents on new spec versions. This can be done through asyncapi convert ./asyncapi.json 2.4.0.

jonaslagoni integrated Modelina to give you the possibility of generating typed data models for your message payloads. This can be done through asyncapi generate models typescript ./asyncapi.json --output='./output'.

Soon you will be able to use the generator, optimize AsyncAPI documents, find and show relations in multiple AsyncAPI documents and show difference between AsyncAPI documents.

If you have other ideas as to what the CLI tool should do, don't hesitate to create a feature request!

Glee

Glee now automatically generates documentation for you!

There is also a focus on supporting more and more protocols, currently, WebSocket Client is in the works and more lined up such as AMQP, Kafka and HTTP client and server just waiting to be picked up. If you want a protocol you use to be supported please reach out!

Modelina

Some huge changes have happened over the last months, which all got triggered by a new core model to fix many of the internal problems that the old model caused and immensely improve developer experience by simplifying the generators. All of these changes are happening on the next branch and will be a pre-release until released as version 1! Currently, you can test out the new changes by switching to version 1.0.0-next.1.

It has become really easy to customize the types of the models:

1const generator = new TypeScriptGenerator({
2  typeMapping: {
3    String: ({constrainedModel, options, propertyKey}) => {
4      return 'my custom type for strings';
5    }
6  }
7});

Also super easy to change the naming formats, for example for model names if you wanted their names to be CONSTANT CASE its as simple as changing the constraint:

1const generator = new TypeScriptGenerator({
2  constraints: {
3    modelName: typeScriptDefaultModelNameConstraints({
4      NAMING_FORMATTER: (name) => {
5        return constantCase(name);
6      }
7    })
8  }
9});

Modelina also now support Dart thanks to rmasarovic! Soon there will also be support for a Rust generator and a Python generator.

Full changelog

This is the full changelog of everything that has happened in the tools in the past months written in a more digestible manner!

CLI

Simulator

Generator

Generator React SDK

Java template

Java Spring Template

Optimizer

Bundler

Go Watermill template

Studio

.NET Nats template

Java spring cloud stream template

Glee

Diff

Modelina

Modelina has now been split into two branches, master and next, where next is the new version, targeted as version 1.0.0.

These are the changes on master
These are the changes on next

There are simply too many refactoring's to show, if you want to deep dive into the rewrite, take a look at this PR: https://github.com/asyncapi/modelina/pull/674

To that end

Thank you to everyone who contributes to AsyncAPI in any way you can ๐Ÿ’œ If you also want to help out but don't know where to begin, then join the #11_how-to-contribute channel on Slack so we can help you any way we can ๐Ÿ’ช