{"id":"src_U882orGcVJkZyHQhn_odo","slug":"upstash-workflow-released","name":"Workflow Released","type":"feed","url":"https://github.com/orgs/upstash/discussions/categories/w-released","orgId":"org_pvZm5gKSGRnUZcqcDCro2","org":{"slug":"upstash","name":"Upstash"},"isPrimary":false,"metadata":"{\"feedUrl\":\"https://github.com/orgs/upstash/discussions/categories/w-released.atom\",\"feedType\":\"unknown\",\"feedDiscoveredAt\":\"2026-04-19T21:10:19.834Z\",\"noFeedFound\":false,\"feedEtag\":\"W/\\\"4fc338137347bcff3e400d3aa8cfb89b\\\"\",\"feedContentLength\":\"23852\"}","releaseCount":7,"releasesLast30Days":1,"avgReleasesPerWeek":0.2,"latestVersion":null,"latestDate":"2026-03-31T11:38:44.000Z","changelogUrl":null,"hasChangelogFile":false,"lastFetchedAt":"2026-04-19T21:11:08.792Z","trackingSince":"2025-11-05T19:34:57.000Z","releases":[{"id":"rel_FM-YNustYPkirpsgt9JWu","version":null,"title":"Sensitive Data Redaction On Console/API","summary":"Workflow logs may contain sensitive data in the body or headers. Users need a way to redact these fields so they are not visible in the dashboard or A...","content":"Workflow logs may contain sensitive data in the body or headers. Users need a way to redact these fields so they are not visible in the dashboard or API responses, preventing accidental data leaks. This also enables safer use of Workflow in multi-tenant setups where customer data may be included in logs.\n\n## API\n\nAllow specifying fields to redact when triggering a workflow.\n\n\" });\n\nconst { workflowRunId } = await client.trigger({\n  url: \"https://my-app.com/api/workflow\",\n  body: { hello: \"world\" },\n  redact: {\n    body: true,\n    header: [\"Authorization\"] // or `header: true` to redact all headers\n  },\n});\">import { Client } from \"@upstash/workflow\";\n\nconst client = new Client({ token: \"\" });\n\nconst { workflowRunId } = await client.trigger({\n  url: \"https://my-app.com/api/workflow\",\n  body: { hello: \"world\" },\n  redact: {\n    body: true,\n    header: [\"Authorization\"] // or `header: true` to redact all headers\n  },\n});\n\nIn this example, the log body and the \"Authorization\" header are redacted and will not appear in the UI or API responses. Instead, the UI will display `REDACTED:` so users can verify the value without revealing the original data.\n\nDocs: [https://upstash.com/docs/workflow/howto/redact-fields](https://upstash.com/docs/workflow/howto/redact-fields)","publishedAt":"2026-03-31T11:38:44.000Z","url":"https://github.com/orgs/upstash/discussions/191","media":[]},{"id":"rel_tBtWq1UYekLS5ZfHwSZ0o","version":"1.0.0","title":"Workflow SDK Major Version Upgrade to 1.0.0","summary":"This major version of the TypeScript SDK is done with breaking changes to improve the developer experience, reduce bundle size, and simplify configura...","content":"This major version of the TypeScript SDK is done with breaking changes to improve the developer experience, reduce bundle size, and simplify configuration. We have prepared a migration guide for existing users below:\n\n[https://upstash.com/docs/workflow/howto/migrations](https://upstash.com/docs/workflow/howto/migrations)","publishedAt":"2026-01-20T07:01:32.000Z","url":"https://github.com/orgs/upstash/discussions/185","media":[]},{"id":"rel_P9q6e5KqLRSGNryHPy0NG","version":null,"title":"Wait for Webhook","summary":"We currently provide a wait–notify mechanism that allows a workflow run to pause on an event ID and resume when a notify call is received. This works ...","content":"We currently provide a wait–notify mechanism that allows a workflow run to pause on an event ID and resume when a notify call is received. This works well when developers control both sides of the communication and can send the notification directly.\n\nHowever, when a workflow needs to wait for a notification from a third-party provider, developers must register a waiter for a specific event ID, expose a custom endpoint to receive the third-party webhook, and then manually call our notify API with the event ID to resume the workflow. This process adds overhead and can lead to race conditions.\n\nTo improve the developer experience for webhook-based integrations and eliminate race conditions, we're introducing a new **native webhook wait API**. This API allows a workflow run to pause execution until an auto-generated webhook URL receives a notification. The generated URL can be passed directly to third-party providers, which will automatically notify the corresponding workflow run.\n\nEach webhook can receive multiple notifications and be awaited multiple times.\n\nBelow is an early draft of the API (subject to change before release):\n\n {\n\n    // 👇 Create a webhook to recieve events\n    const webhook = await context.createWebhook(\"fal-generation-webhook\");\n\n    await context.run(\"start-generation\", async () => {\n      const { request_id } = await fal.queue.submit(\"fal-ai/flux/dev\", {\n        input: {\n          prompt: \"a cat\",\n          seed: 6252023,\n          image_size: \"landscape_4_3\",\n          num_images: 4,\n        },\n        // 👇 Pass webhook.url to third-party service\n        webhookUrl: webhook.url,\n      });\n      return request_id\n    });\n\n    // 👇 Wait for webhook to be called\n    const result = await context.waitForWebhook(\"wait-until-generation-completes\", webhook, \"1d\");\n\n    await context.run(\"send-generation-to-user\", async () => {\n      // 👇 result.timeout OR result.request\n      const req = result.request!;\n\n      // 👇 Use the native Request object of the webhook call\n      const data = await req.json();\n      console.log(\"Generation completed:\", data.status);\n    });\n  }\n);\n\">import { serve } from \"@upstash/workflow/nextjs\";\nimport { fal } from \"@fal-ai/client\";\n\nexport const { POST } = serve(\n  async (context) => {\n\n    // 👇 Create a webhook to recieve events\n    const webhook = await context.createWebhook(\"fal-generation-webhook\");\n\n    await context.run(\"start-generation\", async () => {\n      const { request_id } = await fal.queue.submit(\"fal-ai/flux/dev\", {\n        input: {\n          prompt: \"a cat\",\n          seed: 6252023,\n          image_size: \"landscape_4_3\",\n          num_images: 4,\n        },\n        // 👇 Pass webhook.url to third-party service\n        webhookUrl: webhook.url,\n      });\n      return request_id\n    });\n\n    // 👇 Wait for webhook to be called\n    const result = await context.waitForWebhook(\"wait-until-generation-completes\", webhook, \"1d\");\n\n    await context.run(\"send-generation-to-user\", async () => {\n      // 👇 result.timeout OR result.request\n      const req = result.request!;\n\n      // 👇 Use the native Request object of the webhook call\n      const data = await req.json();\n      console.log(\"Generation completed:\", data.status);\n    });\n  }\n);","publishedAt":"2025-12-09T12:35:05.000Z","url":"https://github.com/orgs/upstash/discussions/151","media":[]},{"id":"rel_KOfcLGeduiJs2RfVEEtpO","version":null,"title":"Request Builder History","summary":"Remember last X triggers from the console so that it can be run again easily.\n\nThis is aimed for development purposes.","content":"Remember last X triggers from the console so that it can be run again easily.\n\nThis is aimed for development purposes.","publishedAt":"2025-11-11T10:12:46.000Z","url":"https://github.com/orgs/upstash/discussions/172","media":[]},{"id":"rel_2hZ9Je9eIY2cYN7WfhmF9","version":null,"title":"Flow Control UI","summary":"Add ability to list the flow-controls on the console together with their waitListSizes.\n\nMake it searchable.","content":"Add ability to list the flow-controls on the console together with their waitListSizes.\n\nMake it searchable.","publishedAt":"2025-11-06T12:12:40.000Z","url":"https://github.com/orgs/upstash/discussions/169","media":[]},{"id":"rel_HryiY7bPJRJvS27yAgmNQ","version":null,"title":"Workflow Restart/Resume","summary":"Add ability to restart or resume a workflow from the DLQ.\n\n- Restart  : Ignore already completed steps and start the workflow from the beginning with ...","content":"Add ability to restart or resume a workflow from the DLQ.\n\n- Restart  : Ignore already completed steps and start the workflow from the beginning with the original body and headers.\n\n- Resume: Keep the completed steps and try to run the workflow starting from that point on.\n\nSee [https://upstash.com/docs/workflow/features/dlq#recovery-actions](https://upstash.com/docs/workflow/features/dlq#recovery-actions)","publishedAt":"2025-11-05T19:43:58.000Z","url":"https://github.com/orgs/upstash/discussions/175","media":[]},{"id":"rel_vHYaAKhAUl1lb8UTD32t0","version":null,"title":"Local Development Environment UI","summary":"Workflow requires a publicly available API to send messages to. During development when applications are not yet deployed, developers typically need t...","content":"Workflow requires a publicly available API to send messages to. During development when applications are not yet deployed, developers typically need to expose their local API by creating a public tunnel. While local tunneling works seamlessly, it requires code changes between development and production environments and increase friction for developers. To simplify the development process, Upstash provides QStash CLI, which allows you to run a development server locally for testing and development.\n\nWith this work, the same UI that is given on the console.upstash.com can be used with local server(QStash CLI)\n\nSee [https://upstash.com/docs/workflow/howto/local-development/development-server](https://upstash.com/docs/workflow/howto/local-development/development-server)","publishedAt":"2025-11-05T19:34:57.000Z","url":"https://github.com/orgs/upstash/discussions/174","media":[]}],"pagination":{"page":1,"pageSize":20,"totalPages":1,"totalItems":7},"summaries":{"rolling":{"windowDays":90,"summary":"Workflow shipped v1.0.0 with breaking changes focused on improving developer experience and reducing bundle size, then added sensitive data redaction across logs and API responses. The redaction feature lets developers specify which request bodies and headers to mask when triggering workflows, addressing data safety in multi-tenant setups where customer information may leak into logs.","releaseCount":2,"generatedAt":"2026-04-19T21:11:11.627Z"},"monthly":[{"year":2026,"month":3,"summary":"Workflow added sensitive data redaction to console and API logs, letting developers mark request bodies and specific headers as redacted when triggering workflows. This prevents accidental exposure of secrets and customer data in dashboards and API responses, making multi-tenant setups safer.","releaseCount":1,"generatedAt":"2026-04-19T21:11:13.535Z"}]}}