• Stars
    star
    204
  • Rank 192,063 (Top 4 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created about 7 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Easily use the Zeebe Java Client in your Spring or Spring Boot projects

Community Extension Compatible with: Camunda Platform 8

Spring Zeebe

Maven Central Project Stats

This project allows to leverage Zeebe (the orchestration engine that comes as part of Camunda Platform 8) within your Spring or Spring Boot environment easily. It is basically a wrapper around the Zeebe Java Client.

Version Compatibility

Spring Zeebe version JDK Camunda Platform version Bundled Spring Boot version Compatible Spring Boot versions
>= 8.1.15 > 11 8.1.x 2.7.7 >= 2.7.6, 3.0.x
< 8.1.14 > 11 8.1.x 2.7.5 = 2.7.x (no 3.0.x)

Examples

There are full examples, including test cases, are available here: Twitter Review example, Process Solution Template. Further, you might want to have a look into the example/ folder.

Get Started

Create a new Spring Boot project (e.g. using Spring initializr), or open a pre-existing one you already have, or simply fork our Camunda Platform 8 Process Solution Template.

Add Spring Boot Starter to Your Project

Add the following Maven dependency to your Spring Boot Starter project:

<dependency>
  <groupId>io.camunda.spring</groupId>
  <artifactId>spring-boot-starter-camunda</artifactId>
  <version>8.2.3</version>
</dependency>

Although Spring Zeebe has a transitive dependency to the Zeebe Java Client, you could also add a direct dependency if you need to specify the concrete version in your pom.xml (even this is rarely necessary):

<dependency>
  <groupId>io.camunda</groupId>
  <artifactId>zeebe-client-java</artifactId>
  <version>8.1.9</version>
</dependency>

Configuring Camunda Platform 8 SaaS Connection

Connections to the Camunda SaaS can be easily configured, create the following entries in your src/main/resources/application.properties:

zeebe.client.cloud.clusterId=xxx
zeebe.client.cloud.clientId=xxx
zeebe.client.cloud.clientSecret=xxx
zeebe.client.cloud.region=bru-2

You can also configure the connection to a self-managed Zeebe broker:

zeebe.client.broker.gateway-address=127.0.0.1:26500
zeebe.client.security.plaintext=true

You can enforce the right connection mode, for example if multiple contradicting properties are set:

zeebe.client.connection-mode=CLOUD
zeebe.client.connection-mode=ADDRESS

Connect to Zeebe

You can inject the ZeebeClient and work with it, e.g. to create new workflow instances:

@Autowired
private ZeebeClient client;

Deploy Process Models

Use the @Deployment annotation:

@SpringBootApplication
@EnableZeebeClient
@Deployment(resources = "classpath:demoProcess.bpmn")
public class MySpringBootApplication {

This annotation uses (which internally uses [https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#resources-resourceloader] (the Spring resource loader) mechanism which is pretty powerful and can for example also deploy multiple files at once:

@Deployment(resources = {"classpath:demoProcess.bpmn" , "classpath:demoProcess2.bpmn"})

or define wildcard patterns:

@Deployment(resources = "classpath*:/bpmn/**/*.bpmn")

Implement Job Worker

@JobWorker(type = "foo")
public void handleJobFoo(final ActivatedJob job) {
  // do whatever you need to do
}

See documentation below for a more in-depth discussion on parameters and configuration options of JobWorkers.

Writing test cases

You can startup an in-memory test engine and do assertions by adding this Maven dependency:

<dependency>
  <groupId>io.camunda</groupId>
  <artifactId>spring-zeebe-test</artifactId>
  <version>${spring-zeebe.version}</version>
  <scope>test</scope>
</dependency>

Note that the test engines requires Java version >= 17. If you cannot run on this Java version, you can use Testcontainers instead. Testcontainers require that you have a docker installation locally available on the developer machine. Use this dependency:

<!--
  Alternative dependency if you cannot run Java 17, so you will leverage Testcontainer
  Make sure NOT to have spring-zeebe-test on the classpath in parallel!
-->
<dependency>
  <groupId>io.camunda</groupId>
  <artifactId>spring-zeebe-test-testcontainer</artifactId>
  <version>${spring-zeebe.version}</version>
  <scope>test</scope>
</dependency>

Using Maven profiles you can also switch the test dependencies based on the available Java version.

Then you need to startup the test engine in your test case by adding @ZeebeSpringTest

@SpringBootTest
@ZeebeSpringTest
public class TestMyProcess {
  // ...

An example test case is available here.

Run Connectors

Spring Zeebe project previously included the Runtime for Camunda 8 Connectors. It has been moved to a separate Connectors project. To run Connectors, you can now use the following dependency in your project:

<dependency>
  <groupId>io.camunda.connector</groupId>
  <artifactId>spring-boot-starter-connectors</artifactId>
  <version>${connectors.version}</version>
</dependency>

If you have previously used the pure Spring Zeebe project to run Connectors, you should migrate to the new dependency.

You can find the latest version of Connectors on this page. Consult the Connector SDK for details on Connectors in general.

Documentation

Job worker configuration options

Job Type

You can configure the job type via the JobWorker annotation:

@JobWorker(type = "foo")
public void handleJobFoo() {
  // handles jobs of type 'foo'
}

If you don't specify the type the method name is used as default:

@JobWorker
public void foo() {
    // handles jobs of type 'foo'
}

As a third possibility, you can set a default job type:

zeebe.client.worker.default-type=foo

This is used for all workers that do not set a task type via the annoation.

Define variables to fetch

You can specify that you only want to fetch some variables (instead of all) when executing a job, which can decrease load and improve performance:

@JobWorker(type = "foo", fetchVariables={"variable1", "variable2"})
public void handleJobFoo(final JobClient client, final ActivatedJob job) {
  String variable1 = (String)job.getVariablesAsMap().get("variable1");
  System.out.println(variable1);
  // ...
}

Using @Variable

By using the @Variable annotation there is a shortcut to make variable retrieval simpler, including the type cast:

@JobWorker(type = "foo")
public void handleJobFoo(final JobClient client, final ActivatedJob job, @Variable String variable1) {
  System.out.println(variable1);
  // ...
}

With @Variable or fetchVariables you limit which variables are loaded from the workflow engine. You can also override this and force that all variables are loaded anyway:

@JobWorker(type = "foo", fetchAllVariables = true)
public void handleJobFoo(final JobClient client, final ActivatedJob job, @Variable String variable1) {
}

Using @VariablesAsType

You can also use your own class into which the process variables are mapped to (comparable to getVariablesAsType() in the Java Client API). Therefore use the @VariablesAsType annotation. In the below example, MyProcessVariables refers to your own class:

@JobWorker(type = "foo")
public ProcessVariables handleFoo(@VariablesAsType MyProcessVariables variables){
  // do whatever you need to do
  variables.getMyAttributeX();
  variables.setMyAttributeY(42);

  // return variables object if something has changed, so the changes are submitted to Zeebe
  return variables;
}

Fetch variables via Job

You can access variables of a process via the ActivatedJob object, which is passed into the method if it is a parameter:

@JobWorker(type = "foo")
public void handleJobFoo(final ActivatedJob job) {
  String variable1 = (String)job.getVariablesAsMap().get("variable1");
  sysout(variable1);
  // ...
}

Auto-completing jobs

By default, the autoComplete attribute is set to true for any job worker.

Note that the described default behavior of auto-completion was introduced with 8.1 and was different before, see #239 for details.

In this case, the Spring integration will take care about job completion for you:

@JobWorker(type = "foo")
public void handleJobFoo(final ActivatedJob job) {
  // do whatever you need to do
  // no need to call client.newCompleteCommand()...
}

Which is the same as:

@JobWorker(type = "foo", autoComplete = true)
public void handleJobFoo(final ActivatedJob job) {
  // ...
}

Note that the code within the handler method needs to be synchronously executed, as the completion will be triggered right after the method has finished.

When using autoComplete you can:

  • Return a Map, String, InputStream, or Object, which then will be added to the process variables
  • Throw a ZeebeBpmnError which results in a BPMN error being sent to Zeebe
  • Throw any other Exception that leads in an failure handed over to Zeebe
@JobWorker(type = "foo")
public Map<String, Object> handleJobFoo(final ActivatedJob job) {
  // some work
  if (successful) {
    // some data is returned to be stored as process variable
    return variablesMap;
  } else {
   // problem shall be indicated to the process:
   throw new ZeebeBpmnError("DOESNT_WORK", "This does not work because...");
  }
}

Programmatically completing jobs

Your job worker code can also complete the job itself. This gives you more control about when exactly you want to complete the job (e.g. allowing the completion to be moved to reactive callbacks):

@JobWorker(type = "foo", autoComplete = false)
public void handleJobFoo(final JobClient client, final ActivatedJob job) {
  // do whatever you need to do
  client.newCompleteCommand(job.getKey())
     .send()
     .exceptionally( throwable -> { throw new RuntimeException("Could not complete job " + job, throwable); });
}

Ideally, you don't use blocking behavior like send().join(), as this is a blocking call to wait for the issues command to be executed on the workflow engine. While this is very straightforward to use and produces easy-to-read code, blocking code is limited in terms of scalability.

That's why the worker above showed a different pattern (using exceptionally), often you might also want to use the whenComplete callback:

send().whenComplete((result, exception) -> {})

This registers a callback to be executed if the command on the workflow engine was executed or resulted in an exception. This allows for parallelism. This is discussed in more detail in this blog post about writing good workers for Camunda Cloud.

Note that when completing jobs programmatically, you must specify autoComplete = false. Otherwise, there is a race condition between your programmatic job completion and the Spring integration job completion, this can lead to unpredictable results.

@CustomHeaders

You can use the @CustomHeaders annotation for a parameter to retrieve custom headers for a job:

@JobWorker(type = "foo")
public void handleFoo(@CustomHeaders Map<String, String> headers){
  // do whatever you need to do
}

Of course you can combine annotations, for example @VariablesAsType and @CustomHeaders

@JobWorker
public ProcessVariables foo(@VariablesAsType ProcessVariables variables, @CustomHeaders Map<String, String> headers){
  // do whatever you need to do
  return variables;
}

Throwing ZeebeBpmnErrors

Whenever your code hits a problem that should lead to a BPMN error being raised, you can simply throw a ZeebeBpmnError providing the error code used in BPMN:

@JobWorker(type = "foo")
public void handleJobFoo() {
  // some work
  if (!successful) {
   // problem shall be indicated to the process:
   throw new ZeebeBpmnError("DOESNT_WORK", "This does not work because...");
  }
}

Additional Configuration Options

Disabling ZeebeClient

If you don't want to use a ZeebeClient for certain scenarios, you can switch it off by setting:

zeebe.client.enabled=false

Configuring Self-managed Zeebe Connection

zeebe.client.broker.gateway-address=127.0.0.1:26500
zeebe.client.security.plaintext=true

Configure different cloud environments

If you don't connect to the Camunda SaaS production environment you might have to also adjust these properties:

zeebe.client.cloud.base-url=zeebe.camunda.io
zeebe.client.cloud.port=443
zeebe.client.cloud.auth-url=https://login.cloud.camunda.io/oauth/token

As an alternative you can use the Zeebe Client environment variables.

Default task type

If you build a worker that only serves one thing, it might also be handy to define the worker job type globally - and not in the annotation:

zeebe.client.worker.defaultType=foo

Configure jobs in flight and thread pool

Number of jobs that are polled from the broker to be worked on in this client and thread pool size to handle the jobs:

zeebe.client.worker.max-jobs-active=32
zeebe.client.worker.threads=1

For a full set of configuration options please see ZeebeClientConfigurationProperties.java

Note that we generally do not advise to use a thread pool for workers, but rather implement asynchronous code, see Writing Good Workers.

ObjectMapper customization

If you need to customize the ObjectMapper that the Zeebe client uses to work with variables, you can declare a bean with type io.camunda.zeebe.client.api.JsonMapper like this:

@Configuration
class MyConfiguration {
  @Bean
  public JsonMapper jsonMapper() {
    ObjectMapper objectMapper = new ObjectMapper()
      .configure(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true);
    new ZeebeObjectMapper(objectMapper);
  }
}

Disable worker

You can disable workers via the enabled parameter of the @JobWorker annotation :

class SomeClass {
  @JobWorker(type = "foo", enabled = false)
  public void handleJobFoo() {
    // worker's code - now disabled
  }
}

You can also override this setting via your application.properties file:

zeebe.client.worker.override.foo.enabled=false

This is especially useful, if you have a bigger code base including many workers, but want to start only some of them. Typical use cases are

  • Testing: You only want one specific worker to run at a time
  • Load Balancing: You want to control which workers run on which instance of cluster nodes
  • Migration: There are two applications, and you want to migrate a worker from one to another. With this switch, you can simply disable workers via configuration in the old application once they are available within the new.

Overriding JobWorker values via configuration file

You can override the JobWorker annotation's values, as you could see in the example above where the enabled property is overridden:

zeebe.client.worker.override.foo.enabled=false

In this case, foo is the type of the worker that we want to customize.

You can override all supported configuration options for a worker, e.g.:

zeebe.client.worker.override.foo.timeout=10000

You could also provide a custom class that can customize the JobWorker configuration values by implementing the io.camunda.zeebe.spring.client.annotation.customizer.ZeebeWorkerValueCustomizer interface.

Observing metrics

Spring-zeebe-starter will provide some out-of-the-box metrics, that can be leveraged via Spring Actuator. Whenever actuator is on the classpath, you can access the following metrics:

  • camunda.job.invocations: Number of invocations of job workers (tagging the job type)
  • camunda.connector.inbound.invocations: Number of invocations of any inbound connectors (tagging the connector type)
  • camunda.connector.outbound.invocations: Number of invocations of any outbound connectors (tagging the connector type)

For all of those metrics, the following actions are recorded:

  • activated: The job/connector was activated and started to process an item
  • completed: The processing was completed successfully
  • failed: The processing failed with some exception
  • bpmn-error: The processing completed by throwing an BpmnError (which means there was no technical problem)

In a default setup, you can can enable metrics to be served via http:

management.endpoints.web.exposure.include=metrics

And then access them via http://localhost:8080/actuator/metrics/.

Code of Conduct

This project adheres to the Contributor Covenant Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to [email protected].

More Repositories

1

zeebe-simple-monitor

A monitoring application to show insides of Zeebe for developers
HTML
168
star
2

zeebe-client-node-js

Node.js client library for Zeebe Microservices Orchestration Engine
TypeScript
152
star
3

awesome-camunda-platform-8

Awesome Camunda Platform 8 Projects
128
star
4

camunda-platform-7-keycloak

Camunda Keycloak Identity Provider Plugin
Java
126
star
5

camunda-platform-7-graphql

GraphQL for Camunda Platform 7
Java
113
star
6

zeebe-docker-compose

Zeebe with Operate Docker Compose configuration
99
star
7

kafka-connect-zeebe

Kafka Connect for Zeebe.io
Java
96
star
8

camunda-platform-7-mail

Mail connectors for Camunda Platform 7
Java
85
star
9

pyzeebe

Python client for Zeebe workflow engine
Python
83
star
10

camunda-platform-7-camel

Community Extension to add Apache Camel support for Camunda Platform 7
Java
82
star
11

camunda-platform-7-reactor

Event Driven process applications
Java
78
star
12

zeebe-client-csharp

Contains an Zeebe C# client implementation.
C#
76
star
13

camunda-process-test-coverage

Community Extension Helper library to visualize which parts of a BPMN process have been covered by a process test.
Kotlin
75
star
14

micronaut-camunda-platform-7

Integration between Micronaut and Camunda (Workflow Engine). We configure Camunda with sensible defaults, so that you can get started with minimum configuration: simply add a dependency in your Micronaut project to embed the workflow engine!
Java
75
star
15

camunda-platform-7-rest-client-spring-boot

Camunda REST client for Java Spring Boot Projects, implemented using Feign
Kotlin
73
star
16

camunda-external-task-client-python3

Camunda 7 External Task Client in Python
Python
73
star
17

camunda-platform-scenario

Easily execute Camunda process scenarios and verify your expectations with Given/Then/When style tests.
Java
64
star
18

zeeqs

GraphQL API for Zeebe data
Kotlin
62
star
19

zeebe-play

Play and explore BPMN processes on Zeebe
JavaScript
61
star
20

camunda-platform-7-rest-client-java

Community extension to generate a Java client from the provided Camunda 7 OpenAPI descitpion and also warp it into Spring Boot
Java
57
star
21

camunda-bpm-php-sdk

PHP SDK for camunda BPM
PHP
53
star
22

camunda-dmn-xlsx

Convert XLSX to DMN 1.1 decision tables or deploy them to the BPM platform right away
Java
47
star
23

zeebe-simple-tasklist

Zeebe worker to manage manual/user tasks
Java
46
star
24

zeebe-hazelcast-exporter

Export events from Zeebe to Hazelcast
Java
44
star
25

camunda-8-examples

Java
41
star
26

camunda-7-community-helm

Camunda public Kubernetes Helm repo and charts
YAML
39
star
27

camunda-8-connectors

A curated list of awesome Camunda Platform 8 projects, driven by the community, partners, and Camundi.
39
star
28

zeebe-http-worker

Zeebe worker for HTTP calls
Java
38
star
29

camunda-platform-7-mockito

Provides mock helpers to register delegate/listener mocks while testing processes
Java
38
star
30

Camunda-7-Spring-Boot-Tutorial-Lafayette

This project is used as part of a video tutorial in order to show how you can use various features of Camunda in a spring boot application
Java
36
star
31

zeebe-kafka-exporter

Export events from Zeebe to Kafka
Java
36
star
32

awesome-camunda-7-external-clients

Awesome Camunda External Clients
35
star
33

camunda-bpm-elasticsearch

ElasticSearch plugin for camunda bpm @
Java
30
star
34

zeebe-spec

A tool to run tests for BPMN processes on Zeebe
Kotlin
29
star
35

bpmn-driven-testing

Visually select paths through a BPMN process as test cases. Generate and enrich those test cases for easier unit testing of your process implementations.
Java
29
star
36

camunda-platform-7-custom-batch

using the camunda batch execution for custom batch runs
Java
29
star
37

camunda-7-to-8-migration

A collection of tools to support migration from Camunda Platform 7 to Camunda Platform 8
Java
29
star
38

Make-Rest-Calls-From-Camunda-7-Example

This is an example application which demonstrates the main ways in which a rest call can ben made by from a Camunda BPMN process.
Java
29
star
39

micronaut-zeebe-client

This open source project allows you to easily implement Zeebe Worker with Micronaut: simply add a dependency in your Micronaut project
Java
26
star
40

camunda-tasklist-client-java

Java client for the Tasklist API of Camunda Platform 8
Java
25
star
41

eze

Embedded Zeebe Engine
Kotlin
24
star
42

node-red-contrib-zeebe

Zeebe nodes for Node-RED
JavaScript
24
star
43

camunda-8-lowcode-ui-template

A Camunda 8 client with a custom tasklist integrated with a custom version of form-js
TypeScript
24
star
44

camunda-7-cockpit-plugin-statistics

camunda BPM community extension providing a statistics plugin for camunda Cockpit
JavaScript
24
star
45

zeebe-test-container

Zeebe Test Container
Java
22
star
46

camunda-platform-7-osgi

OSGi integration for Camunda Platform 7
Java
22
star
47

community

Welcome to the Camunda Community Hub! This is the starting point for those interested in joining and contributing to the Camunda Community Hub.
21
star
48

script-connector

Zeebe worker for script evaluation
Java
21
star
49

slack-archivist

A Slackbot that archives threads to Discourse and suggests previous threads that may answer a user question
TypeScript
21
star
50

camunda-dmn-tester

Project to test (Camunda)-DMN Tables.
Scala
21
star
51

zeebest

A zeebe rust client
Rust
20
star
52

camunda-8-benchmark

Helper to create benchmarks for Camunda Platform 8 and Zeebe
Java
20
star
53

micronaut-camunda-external-client

This open source project allows you to easily integrate Camunda's External Task Clients into Micronaut projects: simply add a dependency in your Micronaut project
Java
19
star
54

camunda-8-helm-profiles

A collection of Helm values files for the Camunda Platform 8 Helm Chart
Makefile
19
star
55

camunda-7-migration

Fluent Java API for Camunda Platform 7 process instance migration
Java
19
star
56

camunda-8-code-studio

This repository contains all assets for the Camunda Platform 8 related Code Studio events
C#
18
star
57

email-incident-notification-plugin

Java
18
star
58

camunda-8-api-postman-collection

Collect all public API for Camunda Platform 8 into a single Postman collection to be easily used by folks
17
star
59

camunda-platform-7-grpc-external-task

gRPC API for Camunda BPM Runtime ExternalTasks
Java
17
star
60

camunda-bpm-junit5

This project was moved to https://github.com/camunda/camunda-bpm-platform/tree/master/test-utils/junit5-extension
Java
16
star
61

zeebe-cluster-helm

Base Zeebe Cluster HELM Chart
Mustache
16
star
62

camunda-modeler-plugin-rename-technical-ids

JavaScript
15
star
63

camunda-engine-cassandra

Cassandra Persistence for Camunda (Community Extension)
Java
15
star
64

CamundaCodeStudioOne

This is the code need to follow along with the Camunda Code Studo event
Java
14
star
65

zeebe-redis-exporter

Export events from Zeebe to Redis
Java
13
star
66

awesome-Camunda-and-Robotframework-projects

A collection of projects around the combination of Robotframework and Camunda
13
star
67

zeebe-cloudevents-router

Zeebe CloudEvents Router
Java
13
star
68

zeebe-dmn-worker

Zeebe worker for DMN decision evaluation
Java
13
star
69

zeebe-helm

Public Zeebe K8s HELM Charts
Shell
13
star
70

zeebe-cherry-runtime

The Cherry project is a framework to administrate workers and connectors
Java
12
star
71

Camunda-7-Run-Tutorial-Lafayette

This is tutorial which helps people understand how to build and deploy processes to the Camunda Platform Run distrobution.
JavaScript
12
star
72

camunda-acm-plugin

Community Extension providing a Cockpit Plugin for Adaptive Case Management (ACM)
JavaScript
11
star
73

zeebe-clickhouse-exporter

Export events from Zeebe to ClickHouse
Java
11
star
74

camunda-platform-8-github-action

A GitHub action for Zeebe and Camunda Platform 8 to create workflow instances and publish messages
TypeScript
11
star
75

terraform-provider-camunda

A Terraform provider to configure Camunda SaaS
Go
10
star
76

camunda-bpm-jbehave

camunda BPM community extension providing support for JBehave testing framework
Java
10
star
77

zeebe-worker-java-testutils

Utilities to test Zeebe workers implemented in Java
Java
10
star
78

camunda-operate-client-java

Java client for the Operate API of Camunda Platform 8
Java
10
star
79

camunda-7-webapp-translations

The extension provides translations in 16 different languages (e.g., Japanese, Danish, Nepali, etc.) for Camunda 7 Tasklist, Cockpit Basic/Full, and Admin.
10
star
80

camunda-jenkins-shared-library

Camunda community Jenkins Shared Library
Groovy
10
star
81

element-template-svg-converter

A library of converted SVGs for use in Element Templates along with converters to create your own custom icons
Java
9
star
82

zbctl-via-npm

Zeebe CLI via NPM
JavaScript
9
star
83

kotlin-coworker

Zeebe Worker with Kotlin coroutines
Kotlin
9
star
84

connector-sdk-nodejs

Camunda 8 Connector SDK for Node.js
TypeScript
9
star
85

CsvToDmnConverter

Java
8
star
86

DelphiZeeBeClient

Delphi client for ZeeBe gRPC interface
Pascal
8
star
87

camunda-modeler-plugin-color-picker

JavaScript
8
star
88

camunda-modeler-plugin-usertask-generatedform-preview

JavaScript
8
star
89

zeebe-lambda-connector

POC for a worker connecting to AWS Lambda for serverless function orchestration
Java
8
star
90

openapi-connector-template-generator

Mustache
8
star
91

camunda-cloud-go-client

Camunda Platform 8 Console CLI and Go Library
Go
8
star
92

camunda-cloud-docker-compose

A docker compose file to stand up a complete Camunda Cloud environment locally comprising of Zeebe, Elasticsearch, Operate, Tasklist, Identity, and Optimize.
8
star
93

zeebe-exporter-protobuf

Protobuf schema definition for Zeebe exporters to exchange/transmit records
Java
8
star
94

zeebe-client-csharp-bootstrap

Zeebe Job handlers are automaticly recognized and boostrapped via a .Net HostedService.
C#
8
star
95

camunda-space-traders

Camunda SpaceTraders SDK
Kotlin
7
star
96

zeebe-client-csharp-accelerator

C# Zeebe Job Workers made easy - boostrapped via a .NET HostedService and added to DI
C#
7
star
97

vanillabp-camunda8-adapter

This is an adapter which implements the binding of the VanillaBP SPI in order to run business processes using Camunda 8.
Java
7
star
98

zeebe-full-helm

Zeebe Cluster + Operate Parent HELM Chart
7
star
99

zeebe-keycloak-interceptor

Keycloak integration to secure Zeebe Gateways
Java
7
star
100

zeebe-operator

Zeebe Kubernetes Operator
Go
7
star