Releases: flowable/flowable-engine
Flowable 8.0.0 Release
Breaking Changes
- Upgrade to Spring Framework 7 and Spring Boot 4 - Flowable 8 is now based on Spring Framework 7 and Spring Boot 4. There is no support for Spring Boot 3 anymore.
- Upgrade to Jackson 3 - Jackson 3 is now the default JSON library. Jackson 2 is still supported via a compatibility layer
- Remove JUnit 3 and JUnit 4 support - JUnit 3 and JUnit 4 testing support, deprecated in 7.2.0, has been removed. Use JUnit 5 (Jupiter) exclusively
New Features
- Lambda Expression support in expressions - Lambda expressions are now supported in expressions. The
planItemInstanceskeyword has been expanded to support filtering based on a predicate using lambda expressions - The method
stream()can be used to obtain ajava.util.stream.Streamfrom a collection. e.g.${customers.stream().filter(customer -> customer.type eq 'premium').toList()}to get a list of premium customers or${customers.stream().map(customer -> customer.name).toList()to get the names of all the customers. - The
planItemInstancesnow expose afilter(Predicate<DelegatePlanItemInstance> predicate)method that can be used to provide custom filter options. - Date variables with milliseconds - Date variables will now include the milliseconds when they are returned over REST. E.g., up to now a date variable with the value of
2020-05-04T09:25:45.583Zwould have been returned as2020-05-04T09:25:45Z. However, now it would be returned as2020-05-04T09:25:45.583Zwhich is still ISO 8601 compliant. - Date properties in UTC - Date properties e.g., Process Instance start time will be returned as an ISO 8601 in the UTC timezone. E.g., if the start time was returned as
2025-09-24T09:58:12.609+02:00now it is returned as2025-09-24T07:58:12.609Z. - Access definition information in expressions during deployment - Expressions can now access some of the definition information in expressions resolved during deployment. e.g. in Start Timer expression
${variableContainer.definitionKey}to access the definition key - Case and Process instance migration improvements:
- Support for updating more task properties when doing case and process instance migration
- Case and process instance migration validation is now available in the REST API
- Option to automatically create plan item instances for new plan items during case instance migration
- End user tracking - Added
endUserIdfor historic process/case instances andstatefor historic process instances - Case and Process end interceptor - Added case and process end interceptor support
- Business status events - Dispatch events when updating the business status of a case or process
- Event Registry hookpoints - Added hookpoints to event registry for event payload types
- Possibility to disable DMN history persistence - Added option to disable history persistence when executing DMN decisions
- Support Java Records in Expressions
Performance Improvements
- Improve Expression coercion performance
- Long String variables now store a cached value, avoiding repeated deserialization
- Reduce unnecessary
ObjectMapperinstance creation - reuse the one from engine configuration
Bug Fixes
- Fix issue with multiple case reactivations with a parent case instance
- Fix NPE when having two sentries, and one doesn't have an
ifPart - Fix case / process instance ended invoked twice when undeploying deeply nested app
- Fix issue with moving parallel multi-instance activities to a single activity
- Ensure that multiple character events for the same element are handled correctly in XML parsing
- Make sure that
BeanELResolverand DMN Expression resolution propagates the exception cause - Avoid 'Invalid reference in diagram interchange definition' warning message in logs when plan items are part of a plan fragment
- Unlock exclusive jobs when unacquiring all jobs of a worker
- Unacquiring external worker job should unlock the exclusive scope if the external worker job is exclusive
- Address security concerns raised via GitHub issue
Jackson 3
Important: If you have scripts or expressions that call methods on a JsonNode, you need to carefully check if these work with Jackson 3, as many method signatures have changed (see details below). If you are unsure, we recommend starting with Jackson 2 configured first (flowable.variable-json-mapper=jackson2), and then testing for an upgrade to Jackson 3 over time. We do recommend looking into upgrading to Jackson 3, since Jackson 2 will eventually stop receiving updates. See Jackson Releases for the latest support information.
Jackson 3 is used for Flowable internal json manipulation. There is still support for Jackson 2 variables. With Spring Boot this can be enabled by setting flowable.variable-json-mapper to jackson2. By default, Jackson 3 is being used for variables. When configuring Flowable without Spring Boot then the variableJsonMapper on the process, cmmn, and app engine configurations should be set to be org.flowable.common.engine.impl.json.jackson2.Jackson2VariableJsonMapper and the org.flowable.common.rest.variable.Jackson2JsonObjectRestVariableConverter should be added to the appropriate rest response factories.
Notable changes when using JSON in expressions / scripts:
- Packages have changed from
com.fasterxml.jackson.databindandcom.fasterxml.jackson.coretotools.jackson.databindandtools.jackson.core elements()no longer returnsIterator<JsonNode>and instead returnsCollection<JsonNode>values()no longer returnsIterator<JsonNode>and instead returnsCollection<JsonNode>Iterator<String> fieldNames()replaced byCollection<String> propertyNames()Iterator<Map.Entry<String, JsonNode>> fields()replaced bySet<Map.Entry<String, JsonNode>> properties()JsonNode with(String)replaced byObjectNode withObject(String), and if not using a pointer then it is better to useObjectNode withProperty(String)TextNode textNode(String)replaced byStringNode stringNode(String)List<String> findValuesAsText(String)replaced byList<String> findValuesAsString(String)List<String> findValuesAsText(String, List<String>)replaced byList<String> findValuesAsString(String, List<String>)boolean isContainerNode()replaced byboolean isContainer()boolean isEmpty(SerializerProvider)replaced byboolean isEmpty(SerializationContext)JsonNode put(String, JsonNode)replaced byJsonNode replace(String, JsonNode)JsonNode putAll(Map<String, ? extends JsonNode>)replaced byJsonNode setAll(Map<String, ? extends JsonNode>)JsonNode putAll(ObjectNode)replaced byJsonNode setAll(ObjectNode)JsonParser traverse()removed without replacementJsonParser traverse(ObjectCodec)replaced byJsonParser traverse(ObjectReadContext)void serialize(JsonGenerator, SerializerProvider)replaced byvoid serialize(JsonGenerator, SerializationContext)void serializeWithType(JsonGenerator, SerializerProvider, TypeSerializer)replaced byvoid serializeWithType(JsonGenerator, SerializationContext, TypeSerializer)
Methods deprecated in Jackson 3:
String asText()replaced byString asString()String asText(String)replaced byString asString(String)boolean isTextual()replaced byboolean isString()String textValue()replaced byString stringValue()
There is also a behaviour change in the different xxxValue and asXXX methods. In Jackson 3 those methods would fail if the node is not of the appropriate type and / or if it cannot coerce the value to the requested type. e.g.
- When using
stringValueon a nonStringNodeorNullNodeit would fail, in Jackson 2 it would returnnull. - When using
asStringon aObjectNodeorArrayNodeit would fail, in Jackson 2 it would return an empty string.
Dependency Upgrades
- Upgrade to Spring Framework 7 / Spring Boot 4
- Upgrade to Jackson 3 (with Jackson 2 compatibility)
- Various other dependency updates
Flowable 7.2.0 Release
- Support for setting Variables asynchronous for BPMN and CMMN
- Support for Skip Expression for Receive Task and Send Event Task
- Support for setting local variables when migration case instances
- Support querying Historic Variables by collection of Case / Process instance ids
- Support querying Process / Case instances excluding a set of definition keys
- Support for including only defined variables when querying (Historic) Process / Case instances
- Support for querying Case instances by parent ID
- Support Input variables for Script Task
- Support resolving Case / Plan Item instance in a task listener expression
- Support DMN rule expressions with logic not at the beginning of the rule
- Support for using available conditions for Variable Event Listeners
- Support for secure HTTP Headers in the HTTP Task. When using these headers, then the header values are going to be masked when logging them and / or storing them as variables
- Support for
BigIntegerandBigDecimalas variables - Support for configuring the max length for large variables (string, json, serializable, byte array)
- Remove child deployments when un-deploying an App
- Add completedBy to Activity Instance
- Add assignee / completedBy to Plan Item Instance
- Change REST API Date responses to use UTC instead of Server Timezone
- Improve REST API to support querying dates without seconds or milliseconds
- Improve Swagger Docs by including information for start, size, order, and sort in relevant places
- Improve performance by avoiding dirty checks for Immutable entities
- Improve BPMN performance for straight through processes by avoiding unnecessary selects during deletion
- Improve CMMN performance by using a dedicated list for storing the evaluate criteria operations (which are executed once all other operations are done)
- Improve Housekeeping performance
- Fix issue when invoking
getandpathonJsonNodethrough expressions - Fix issue when parsing and validating XML with empty CDATA
- Fix issue with matching incoming events when having channel definitions in the default tenant
- Fix issue with optimistic locking for stages with async elements
- Fix issue when using Apache HttpClient 5, and the response uses a non-compliant HTTP Status code
- Fix issue when using a DMN Hit Policy Priority and no results
- Fix issue with boundary events when dynamically moving the current state to the parent process instance
- Deprecate support for JUnit 3 and JUnit 4
- Deprecate support for Joda Time
- Upgrade to Spring Boot 3.5.4
Note: Our current plan is the next Release (Flowable 8) to be based on Spring 7, Spring Boot 4 and use Jackson 3. We will also support Jackson 2, but by default we would use Jackson 3. See Path to Jackson 3.0.0 from the Jackson team
Flowable 7.1.0 release
- Removed Liquibase from the App, CMMN, DMN and event registry engines and changed it to manual SQL files like it was already done for the BPMN, Common and IDM engines.
- Improve support for Microsoft SQL Server nvarchar type and making sure that queries can use the correct index type.
- Added support to reschedule a CMMN timer job or timer event listener in the CmmnManagementService.
- Added support for multiple variable event listeners in BPMN and CMMN.
- Fixed issue with event subscriptions using multiple correlation parameters not working with event listeners mapping different correlation parameters.
- Added support for enabling event sub process start events in the process instance migration logic.
- Added support for direct migration of async service tasks inh the process migration.
- Added support for pre and post expressions in the case instance migration builder.
- Fixed issue with task properties not getting updated in the case instance migration.
- Added support to terminate sub case instances in the case migration.
- Fixed issue with repetition counter variables in the case instance migration logic.
- Added option to change the plan item and definition id in the case migration.
- Added support for LocalDate and LocalDateTime for time expressions.
- Added support for UUID variable types in the REST API.
- Upgrade to Spring Boot 3.3.4
Flowable 6.8.1 release
- This is a bug fix release.
- Added async leave functionality to support leaving an activity with an async job.
- Added support to listen to a variable event in multiple variable elements in BPMN and CMMN.
- Added support for String collection and JSON array for mail recipients in the mail task.
- Added an option to not create a repetition counter variable for repetition elements in CMMN.
- Fixed issue with event subscriptions triggering a plan item instance in an unavailable state.
- Added support for LocalDate and LocalDateTime for timer expressions in BPMN and CMMN.
- Added support for adding and removing waiting for repetition in the case instance migration and change state API.
- Added support for mapping plan item ids to a different value in the case instance migration.
- Fixed issue with sentry part instances being in an incorrect state after case instance migration.
- Fixed issue with incorrect stages getting activated on case instance migration.
- Added support for adding repetition when reactivating a case instance.
- Added support for batch case instance migration to the CMMN engine.
- Added support to stop a housekeeping batch.
- Improved history cleaning to limit the amount of sub process instances in one bulk delete.
- Upgrade to Spring Boot 2.7.18
Flowable 7.0.1 release
- This is a minor release including support for Spring Boot 3.1.6.
- Add support to dynamically create an event subscription to start a case or process instance.
- Add support to register a filter class in the inbound channel pipeline that is invoked for all events that are being received through that channel.
- Added an option to query for parent and root scope ids for (historic) case, process and task instances.
- Added an option to not create a repetition counter variable for repetition elements in CMMN.
- Fixed issue with incorrect stages getting activated on case instance migration.
Flowable 7.0.0 release
- This is the first stable release for version 7 of the Flowable Engines focusing on the Spring Boot 3, Spring 6 and Java 17 upgrade.
- The REST application requires a servlet container / application server that supports Jakarta 9.
- This release focuses on the main Flowable Engines and REST APIs for the BPMN, CMMN, DMN and event registry engines. This means that there are no UI applications, no content and form engines and the modules for Mule and some others are removed.
- Blog post with more information about the Flowable 7 release https://www.flowable.com/blog/engineering/flowable-open-source-7-0-0-release
- Support batch migration for CMMN
- Repetition support for case reactivation
- Support for stopping housekeeping batch
- Support for HTTP HEAD and OPTIONS for the Http Tasks
- Remove relocated Spring Boot Starters
- flowable-spring-boot-starter-basic - flowable-spring-boot-starter-process should be used instead
- flowable-spring-boot-starter-rest-api - flowable-spring-boot-starter-process-rest should be used instead
- Add flowable-bom with all the Flowable artifacts
- Support for dynamic Kafka message key
- Add TaskCompletionBuilder to CmmnTaskService
- Add support for handling custom input parameters for error start and boundary events and for passing additional data in error end events
- Add ability to store completer of human and user tasks in a variable
- Support collection of string or json array as mail recipients in Mail Tasks
- Upgrade to Spring Boot 3.1
- Upgrade to Camel 4
- Upgrade to CXF 4
- Provide an abstraction for sending emails through a FlowableMailClient
- Use Jakarta Mail instead of Javax Mail and replace Apache Commons Email with Eclipse Angus Mail
- Remove message based executor
- Remove some Flowable deprecated code
- CmmnRepositoryService#getDecisionTablesForCaseDefinition - use CmmnRepositoryService#getDecisionsForCaseDefinition instead
- RepositoryService#getDecisionTablesForProcessDefinition - use RepositoryService#getDecisionsForProcessDefinition instead
- HistoricCaseInstanceQuery#limitCaseVariables - no replacement it was a noop
- CaseInstanceQuery#limitCaseInstanceVariables - no replacement it was a noop
- HistoricProcessInstanceQuery#limitProcessInstanceVariables - no replacement it was a noop
- ProcessInstanceQuery#limitProcessInstanceVariables - no replacement it was a noop
- TaskInfoQuery#limitTaskVariables - no replacement it was a noop
- Removed query limit configurations from CmmnEngineConfiguration and ProcessEngineConfigurationImpl
- Removed HistoryManager#recordActivityEnd - no replacement, Flowable was never calling that method
- Removed org.flowable.engine.FlowableTaskAlreadyClaimedException - use org.flowable.common.engine.api.FlowableTaskAlreadyClaimedException instead
- Removed org.flowable.engine.cfg.MailServerInfo - use org.flowable.common.engine.impl.cfg.mail.MailServerInfo instead
- Removed org.flowable.http.HttpRequest - use org.flowable.http.common.api.HttpRequest instead
- Removed org.flowable.http.HttpResponse - use org.flowable.http.common.api.HttpResponse instead
- Removed org.flowable.http.delegate.HttpRequestHandler - use org.flowable.http.common.api.delegate.HttpRequest instead
- Removed org.flowable.http.delegate.HttpResponseHandler - use org.flowable.http.common.api.delegate.HttpResponse instead
- Removed org.flowable.identitylink.service.IdentityLinkType - use org.flowable.identitylink.api.IdentityLinkType instead
- Removed ManagedAsyncJobExecutor - configure the thread factory in the engine configuration
- Removed org.flowable.spring.SpringCallerRunsRejectedJobsHandler - use org.flowable.spring.job.service.SpringCallerRunsRejectedJobsHandler instead
- Removed org.flowable.spring.SpringRejectedJobsHandler - use org.flowable.spring.job.service.SpringRejectedJobsHandler instead
- Remove async history support. In case you were using async history, make sure that you have no async history jobs before starting the new version
Flowable 7.0.0.M2 release
- Support batch migration for CMMN
- Repetition support for case reactivation
- Support for stopping housekeeping batch
- Support for HTTP HEAD and OPTIONS for the Http Tasks
- Remove relocated Spring Boot Starters
- flowable-spring-boot-starter-basic - flowable-spring-boot-starter-process should be used instead
- flowable-spring-boot-starter-rest-api - flowable-spring-boot-starter-process-rest should be used instead
- Add flowable-bom with all the Flowable artifacts
- Support for dynamic Kafka message key
- Add TaskCompletionBuilder to CmmnTaskService
- Add support for handling custom input parameters for error start and boundary events and for passing additional data in error end events
- Add ability to store completer of human and user tasks in a variable
- Support collection of string or json array as mail recipients in Mail Tasks
- Upgrade to Spring Boot 3.1
- Upgrade to Camel 4
- Upgrade to CXF 4
- Provide an abstraction for sending emails through a FlowableMailClient
- Use Jakarta Mail instead of Javax Mail and replace Apache Commons Email with Eclipse Angus Mail
- Remove message based executor
- Remove some Flowable deprecated code
- CmmnRepositoryService#getDecisionTablesForCaseDefinition - use CmmnRepositoryService#getDecisionsForCaseDefinition instead
- RepositoryService#getDecisionTablesForProcessDefinition - use RepositoryService#getDecisionsForProcessDefinition instead
- HistoricCaseInstanceQuery#limitCaseVariables - no replacement it was a noop
- CaseInstanceQuery#limitCaseInstanceVariables - no replacement it was a noop
- HistoricProcessInstanceQuery#limitProcessInstanceVariables - no replacement it was a noop
- ProcessInstanceQuery#limitProcessInstanceVariables - no replacement it was a noop
- TaskInfoQuery#limitTaskVariables - no replacement it was a noop
- Removed query limit configurations from CmmnEngineConfiguration and ProcessEngineConfigurationImpl
- Removed HistoryManager#recordActivityEnd - no replacement, Flowable was never calling that method
- Removed org.flowable.engine.FlowableTaskAlreadyClaimedException - use org.flowable.common.engine.api.FlowableTaskAlreadyClaimedException instead
- Removed org.flowable.engine.cfg.MailServerInfo - use org.flowable.common.engine.impl.cfg.mail.MailServerInfo instead
- Removed org.flowable.http.HttpRequest - use org.flowable.http.common.api.HttpRequest instead
- Removed org.flowable.http.HttpResponse - use org.flowable.http.common.api.HttpResponse instead
- Removed org.flowable.http.delegate.HttpRequestHandler - use org.flowable.http.common.api.delegate.HttpRequest instead
- Removed org.flowable.http.delegate.HttpResponseHandler - use org.flowable.http.common.api.delegate.HttpResponse instead
- Removed org.flowable.identitylink.service.IdentityLinkType - use org.flowable.identitylink.api.IdentityLinkType instead
- Removed ManagedAsyncJobExecutor - configure the thread factory in the engine configuration
- Removed org.flowable.spring.SpringCallerRunsRejectedJobsHandler - use org.flowable.spring.job.service.SpringCallerRunsRejectedJobsHandler instead
- Removed org.flowable.spring.SpringRejectedJobsHandler - use org.flowable.spring.job.service.SpringRejectedJobsHandler instead
- Remove async history support. In case you were using async history, make sure that you have no async history jobs before starting the new version
Flowable 7.0.0.M1 release
- This is the first milestone for version 7 of the Flowable Engines focusing on the Spring Boot 3, Spring 6 and Java 17 upgrade.
- The plan forward is to keep maintaining the 6.x and 7.x versions for at least the next year, so we will do both 6.x and 7.x releases.
- The REST application requires a servlet container / application server that supports Jakarta 9.
- This release focuses on the main Flowable Engines and REST APIs for the BPMN, CMMN, DMN and event registry engines. This means that there are no UI applications, no content and form engines and the modules for Mule and some others are removed.
Flowable 6.8.0 release
- Added support for using scripts in task and execution listeners and HTTP request and response handlers.
- Added support for new task and instance history levels to provide more options to reduce the amount of historic data stored.
- Added support to throw BPMN errors in scripts.
- Added support for headers in an event model that can be used with event registry events in case and process definitions.
- Improved support for starting case and process instances with the unique feature enabled on event registry start events.
The event subscription for the event registry event is locked while starting the case and process instance to prevent any duplicate instances. - Added support for async leave in addition to the already long existing async (before) attribute for async tasks in BPMN and CMMN.
An async job will be created to execute the leave of a task when the async leave attribute is set to true. - Improved support for parallel repeatable event listeners in case definitions.
- Added interface to provide an implementation for non-matching events that are received in the event registry.
- Added support to query directly on runtime variable instances both in the Java API and REST API.
- Improved housekeeping logic to reduce the throughput time.
- Added support for retries in Kafka channels in the event registry.
- Expose topic, partitions and offset consumer record for inbound Kafka channel and provide custom partition support for outbound Kafka channel.
- Added bulk support for deleting case and process instances, terminating case instances and moving deadletter jobs to executable.
- Added activity instance REST API query support.
- Fixed issue with event listeners in a repeatable stage in a case definition.
- Fixed issue with having multiple event registry start events in a process definition.
- Add dedicated task executor for the task invoker. This is fixing an issue with a potential deadlock when using the "true parallel" HTTP task feature.
- Improved channel definition caching logic to prevent channels from getting unregistered when they should not.
- Added support for providing an owner and assignee when starting a case or process instance.
- Upgrade to Spring Boot 2.7.6.
Flowable 6.7.2 release
- Fixed issue with vulnerable Log4j dependency. The Flowable apps now use the default Spring Boot logging framework, which is Logback.
- Added support to execute a decision service in the DMN REST API.
- Added support to query tasks with case instance variables.
- Fixed issue with migrating a process instance to a new process definition with a call activity and a new boundary event.
- Upgraded to Spring boot 2.6.2.