diff --git a/impl/README.md b/impl/README.md
index e041285da..931a66df2 100644
--- a/impl/README.md
+++ b/impl/README.md
@@ -70,17 +70,26 @@ This reference implementation can run workflows consisting of:
This SDK is modular by design—pull in only what you need:
-* **`serverlessworkflow-impl-core`**
+* **serverlessworkflow-impl-core**
Workflow engine & core interfaces. Depends on generated types and CloudEvents SDK.
-* **`serverlessworkflow-impl-jackson`**
- Adds Jackson integration, JQ expressions, JSON Schema validation, and CloudEvents (de)serialization.
+* **serverlessworkflow-impl-jackson**
👉 **Most users add this one.**
-
-* **`serverlessworkflow-impl-http`**
+
+ Adds Jackson integration, JQ expressions, JSON Schema validation, and CloudEvents (de)serialization.
+
+ Internally, this module is an aggregation of smaller modules to allow part replacement if needed:
+ * **serverlessworkflow-impl-jq** JQ expression implementation
+ * **serverlessworkflow-impl-model** Jackson model implementation
+ * **serverlessworkflow-impl-validation** Schema validation implementation
+ * **serverlessworkflow-impl-lifecycle-events** Enable publication of lifecycle events as Json cloud events.
+ * **serverlessworkflow-impl-json** Json common utilities shared by all modules in this list
+
+
+* **serverlessworkflow-impl-http**
HTTP `Call` task handler.
-* **`serverlessworkflow-impl-jackson-jwt`**
+* **serverlessworkflow-impl-jackson-jwt**
OAuth2/OIDC helpers for HTTP calls.
There are also companion modules/docs for:
diff --git a/impl/jackson/pom.xml b/impl/jackson/pom.xml
index 1f123648c..3690fafa3 100644
--- a/impl/jackson/pom.xml
+++ b/impl/jackson/pom.xml
@@ -6,23 +6,28 @@
8.0.0-SNAPSHOT
serverlessworkflow-impl-jackson
+ pom
Serverless Workflow :: Impl :: Jackson
-
- io.serverlessworkflow
- serverlessworkflow-impl-core
-
-
- io.serverlessworkflow
- serverlessworkflow-api
-
-
- io.cloudevents
- cloudevents-json-jackson
-
-
- com.networknt
- json-schema-validator
-
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-core
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-jq
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-model
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-validation
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-lifecycle-events
+
\ No newline at end of file
diff --git a/impl/jq/pom.xml b/impl/jq/pom.xml
index 451ab5553..909ace32b 100644
--- a/impl/jq/pom.xml
+++ b/impl/jq/pom.xml
@@ -8,25 +8,30 @@
serverlessworkflow-impl-jq
Serverless Workflow :: Impl :: JQ
-
- net.thisptr
- jackson-jq
-
-
- io.serverlessworkflow
- serverlessworkflow-impl-jackson
-
-
- org.junit.jupiter
- junit-jupiter-engine
-
-
- org.assertj
- assertj-core
-
-
- org.mockito
- mockito-core
-
+
+ net.thisptr
+ jackson-jq
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-json
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+
+
+ org.assertj
+ assertj-core
+
+
+ org.mockito
+ mockito-core
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-model
+ test
+
\ No newline at end of file
diff --git a/impl/json-utils/pom.xml b/impl/json-utils/pom.xml
new file mode 100644
index 000000000..57627413b
--- /dev/null
+++ b/impl/json-utils/pom.xml
@@ -0,0 +1,24 @@
+
+ 4.0.0
+
+ io.serverlessworkflow
+ serverlessworkflow-impl
+ 8.0.0-SNAPSHOT
+
+ serverlessworkflow-impl-json
+ Serverless Workflow :: Impl :: Json utils
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-core
+
+
+ io.cloudevents
+ cloudevents-json-jackson
+
+
+
\ No newline at end of file
diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/events/JacksonCloudEventUtils.java b/impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/JacksonCloudEventUtils.java
similarity index 96%
rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/events/JacksonCloudEventUtils.java
rename to impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/JacksonCloudEventUtils.java
index 61df65020..a3591a93c 100644
--- a/impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/events/JacksonCloudEventUtils.java
+++ b/impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/JacksonCloudEventUtils.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.serverlessworkflow.impl.jackson.events;
+package io.serverlessworkflow.impl.jackson;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.NullNode;
@@ -21,7 +21,6 @@
import io.cloudevents.CloudEvent;
import io.cloudevents.CloudEventData;
import io.cloudevents.jackson.JsonCloudEventData;
-import io.serverlessworkflow.impl.jackson.JsonUtils;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.time.OffsetDateTime;
diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/JsonUtils.java b/impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/JsonUtils.java
similarity index 100%
rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/JsonUtils.java
rename to impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/JsonUtils.java
diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/MergeUtils.java b/impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/MergeUtils.java
similarity index 100%
rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/MergeUtils.java
rename to impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/MergeUtils.java
diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/ObjectMapperFactory.java b/impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/ObjectMapperFactory.java
similarity index 100%
rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/ObjectMapperFactory.java
rename to impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/ObjectMapperFactory.java
diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/ObjectMapperFactoryProvider.java b/impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/ObjectMapperFactoryProvider.java
similarity index 100%
rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/ObjectMapperFactoryProvider.java
rename to impl/json-utils/src/main/java/io/serverlessworkflow/impl/jackson/ObjectMapperFactoryProvider.java
diff --git a/impl/lifecycleevent/pom.xml b/impl/lifecycleevent/pom.xml
new file mode 100644
index 000000000..82ba06973
--- /dev/null
+++ b/impl/lifecycleevent/pom.xml
@@ -0,0 +1,20 @@
+
+ 4.0.0
+
+ io.serverlessworkflow
+ serverlessworkflow-impl
+ 8.0.0-SNAPSHOT
+
+ serverlessworkflow-impl-lifecycle-events
+ Serverless Workflow :: Impl :: Jackson:: Lifecycle Events
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-json
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-core
+
+
+
\ No newline at end of file
diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/events/JacksonLifeCyclePublisher.java b/impl/lifecycleevent/src/main/java/io/serverlessworkflow/impl/jackson/events/JacksonLifeCyclePublisher.java
similarity index 100%
rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/events/JacksonLifeCyclePublisher.java
rename to impl/lifecycleevent/src/main/java/io/serverlessworkflow/impl/jackson/events/JacksonLifeCyclePublisher.java
diff --git a/impl/jackson/src/main/resources/META-INF/services/io.serverlessworkflow.impl.lifecycle.WorkflowExecutionListener b/impl/lifecycleevent/src/main/resources/META-INF/services/io.serverlessworkflow.impl.lifecycle.WorkflowExecutionListener
similarity index 100%
rename from impl/jackson/src/main/resources/META-INF/services/io.serverlessworkflow.impl.lifecycle.WorkflowExecutionListener
rename to impl/lifecycleevent/src/main/resources/META-INF/services/io.serverlessworkflow.impl.lifecycle.WorkflowExecutionListener
diff --git a/impl/model/pom.xml b/impl/model/pom.xml
new file mode 100644
index 000000000..c73779712
--- /dev/null
+++ b/impl/model/pom.xml
@@ -0,0 +1,20 @@
+
+ 4.0.0
+
+ io.serverlessworkflow
+ serverlessworkflow-impl
+ 8.0.0-SNAPSHOT
+
+ serverlessworkflow-impl-model
+ Serverless Workflow :: Impl :: Jackson:: Model
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-json
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-core
+
+
+
\ No newline at end of file
diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModel.java b/impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModel.java
similarity index 100%
rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModel.java
rename to impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModel.java
diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelCollection.java b/impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelCollection.java
similarity index 100%
rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelCollection.java
rename to impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelCollection.java
diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelDeserializer.java b/impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelDeserializer.java
similarity index 100%
rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelDeserializer.java
rename to impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelDeserializer.java
diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelFactory.java b/impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelFactory.java
similarity index 98%
rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelFactory.java
rename to impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelFactory.java
index cb2516143..810207618 100644
--- a/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelFactory.java
+++ b/impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelFactory.java
@@ -27,8 +27,8 @@
import io.serverlessworkflow.impl.WorkflowModel;
import io.serverlessworkflow.impl.WorkflowModelCollection;
import io.serverlessworkflow.impl.WorkflowModelFactory;
+import io.serverlessworkflow.impl.jackson.JacksonCloudEventUtils;
import io.serverlessworkflow.impl.jackson.JsonUtils;
-import io.serverlessworkflow.impl.jackson.events.JacksonCloudEventUtils;
import java.math.BigDecimal;
import java.time.OffsetDateTime;
import java.util.Map;
diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelSerializer.java b/impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelSerializer.java
similarity index 100%
rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelSerializer.java
rename to impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModelSerializer.java
diff --git a/impl/jackson/src/main/resources/META-INF/services/io.serverlessworkflow.impl.WorkflowModelFactory b/impl/model/src/main/resources/META-INF/services/io.serverlessworkflow.impl.WorkflowModelFactory
similarity index 100%
rename from impl/jackson/src/main/resources/META-INF/services/io.serverlessworkflow.impl.WorkflowModelFactory
rename to impl/model/src/main/resources/META-INF/services/io.serverlessworkflow.impl.WorkflowModelFactory
diff --git a/impl/persistence/jackson-marshaller/pom.xml b/impl/persistence/jackson-marshaller/pom.xml
index 322a557ce..7cd1447b8 100644
--- a/impl/persistence/jackson-marshaller/pom.xml
+++ b/impl/persistence/jackson-marshaller/pom.xml
@@ -14,7 +14,7 @@
io.serverlessworkflow
- serverlessworkflow-impl-jackson
+ serverlessworkflow-impl-model
\ No newline at end of file
diff --git a/impl/pom.xml b/impl/pom.xml
index fe4f6bd32..8996325f8 100644
--- a/impl/pom.xml
+++ b/impl/pom.xml
@@ -27,6 +27,31 @@
serverlessworkflow-impl-http
${project.version}
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-json
+ ${project.version}
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-jq
+ ${project.version}
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-model
+ ${project.version}
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-validation
+ ${project.version}
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-lifecycle-events
+ ${project.version}
+
io.serverlessworkflow
serverlessworkflow-persistence-api
@@ -57,11 +82,6 @@
serverlessworkflow-impl-jackson
${project.version}
-
- io.serverlessworkflow
- serverlessworkflow-impl-jq
- ${project.version}
-
net.thisptr
jackson-jq
@@ -104,5 +124,9 @@
persistence
test
jq
+ json-utils
+ model
+ lifecycleevent
+ validation
\ No newline at end of file
diff --git a/impl/test/pom.xml b/impl/test/pom.xml
index 32bc56756..f861f9c55 100644
--- a/impl/test/pom.xml
+++ b/impl/test/pom.xml
@@ -29,10 +29,6 @@
io.serverlessworkflow
serverlessworkflow-impl-http
-
- io.serverlessworkflow
- serverlessworkflow-impl-jq
-
io.serverlessworkflow
serverlessworkflow-impl-jackson-jwt
diff --git a/impl/validation/pom.xml b/impl/validation/pom.xml
new file mode 100644
index 000000000..b8b77ed69
--- /dev/null
+++ b/impl/validation/pom.xml
@@ -0,0 +1,28 @@
+
+ 4.0.0
+
+ io.serverlessworkflow
+ serverlessworkflow-impl
+ 8.0.0-SNAPSHOT
+
+ serverlessworkflow-impl-validation
+ Serverless Workflow :: Impl :: Jackson:: Validation
+
+
+ com.networknt
+ json-schema-validator
+
+
+ io.serverlessworkflow
+ serverlessworkflow-api
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-core
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-json
+
+
+
\ No newline at end of file
diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/schema/JsonSchemaValidator.java b/impl/validation/src/main/java/io/serverlessworkflow/impl/jackson/schema/JsonSchemaValidator.java
similarity index 100%
rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/schema/JsonSchemaValidator.java
rename to impl/validation/src/main/java/io/serverlessworkflow/impl/jackson/schema/JsonSchemaValidator.java
diff --git a/impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/schema/JsonSchemaValidatorFactory.java b/impl/validation/src/main/java/io/serverlessworkflow/impl/jackson/schema/JsonSchemaValidatorFactory.java
similarity index 100%
rename from impl/jackson/src/main/java/io/serverlessworkflow/impl/jackson/schema/JsonSchemaValidatorFactory.java
rename to impl/validation/src/main/java/io/serverlessworkflow/impl/jackson/schema/JsonSchemaValidatorFactory.java
diff --git a/impl/jackson/src/main/resources/META-INF/services/io.serverlessworkflow.impl.schema.SchemaValidatorFactory b/impl/validation/src/main/resources/META-INF/services/io.serverlessworkflow.impl.schema.SchemaValidatorFactory
similarity index 100%
rename from impl/jackson/src/main/resources/META-INF/services/io.serverlessworkflow.impl.schema.SchemaValidatorFactory
rename to impl/validation/src/main/resources/META-INF/services/io.serverlessworkflow.impl.schema.SchemaValidatorFactory