Conversation
One channel per namespace mirrors the client's connection, transient errors retry like the client's, and record bodies go through the data converter.
A workflow appends with a command its task commits and reads the ranges the server delivers on its tasks, so a native stream is replay-safe.
The Workflow Streams surface, backed by a server-side stream instead of the workflow's History.
NativeStreams puts a server-side stream behind the stream interface, one owned stream per topic, and joins the conformance suite under STREAMS_LIVE=native.
This was referenced Oct 3, 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.
This PR adds
NativeStreams, which puts a server-side stream behind the stream interface, along with what it needs in the workflow runtime and the stream client.What changed?
contrib.server_streamsgives the shipped Workflow Streams surface over a server-side stream.temporalio.streams.providers.native.NativeStreamsserves one owned stream per topic for workflows, activities and standalone streams. It joins the conformance suite whenSTREAMS_LIVE=native.needs_stream_channel_servermarker is for cases where a native stream notifies its channel. The native Nexus consumer case gets it too.Part of AI-198 (epic AI-37).
Why?
Memory and Workflow Streams cover small streams. A server-side stream is the store meant for large ones, with retention and trimming handled by the server. Putting it behind the same interface means workflow, activity and client code don't change when an app moves onto it.
How did you test it?
Link to a test plan if any -
poe lintis clean. The unit cases pass on the dev server the fixtures start. Against a local server built from the stream server PRs, these pass withSTREAMS_LIVE=native:contrib.server_streamsOne case failed once in the first full run and passed in three reruns, and I didn't catch which. The skips are capability skips and the native Nexus consumer case, which stays gated until the union.