I would like to announce that the v0.12 version of Moleculer has been released. It is the biggest release in the history of the project with more than 200 commits and 17k additions. It has brought a plenty of excellent new features to the framework. In this post, I wish to share some useful information about the new version.

First of all, I would like to tell that I have created a Patreon profile. If you enjoy using Moleculer, this is your opportunity to support my work. You can read more here about supporting. Become a patron!

If you want to upgrade your project to v0.12, please read the full detailed Changelog because it contains breaking changes.

New transporters

I have implemented new transporters for Kafka and NATS Streaming. Both are a simple pub-sub implementations don’t support offsetting, replaying features, just send Moleculer packets to nodes.

New zero-configuration TCP transporter with UDP discovery

This version brings a new experimental TCP transporter. It uses UDP multicast packets to detect nodes. If your network doesn’t support UDP, you can use static node lists. Thanks to Gossip protocol, it can handle hundreds of nodes.

Please note, it is an experimental transporter, do not use it in production yet.

How gossip works

New default nodeID

In previous versions, the default nodeID was generated from the hostname. It confused a lot of new users when they tried to run multiple nodes on the same host because all nodes require unique nodeID. In v0.12, this logic has been changed. The default nodeID is generated from hostname and process PID.

Extended broker options

The broker options have been extended with new properties. If you use Moleculer Runner and config file, you can set your middlewares and add some lifecycle events as created , started , stopped .

CPU usage-based strategy

There is a new built-in CPU usage-based invocation strategy. It selects nodes on the basis of CPU usages.

Two-way metadata in Context

Since v0.12, the ctx.meta is sent back to the caller and is merged with the caller metadata. You can use it to send back metadata besides the response, e.g. response headers or auth data.

Better ES6 support

In this version, you can easily use ES6 classes for services. Use native ES6 classes or ES7/Typescript decorators (thanks to ColonelBundy).

Decorators

More info on https://github.com/ColonelBundy/moleculer-decorators

ES6 classes

Custom REPL command

You can define your custom REPL command in broker options. It can be a very useful feature during developing.

Define a “hello”, “hi” command to REPL

Call custom command

Built-in benchmark in REPL