January 2026 - Major Release
January 2026 - Major Release
In January 2026, we released a major version of the TypeScript SDK with several breaking changes to improve the developer experience, reduce bundle size, and simplify configuration.See Agents documentation for more details.Removed
These parameters are no longer needed in Configuration passed to Configuration Moved from
The This change makes it easier to configure different behavior for different workflow runs of the same endpoint.Removed
The The same applies to You can also create custom middlewares for more control. See Middlewares documentation for details.Removed
The See Middlewares documentation for more details.
Agents API → Separate Package
The Agents API has been moved to a separate package to remove the AI SDK dependency from the core workflow package.Migration Steps
- Install the new package:
- Update your imports:
Removed keepTriggerConfig and useFailureFunction
These parameters are no longer needed in client.trigger() as both are now true by default.Migration Steps
Simply remove these parameters from your trigger calls:trigger() now automatically applies to the entire workflow.Configuration Moved from serve to trigger
The retries, flowControl, retryDelay, and failureUrl options have been removed from serve() and should now be passed in client.trigger().Migration Steps
Move configuration from serve options to trigger:In the Python SDK, these options remain in the
serve decorator as they were before.Removed stringifyBody from context.call and context.invoke
The stringifyBody parameter has been removed. The body parameter now expects a string.Migration Steps
Update your call and invoke methods to useJSON.stringify():context.invoke():Logger → Middleware System
The logging system has been replaced with a more flexible middleware system.Migration Steps
Replace the old logger with the new middleware:Removed onStepFinish
The onStepFinish callback has been removed. Use middlewares instead.Migration Steps
ReplaceonStepFinish with a custom middleware:October 2024 - Migrate from @upstash/qstash
October 2024 - Migrate from @upstash/qstash
In October 2024, we released a new SDK, Install
First, we will need to install the new package with:If you were using We have updated what our We kept the Updating
If you were using In the old version, we only returned the response body. Also, if the request
to the url failed, the workflow run would fail.In the new version, we update how the parameters are passed to the
@upstash/workflow, for Upstash Workflow, separating its development from the QStash SDK. Although Upstash Workflow is built on QStash, our goal is to improve the developer experience and support with a dedicated SDK. Development for Upstash Workflow will occur in @upstash/workflow, and Workflow-related imports will be removed from @upstash/qstash in future releases.If you started using Upstash Workflow with @upstash/qstash, you will need to migrate to @upstash/workflow. We have made some backward-incompatible changes, but we aim to make the transition as smooth as possible.
In this guide, we will explain the changes you may need to make for migration.Install @upstash/workflow
First, we will need to install the new package with:- npm
- pnpm
- bun
@upstash/qstash only for workflow, you can uninstall it from your project.Serve methods
You will need to change the imports from@upstash/qstash to @upstash/workflow:serve methods return. We made this change to make it
easier to extend the API in the future.For instance, Next.js method changed like this:serve method of Hono the same. The rest are updated in a similar way.
See the quickstarts for the new way serve
should be used.Additionally, @upstash/workflow/nuxt import is removed. You should use @upstash/workflow/h3
instead. This change was made because nuxt uses h3 under the hood and our serve method
for nuxt can work with any project using h3.Updating context.call
If you were using context.call method in your workflow, you will need to change
how it’s called and what it returns. Here is what the change looks like:context.call.
Additionally, we change the fail behavior: if the request fails, it doesn’t make the
workflow fail. Instead, the status and the body is simply returned and workflow
continues as usual.If you have ongoing workflow runs which call context.call during your transition,
status and headers fields may not be available in these old runs. After your
transition, all workflow runs will have all three fields.Renaming Errors
The errors in Workflow were renamed fromQStashWorkflowError and QStashWorkflowAbort to WorkflowError and WorkflowAbort.