npx claudepluginhub emaarco/bpmn-to-codeAI skills for setting up and using the bpmn-to-code plugin (Gradle/Maven)
Share bugs, ideas, or general feedback.
bpmn-to-code is now publicly available! While the project is still in its early phase, all core features are ready to use. Your feedback and contributions are highly appreciated as we continue to improve and expand the toolset.
bpmn-to-code is a tool designed to simplify process automation through automated code generation from BPMN models. Its vision is to foster clean & robust solutions for BPMN-based process automation. Therefore, it aims to provide a range of features — such as generating API definition files from BPMN process models — to reduce manual effort, simplify testing, promote the creation of clean process models, and ensure consistency between your BPMN model and your code.
Streamlined Process Automation
Say goodbye to the tedious task of manually referencing BPMN elements. bpmn-to-code automatically extracts key details—like element IDs, messages, and worker types—and generates a lightweight “Process API” that keeps your process models and code in sync.
Java & Kotlin Code Generation
Whether you’re developing in Java or Kotlin, our plugin creates ready-to-use API definitions that integrate seamlessly with your testing frameworks, messaging systems, or any other automation logic.
Engine Agnostic & Extensible
Currently, bpmn-to-code supports Camunda 7, Zeebe, and Operaton. Built with extensibility in mind, it is designed so that adding support for additional process engines is straightforward—if there is enough demand.
Styleguide Validation (🚧)
Looking ahead, I’m planing a styleguide validation feature. Much like a linter for code, it will analyze your BPMN models against your custom style guide - ensuring that element IDs, message names, and task types adhere to predefined patterns and naming conventions. This will help maintain designs that are as clean and consistent as your code.
If you want to learn more about the vision & story behind the plugin — and the problems it aims to solve as well as the advantages it can bring — check out the following posts:
The key feature of bpmn-to-code is generating a lightweight “Process API” for your BPMN models. Let’s say you have a newsletter subscription workflow (BPMN) that looks like this:
After running bpmn-to-code, you’ll have a Kotlin (or Java) file that programmatically references your process model. For example:
// Generated by bpmn-to-code
@file:Suppress("unused")
package de.emaarco.example
import kotlin.String
import kotlin.Suppress
object NewsletterSubscriptionProcessApiV1 {
const val PROCESS_ID: String = "newsletterSubscription"
object Elements {
const val TIMER_EVERY_DAY: String = "Timer_EveryDay"
const val TIMER_AFTER_3_DAYS: String = "Timer_After3Days"
const val ERROR_EVENT_INVALID_MAIL: String = "ErrorEvent_InvalidMail"
const val ACTIVITY_CONFIRM_REGISTRATION: String = "Activity_ConfirmRegistration"
const val SUB_PROCESS_CONFIRMATION: String = "SubProcess_Confirmation"
const val END_EVENT_REGISTRATION_ABORTED: String = "EndEvent_RegistrationAborted"
const val END_EVENT_SUBSCRIPTION_CONFIRMED: String = "EndEvent_SubscriptionConfirmed"
const val END_EVENT_REGISTRATION_COMPLETED: String = "EndEvent_RegistrationCompleted"
const val END_EVENT_REGISTRATION_NOT_POSSIBLE: String = "EndEvent_RegistrationNotPossible"
const val ACTIVITY_ABORT_REGISTRATION: String = "Activity_AbortRegistration"
const val ACTIVITY_SEND_WELCOME_MAIL: String = "Activity_SendWelcomeMail"
const val ACTIVITY_SEND_CONFIRMATION_MAIL: String = "Activity_SendConfirmationMail"
const val START_EVENT_SUBMIT_REGISTRATION_FORM: String = "StartEvent_SubmitRegistrationForm"
const val START_EVENT_REQUEST_RECEIVED: String = "StartEvent_RequestReceived"
}
object Messages {
const val MESSAGE_FORM_SUBMITTED: String = "Message_FormSubmitted"
const val MESSAGE_SUBSCRIPTION_CONFIRMED: String = "Message_SubscriptionConfirmed"
}