Open
Conversation
637b320 to
a702482
Compare
Signed-off-by: KARASZI István <ikaraszi@gmail.com>
Signed-off-by: KARASZI István <ikaraszi@gmail.com>
Signed-off-by: KARASZI István <ikaraszi@gmail.com>
Signed-off-by: KARASZI István <ikaraszi@gmail.com>
Signed-off-by: KARASZI István <ikaraszi@gmail.com>
Signed-off-by: KARASZI István <ikaraszi@gmail.com>
Signed-off-by: KARASZI István <ikaraszi@gmail.com>
Signed-off-by: KARASZI István <ikaraszi@gmail.com>
Signed-off-by: KARASZI István <ikaraszi@gmail.com>
Signed-off-by: KARASZI István <ikaraszi@gmail.com>
Signed-off-by: KARASZI István <ikaraszi@gmail.com>
a702482 to
04cb1ef
Compare
| (defn assoc-default-data-converter [{:keys [data-converter] :as params}] | ||
| (cond-> params | ||
| (not data-converter) | ||
| (assoc :data-converter (default-data-converter/create)))) |
There was a problem hiding this comment.
Why not a singleton instance via a plain def? Why recreate it every call?
Contributor
Author
There was a problem hiding this comment.
I was thinking about it, but I followed the Java SDK logic there. I can definitely create that, I can also create a namespace called temporal.converter and create it there.
Contributor
Author
There was a problem hiding this comment.
Although this shouldn't matter much since this function won't be called often.
thenonameguy
approved these changes
Jan 27, 2026
Signed-off-by: KARASZI István <ikaraszi@gmail.com>
thenonameguy
approved these changes
Jan 27, 2026
Signed-off-by: KARASZI István <ikaraszi@gmail.com>
janosmeszaros
approved these changes
Jan 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Overview
This PR configures a custom data converter by implementing the Nippy encoder as a DataConverter rather than hard-wiring it in the codebase.
Previously, the Clojure SDK could only read and write Nippy-encoded payloads, making cross-language interoperability impossible.
By adopting Temporal's standard
DataConvertermechanism with support for both Nippy and JSON formats, workflows and activities can now be invoked across different languages, including calling Clojure implementations from other languages.A follow-up PR will make this interoperability more convenient by adding a mechanism to select an encoder instead of using Nippy per default.
Key Changes
New Custom Data Converter Architecture
temporal.converter.*:temporal.converter.payload- Core payload construction utilitiestemporal.converter.byte-string-ByteStringconversion helperstemporal.converter.metadata-Payloadmetadata handlingtemporal.converter.optional-Optionalconversation helperstemporal.converter.nippy- Nippy-based binary serialization (binary/plain)temporal.converter.json- JSON serialization using jsonista (json/plain)temporal.converter.default- Default converter combining Null, Nippy, and JSON convertersClient Integration
temporal.client.optionsto automatically use the custom data converter when none is explicitly provided:data-converteroption remains available for users who want to provide their own implementationCode Improvements
Test Coverage
Backward compatibility
This change is fully backward compatible. The previous implementation used Nippy for serialization, handling it directly in
temporal.internal.utils(e.g.,->objarray,->args,complete-invoke) andtemporal.client.core.The new implementation consolidates this serialization logic into a dedicated
DataConverterarchitecture (temporal.converter.nippywith encoding typebinary/plain), while maintaining the same wire format.Existing workflows and activities with in-flight data will continue to work without any migration.
This refactoring aligns with Temporal's official SDKs (Java, Python), which all use the data converter mechanism for serialization.
Fixes #28
Fixes #43