temporalio / temporalio/features

Normalize Header Data Conversion across languages

Open
#850 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
Go
Stars
32
Forks
28
Avg merge
1d 9h
Merged PRs (30d)
7

Description

Is your feature request related to a problem? Please describe.

As it stands, the way we choose to convert and/or encode headers varies substantially by language. See this AI-generated table:

SDK Converter applied to headers? Codec applied to headers?
Go No — headers are written as raw Payload Partial — only via opt-in client-side gRPC interceptor; not on worker activation path
Java NoContextPropagator returns Map<String, Payload> No — codec does not cover headers
Python No — interceptors set Mapping[str, Payload] Optional via HeaderCodecBehavior; default is NO_CODEC
TypeScript No — headers are Record<string, Payload> No — headers are skipped symmetrically
.NET No — interceptor inputs use IDictionary<string, Payload> Yes — broad codec coverage
Ruby Yes — headers pass through converter Yes — combined data converter includes codec
PHP Yes — values pass through converter No SDK codec class; codec handled externally
Describe the solution you'd like

All SDKs should be capable of the same, normalized behavior. My inclination would be that this is to convert and encode all user-set headers (there may be some SDK set headers that would use the standard data converter).

Obviously, for backwards compatibility reasons, this behavior would need to be opt-in where it varies from the existing implementation. We might consider other options here, like continuing to be able to successfully decode existing headers while writing new headers under the new scheme, using SDK flags.

Additional context

This came up as part of the encryption verification project

Per-SDK Tickets
  • Go -
  • Java -
  • TypeScript -
  • Python -
  • .NET -
  • Ruby -
  • Rust -
  • PHP -
  • Temporal CLI -

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

No files, tests, or entry points are named. Start with the SDK comparison table and the encryption verification context, then define separate work for the listed per-SDK tickets. Done means the SDKs have a documented, opt-in normalized header conversion and encoding behavior with backward-compatible decoding.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp, go, java, php, python, ruby, rust, typescript
Domain
backend-api-design, testing
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.