• Stars
    star
    126
  • Rank 284,543 (Top 6 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created over 5 years ago
  • Updated 8 months ago

Reviews

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

Repository Details

Camunda Keycloak Identity Provider Plugin

Camunda Platform 7 - Keycloak Identity Provider Plugin

Maven Central Apache License V.2

Keycloak

Keycloakâ„¢ (https://www.keycloak.org/) is an Open Source Identity and Access Management platform including advanced features such as User Federation, Identity Brokering and Social Login.

Camundaâ„¢ (https://camunda.com/) Platform 7 is perfectly suited to carry out BPM projects in the cloud. Identity management in the cloud, however, often differs from classical approaches. Camunda already provides a generic sample for Single Sign On when using Spring Boot. See https://github.com/camunda-consulting/code/tree/master/snippets/springboot-security-sso. Specific instructions on how to use Spring Boots OAuth2 SSO in combination with this Keycloak Identity Provider Plugin can be found below.

Why this plugin? SSO is sufficient in case you only want authentication but have no further advanced security roles. If one needs to use Camundas IdentityService APIs or wants to see actual Users and Groups show up in Cockpit, a custom IdentityProvider needs to be implemented as well.

This plugin provides the basis for using Keycloak as Identity Management solution and will provide a ReadOnlyIdentityProvider. What you will get is a fully integrated solution for using Keycloak as an Identity Provider in Camunda receiving users and groups from Keycloak. The authorization of these users and groups for Camunda resources itself remains within Camunda. This plugin allows the usage of Keycloak as Identity Provider even without SSO.

Beware: in case you want to use Keycloak's advanced login capabilities for social connections you must configure SSO as well. Password grant exchanges are only supported for Keycloak's internally managed users and users of an LDAP / Keberos User federation. Hence without SSO you will only be able to login with users managed by such connections.

Current version: 7.19.0
Latest tests with: Keycloak 21.1.1, 19.0.3-legacy, Camunda 7.19.0, 7.19.0-ee

Features

Changes in version 7.19.0

  • Updated samples to Camunda Platform 7.19 and Keycloak 21.1

New in version 7.18.0

  • Fixed a bug for userId's containing a plus sign.
  • Updated samples to Camunda Platform 7.18 and Keycloak >= 18
  • Alternative for client side JWT authentication in Camunda Cockpit (incubation status)

Changes in Version 7.17.0

  • Renamed the extension from camunda-bpm-identity-keycloak to camunda-platform-7-keycloak
  • Updated samples to Camunda Platform 7.17
  • Introduced new version which reflects the Camunda Version used in samples and tests.

New in Version 2.2.3:

  • Optional Keycloak Login Cache - helps you to minimize password check requests to Keycloak and thus improve performance. Not applicable in SSO scenarios, but useful e.g. when using External Task Clients with Basic Auth.

New in Version 2.2.2:

  • Optimized user / group queries when using single items in userIdIn(...) / groupIdIn(...) selections

New in Version 2.2.1:

  • Fixed a bug where "like" filters in combination with missing Keycloak attributes (e.g. users without email) may cause a NullPointerException

New in Version 2.2.0:

  • Optional Keycloak Query Cache - helps you to minimize requests to Keycloak and thus improve performance.
  • Minor optimization of refresh token handling in case it is missing at all.

New in Version 2.1.0:

  • Auto retry with refreshed new token in case of Keycloak HTTP 401 responses (more stability in case of misconfigurations).

New in Version 2.0.0:

  • Support for Camunda Platform 7 Run
  • New options proxyUri, proxyUser, proxyPassword for optional proxy support.
  • Usage of com.google.code.gson for JSON (de)serialization.
  • Further internal refactorings and preparations for future enhancements.

New in Version 1.5.0:

  • New option maxResultSize for configuring the maximum result size of queries against the Keycloak REST API.

New in Version 1.4.0:

  • Corrected rare problems with group queries of a single user in case the Keycloak Client name is similar to this username and config property useUsernameAsCamundaUserId=true

New in Version 1.3.0:

  • Provided additional fat camunda-platform-7-keycloak-all.jar including transitive dependencies for easier installation e.g. on Apache Tomcat distribution with shared engine.

New in Version 1.2.0:

  • Optimized and correct searches in Keycloak mass data
  • Add missing paging functionality to queries

New in Version 1.1.0:

  • Ability to read group hierarchies.
  • New option useGroupPathAsCamundaGroupId for readable group IDs. Helps when configuring authorizations.

Version 1.0.0:

  • ReadOnlyIdentityProvider
  • Broad support for user and group queries
  • Compatible with Spring Boot OAuth2 SSO

Known limitations:

  • A strategy to distinguish SYSTEM and WORKFLOW groups is missing. Currently only the administrator group is mapped to type SYSTEM.
  • Some query filters are applied on the client side - the Keycloak REST API does not allow full criteria search in all required cases.
  • Sort criteria for queries are implemented on the client side - the Keycloak REST API does not allow result ordering.
  • Tenants are currently not supported.

Prerequisites in your Keycloak realm

  1. Keycloak docker images can be found on Keycloak Docker Hub.

  2. Create a new client named camunda-identity-service with access type confidential and service accounts enabled: IdentityServiceSettings Please be aware, that beginning with Keycloak 18, you do not only have to configure a valid redirect URL, but a valid post logout redirect URL as well. To keep things easy values can be the same.

  3. In order to use refresh tokens set the "Use Refresh Tokens For Client Credentials Grant" option within the "OpenID Connect Compatibility Modes" section (available in newer Keycloak versions):

    IdentityServiceOptions

  4. Add the roles query-groups, query-users, view-users to the service account client roles of your realm (choose realm-management or master-realm, depending on whether you are using a separate realm or master): IdentityServiceRoles

  5. Your client credentials can be found here: IdentityServiceCredentials

  6. Once you're done with the basic setup you're now ready to manage your users and groups with Keycloak. Please keep in mind, that in order to make the Keycloak Identity Provider work, you will need at least one dedicated Camunda admin group or Camunda admin user in your realm. Whether you create this group/user manually or import it using the LDAP user federation or any other Identity Provider is up to you. KeycloakGroups

Usage with Camunda Spring Boot

Maven Dependencies:

<dependency>
    <groupId>org.camunda.bpm.extension</groupId>
    <artifactId>camunda-platform-7-keycloak</artifactId>
    <version>7.18.0</version>
</dependency>

Add the following class to your Camunda Spring Boot application in order to activate the Keycloak Identity Provider Plugin:

package <your-package>;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.camunda.bpm.extension.keycloak.plugin.KeycloakIdentityProviderPlugin;

@Component
@ConfigurationProperties(prefix="plugin.identity.keycloak")
public class KeycloakIdentityProvider extends KeycloakIdentityProviderPlugin {
}

Configuration in application.yaml will then look as follows:

camunda.bpm:
  ...
  authorization:
    enabled: true

plugin.identity.keycloak:
  keycloakIssuerUrl: https://<your-keycloak-server>/auth/realms/<realm-name>
  keycloakAdminUrl: https://<your-keycloak-server>/auth/admin/realms/<realm-name>
  clientId: camunda-identity-service
  clientSecret: 42aa42bb-1234-4242-a24a-42a2b420cde0
  useEmailAsCamundaUserId: true
  administratorGroupName: camunda-admin

Hint: the engine must not create a user upon startup - the plugin is a ReadOnlyIdentityProvider. Hence you must not configure an admin-user for camunda.bpm in your application.yaml. The following configuration will likely cause errors upon startup:

camunda.bpm:
# DON'T DO THIS
  admin-user:
    id: demo
    password: demo
    firstName: Camunda

The admin-user part must be deleted in order to work properly. The recommended procedure for creating the admin user and admin group in Keycloak is to have the deployment pipeline do this during the environment setup phase.

A list of configuration options can be found below:

Property Description
keycloakIssuerUrl The basic issuer URL of your Keycloak server including the realm.
Sample for master realm: https://<your-keycloak-server>/auth/realms/master
keycloakAdminUrl The admin URL of the Keycloak server REST API including the realm.
Sample for master realm: https://<your-keycloak-server>/auth/admin/realms/master
clientId The Client ID of your application.
clientSecret The Client Secret of your application.
useEmailAsCamundaUserId Whether to use the Keycloak email attribute as Camunda's user ID. Default is false.

This is option is a fallback in case you don't use SSO and want to login using Camunda's web interface with your mail address and not the cryptic internal Keycloak ID. Keep in mind that you will only be able to login without SSO with Keycloak's internally managed users and users managed by the LDAP / Keberos User federation.
useUsernameAsCamundaUserId Whether to use the Keycloak username attribute as Camunda's user ID. Default is false. In the default case the plugin will use the internal Keycloak ID as Camunda's user ID.
useGroupPathAsCamundaGroupId Whether to use the Keycloak unique group path as Camunda's group ID. Default is false. In the default case the plugin will use the internal Keycloak ID as Camunda's group ID.
This flag is particularly useful in case you want to have human readable group IDs and recommended when using groups in Camunda's authorization management.
Since 1.1.0
administratorGroupName The name of the administrator group. If this name is set and engine authorization is enabled, the plugin will create group-level Administrator authorizations on all built-in resources.
administratorUserId The ID of the administrator user. If this ID is set and engine authorization is enabled, the plugin will create user-level Administrator authorizations on all built-in resources.
authorizationCheckEnabled If this property is set to true, then authorization checks are performed when querying for users or groups. Otherwise authorization checks are not performed when querying for users or groups. Default: true.
Note: If you have a huge amount of Keycloak users or groups we advise to set this property to false to improve the performance of the user and group query.
maxResultSize Maximum result size of queries against the Keycloak API. Default: 250.

Beware: Setting the parameter to a too low value can lead to unexpected effects. Keep in mind that parts of the filtering takes place on the client side / within the plugin itself. Setting the parameter to a too high value can lead to performance and memory issues.
Since 1.5.0
maxHttpConnections Maximum number HTTP connections for the Keycloak connection pool. Default: 50
disableSSLCertificateValidation Whether to disable SSL certificate validation. Default: false. Useful in test environments.
proxyUri Optional URI of a proxy to use. Default: null, example: http://proxy:81.
Since 2.0.0
proxyUser Optional username for proxy authentication. Default: null.
Since 2.0.0
proxyPassword Optional password for proxy authentication. Default: null.
Since 2.0.0

Caching options

This is a ReadOnlyIdentityProvider which translates all queries against the Camunda IdentityService in REST queries against Keycloak. Under high load it makes sense to not request the same things again and again, especially since the data of users and groups do not change every second. Therefore this plugin provides an optional cache feature.

User and group query caching

In order to activate caching of user and group queries you have the following options available:

Property Description
cacheEnabled Enable caching of user and group queries to Keycloak to improve performance. Default: false.
Since 2.2.0
maxCacheSize Maximum size of the cache. Least used entries are evicted when this limit is reached. Default: 500.
Since 2.2.0
cacheExpirationTimeoutMin Time (in minutes) after which a cached entry is evicted. Default: 15 minutes.
Since 2.2.0

Besides caching of user and group queries there is another scenario where caching could make sense.

Login caching

Imagine a setup with lots of External Task Clients using HTTP Basic Auth against the Camunda REST API (e.g. set camunda.bpm.run.auth.enabled: true when using Camunda Run). Your External Task Clients then might trigger the IdentityProvider's checkPassword function at high frequency. This function requests a token from Keycloak each time it is called. In case of a successful response the login is treated as valid. High frequency then means requesting lots of tokens - in the worst case all for the same user and before an already delivered token has timed out. Therefore this plugin provides an optional login cache feature as well.

In order to activate the login cache you have the following options available:

Property Description
loginCacheEnabled Enable caching of login / check password requests to Keycloak to improve performance. Not applicable in case of SSO scenarios, but useful e.g. in case of External Tasks clients using HTTP Basic Auth only. Default: false
Since 2.2.3
loginCacheSize Maximum size of the login cache. Least used entries are evicted when this limit is reached. Default: 50.
Since 2.2.3
loginCacheExpirationTimeoutMin Time (in minutes) after which a login cache entry is evicted. Default: 15 minutes.
Since 2.2.3

On the downside this feature bypasses the password grant exchange function of Keycloak until the configured timeout expires. So the choice is yours. Please be aware that the login cache is not applicable for SSO scenarios.

Activating Single Sign On

In this part, we’ll discuss how to activate SSO – Single Sign On – for the Camunda Web App using Spring Boot and Spring Security 5.2.x OAuth 2.0 Client capabilities in combination with this plugin and Keycloak as authorization server.

In order to setup Spring Boot's OAuth2 security add the following Maven dependencies to your project:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>

What we need is a bridge between Spring Security and Camunda. Hence insert a KeycloakAuthenticationProvider as follows:

/**
  * OAuth2 Authentication Provider for usage with Keycloak and KeycloakIdentityProviderPlugin. 
  */
public class KeycloakAuthenticationProvider extends ContainerBasedAuthenticationProvider {

    @Override
    public AuthenticationResult extractAuthenticatedUser(HttpServletRequest request, ProcessEngine engine) {

        // Extract user-name-attribute of the OAuth2 token
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (!(authentication instanceof OAuth2AuthenticationToken) || !(authentication.getPrincipal() instanceof OidcUser)) {
            return AuthenticationResult.unsuccessful();
        }
        String userId = ((OidcUser)authentication.getPrincipal()).getName();
        if (StringUtils.isEmpty(userId)) {
            return AuthenticationResult.unsuccessful();
        }

        // Authentication successful
        AuthenticationResult authenticationResult = new AuthenticationResult(userId, true);
        authenticationResult.setGroups(getUserGroups(userId, engine));

        return authenticationResult;
    }

    private List<String> getUserGroups(String userId, ProcessEngine engine){
        List<String> groupIds = new ArrayList<>();
        // query groups using KeycloakIdentityProvider plugin
        engine.getIdentityService().createGroupQuery().groupMember(userId).list()
            .forEach( g -> groupIds.add(g.getId()));
        return groupIds;
    }

}

Last but not least add a security configuration and enable OAuth2 SSO:

/**
* Camunda Web application SSO configuration for usage with KeycloakIdentityProviderPlugin.
*/
@ConditionalOnMissingClass("org.springframework.test.context.junit.jupiter.SpringExtension")
@Configuration
@Order(SecurityProperties.BASIC_AUTH_ORDER - 10)
public class WebAppSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
        .csrf().ignoringAntMatchers("/api/**")
        .and()
        .requestMatchers().antMatchers("/**").and()
          .authorizeRequests(authorizeRequests ->
            authorizeRequests
            .antMatchers("/app/**", "/api/**", "/lib/**")
            .authenticated()
            .anyRequest()
            .permitAll()
          )
        .oauth2Login()
        ;
    }

    @SuppressWarnings({ "rawtypes", "unchecked" })
    @Bean
    public FilterRegistrationBean containerBasedAuthenticationFilter(){

        FilterRegistrationBean filterRegistration = new FilterRegistrationBean();
        filterRegistration.setFilter(new ContainerBasedAuthenticationFilter());
        filterRegistration.setInitParameters(Collections.singletonMap("authentication-provider", "org.camunda.bpm.extension.keycloak.showcase.sso.KeycloakAuthenticationProvider"));
        filterRegistration.setOrder(101); // make sure the filter is registered after the Spring Security Filter Chain
        filterRegistration.addUrlPatterns("/app/*");
        return filterRegistration;
    }

    @Bean
    @Order(0)
    public RequestContextListener requestContextListener() {
        return new RequestContextListener();
    }
}

Finally configure Spring Security with your Keycloak Single Page Web App client-id and client-secret in application.yaml as follows:

# Spring Boot Security OAuth2 SSO
spring.security.oauth2:
  client:
    registration:
      keycloak:
        provider: keycloak
        client-id: camunda-identity-service
        client-secret: yyy2121abc21def2121ghi212132121abc21def2121ghi2121eyyy
        authorization-grant-type: authorization_code
        redirect-uri: "{baseUrl}/{action}/oauth2/code/{registrationId}"
        scope: openid, profile, email
    provider:
      keycloak:
        issuer-uri: https://<your-keycloak-server>/auth/realms/camunda
        authorization-uri: https://<your-keycloak-server>/auth/realms/camunda/protocol/openid-connect/auth
        user-info-uri: https://<your-keycloak-server>/auth/realms/camunda/protocol/openid-connect/userinfo
        token-uri: https://<your-keycloak-server>/auth/realms/camunda/protocol/openid-connect/token
        jwk-set-uri: https://<your-keycloak-server>/auth/realms/camunda/protocol/openid-connect/certs
        # set user-name-attribute one of: 
        # - sub                -> default; using keycloak ID as camunda user ID
        # - email              -> useEmailAsCamundaUserId=true
        # - preferred_username -> useUsernameAsCamundaUserId=true
        user-name-attribute: email

Beware: You have to set the parameter user-name-attribute of the spring.security.oauth2.client.provider.keycloak in a way that it matches the configuration of your KeycloakIdentityProviderPlugin:

  • useEmailAsCamundaUserId: true - set user-name-attribute: email
  • useUsernameAsCamundaUserId: true - set user-name-attribute: preferred_username
  • neither of the above two, using Keycloak's ID as default - set user-name-attribute: sub

Keep in mind that Keycloak's email attribute might not always be unique, depending on your setup. Email uniqueness can be configured on a per realm level depending on the setting Login with email.

Quickstart

As a quickstart into using and configuring the plugin we recommend to have a look at the Installation on Camunda Platform Run. You'll find a chapter "Docker Sample Setup" at the end of the README. This is a simple starting point.

If your intention is a complete SSO setup on Kubernetes you'll be more happy with the next reference.

Sample Spring Boot Project with SSO on Kubernetes

A sample project using this plugin including a basic SSO and Kubernetes setup can be found under Camunda Showcase for Spring Boot & Keycloak Identity Provider. See directory examples.

Installation on Apache Tomcat with Shared Process Engine

Even if from an architectural point of view Spring Boot is currently the most recommended approach for cloud scenarios, it is of course possible to install the plugin in other Camunda distributions as well. A description on how to install the plugin on an Apache Tomcat full distribution can be found under Installation on Tomcat. See directory examples.

Installation on Camunda Platform Run

A description on how to install the plugin on Camunda BPM Run can be found under Installation on Camunda BPM Run. See directory examples.

Installation on JBoss/Wildfly

A description on how to install the plugin on a JBoss/Wildfly can be found under Installation on JBoss/Wildfly. See directory examples.

Unit testing the plugin

In order to run the unit tests I have used a local docker setup of Keycloak with docker-compose.yml as follows:

version: "3.9"

services:
  jboss.keycloak:
    image: quay.io/keycloak/keycloak:21.1.1
    restart: always
    environment:
      TZ: Europe/Berlin
      DB_VENDOR: h2
      KEYCLOAK_ADMIN: keycloak
      KEYCLOAK_ADMIN_PASSWORD: keycloak1!
      KC_HTTP_RELATIVE_PATH: /auth
    ports:
      - "8443:8443"
      - "8080:8080"
    command:
      - start-dev
      - --features admin-fine-grained-authz

For details see documentation on Running Keycloak in a container.

Maven test setup

Running unit tests from Maven requires configuring the details of a running Keycloak server. This can be achieved by setting the following environment variables:

Environment Variable Description
KEYCLOAK_URL Keycloak server URL.
Default value: http://localhost:8080/auth
KEYCLOAK_ADMIN_USER The admin user of the Keycloak server.
Default value: keycloak
KEYCLOAK_ADMIN_PASSWORD The admin password of the Keycloak server.
Default value: keycloak1!

In case you choose Keycloak in the new Quarkus distribution, please be aware that /auth has been removed from the default context path. Hence, it is required to change the KEYCLOAK_URL for the tests. Tests also run successfully against the Quarkus distribution, in case you start Keycloak in Development mode.


That's it. Have a happy Keycloak experience and focus on what really matters: the core processes of your customer.

Brought to you by:

Accso

Gunnar von der Beck, Accso - Accelerated Solutions GmbH


Resources

Maintainer

License

License: Apache License 2.0

More Repositories

1

spring-zeebe

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

zeebe-simple-monitor

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

zeebe-client-node-js

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

awesome-camunda-platform-8

Awesome Camunda Platform 8 Projects
128
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