Gerrit events listener to send events to an external NATS broker

Clone this repo:


  1. 5ca4d76 Improve configuration and add documentation by Matthias Sohn · 10 months ago master
  2. 59d3439 Improve README by Matthias Sohn · 10 months ago
  3. 5cc1e1e Improve naming of NATS stream and durable consumers by Matthias Sohn · 10 months ago
  4. 71cbe12 Fix shutdown of consumers, NatsBrokerApi and the NATS connection by Matthias Sohn · 10 months ago
  5. 77426fd Fix deserialization of Event from raw message by Matthias Sohn · 10 months ago

events-nats: Gerrit event producer for NATS

Build Status


This plugins allows to define a distributed stream of events published by Gerrit.

Events can be anything, from the traditional stream events to the Gerrit metrics.

This plugin requires NATS Jetstream and Gerrit 3.6 or later.


  • linux
  • java-11
  • Bazel


The events-nats plugin can be built as a regular ‘in-tree’ plugin. That means it is required to clone a Gerrit source tree first and then to clone the events-nats plugin source directory into the /plugins path. Additionally, the plugins/external_plugin_deps.bzl file needs to be updated to include the events-nats plugin external dependencies.

git clone --recursive
git clone gerrit/plugins/events-nats
cd gerrit
rm plugins/external_plugin_deps.bzl
ln -s ./events-nats/external_plugin_deps.bzl plugins/.

If your build includes multiple plugins requiring external dependencies edit plugins/external_plugin_deps.bzl. E.g. to include dependencies of both the events-nats and the multi-site plugin:

load("//tools/bzl:maven_jar.bzl", "GERRIT", "MAVEN_CENTRAL", "MAVEN_LOCAL", "maven_jar")
load("//plugins/events-nats:external_plugin_deps.bzl", deps_events_nats = "external_plugin_deps")
load("//plugins/multi-site:external_plugin_deps.bzl", deps_multi_site = "external_plugin_deps")

def external_plugin_deps():

To build the events-nats plugins, issue this command from the Gerrit source path:

bazel build plugins/events-nats

The output is created in


Minimum Configuration

Assuming a running NATS JetStream broker on the same Gerrit host, add the following settings to etc/gerrit.config:

    [plugin "events-nats"]
        server = nats://localhost:4222


Starting a local NATS JetStream server for testing:

    docker run -d --name nats-main -p 4222:4222 -p 6222:6222 -p 8222:8222 nats -js

You can use the NATS command line client to inspect and manage NATS.