{"id":"src_OrcpLOaMYf239K1jp7_e8","slug":"upstash-qstash-released","name":"QStash Released","type":"feed","url":"https://github.com/orgs/upstash/discussions/categories/q-released","orgId":"org_pvZm5gKSGRnUZcqcDCro2","org":{"slug":"upstash","name":"Upstash"},"isPrimary":false,"metadata":"{\"feedUrl\":\"https://github.com/orgs/upstash/discussions/categories/q-released.atom\",\"feedType\":\"unknown\",\"feedDiscoveredAt\":\"2026-04-19T21:09:55.534Z\",\"noFeedFound\":false,\"feedEtag\":\"W/\\\"1b43fd3002e7a2dbf67fb59a44acf0ec\\\"\",\"feedContentLength\":\"18864\"}","releaseCount":9,"releasesLast30Days":2,"avgReleasesPerWeek":0.5,"latestVersion":null,"latestDate":"2026-04-01T09:07:38.000Z","changelogUrl":null,"hasChangelogFile":false,"lastFetchedAt":"2026-04-19T21:10:52.995Z","trackingSince":"2025-11-05T19:34:56.000Z","releases":[{"id":"rel_upOstDK1eBoJX6biENwVG","version":null,"title":"Cancel Messages Related To A Flow-Control","summary":"Problem:\n\nCancelling a message the Flow-control does not take affect immediately. Especially with the `rate` option. In the current implementation, wi...","content":"Problem:\n\nCancelling a message the Flow-control does not take affect immediately. Especially with the `rate` option. In the current implementation, with the `rate`, The messages are scheduled to fire in the future. Because of this implementation, the cancel is recorded `CANCEL_REQUESTED` for all these messages and only `logged` as `CANCELLED` when the schedule time hits.\n\nAnother big problem is that, when you want to fire a new message with the flow control, all the slots in the future is already taken by -soon to be cancelled- messages. This makes cancel effectively unusable.\n\nSolution:\n\nThe flow control is rewritten to take the `CANCEL` into account sooner. And new messages does not need to wait for old slots to be opened.\n\nDetails:\n\nWith the new implementation, the messages are not scheduled to the future but put to a ordered `wait list` to be fired when the `flow control` limit allows. When a flow control is cancelled. Again all the messages in progress are marked as `CANCEL REQUESTED`.\n\nThe new messages are immediately put to `wait list`. When a flow control limit is opened and `waitlist` needs to be consumed, the `CANCEL REQUESTED` messages are all `CANCELLED` immediately. This allows, new messages in the wait list are fired  immediately as well.","publishedAt":"2026-04-01T09:07:38.000Z","url":"https://github.com/orgs/upstash/discussions/177","media":[]},{"id":"rel_JPqPNxJ2tVOR92jHWA7ha","version":null,"title":"Sensitive Data Redaction On Console/API","summary":"QStash messages 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...","content":"QStash messages 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 QStash in multi-tenant setups where customer data may be included in messages.\n\n## API\n\nAllow specifying fields to redact when publishing a message.\n\n\" });\n\nconst res = await client.publishJSON({\n  url: \"https://my-api...\",\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/qstash\";\n\nconst client = new Client({ token: \"\" });\n\nconst res = await client.publishJSON({\n  url: \"https://my-api...\",\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 message 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/qstash/howto/redact-fields](https://upstash.com/docs/qstash/howto/redact-fields)","publishedAt":"2026-03-31T11:38:52.000Z","url":"https://github.com/orgs/upstash/discussions/188","media":[]},{"id":"rel_OuQwWOPtoy3nFLz5w__qF","version":null,"title":"Flow Control API to change the rate/parallelism manually","summary":"Right now, the flow control is only configured with the publish. This makes it hard for our users to change the config when needed from outside.\n\nWe w...","content":"Right now, the flow control is only configured with the publish. This makes it hard for our users to change the config when needed from outside.\n\nWe will give ability to pin a rate/parallelism to a flow-control. This way the pinned values will be used instead of the values passed via the messages.\n\nWe will also have an API to unpin the messages.","publishedAt":"2026-03-17T13:10:50.000Z","url":"https://github.com/orgs/upstash/discussions/187","media":[]},{"id":"rel_EIdJN1zw2TByVc_jgW_wv","version":null,"title":"Flow Control Pause and Resume","summary":"Add ability to pause and resume flow control keys.","content":"Add ability to pause and resume flow control keys.","publishedAt":"2026-03-17T12:52:36.000Z","url":"https://github.com/orgs/upstash/discussions/157","media":[]},{"id":"rel_7jWCqNTjdE8N5l_z670Md","version":null,"title":"US and EU Region QStash","summary":"This is to give much-lower latencies when sending a message via accepting the request from the closest region.","content":"This is to give much-lower latencies when sending a message via accepting the request from the closest region.","publishedAt":"2026-03-06T08:56:08.000Z","url":"https://github.com/orgs/upstash/discussions/167","media":[]},{"id":"rel_gSK498RjTRoGiGDzvVl1e","version":null,"title":"Flow-Control And Global Parallelism Metrics","summary":"Currently it is hard for our users to understand what is going on with Flow-Control/Global Parallellism.\n\nDid it hit the limit?\n\nHow many messages are...","content":"Currently it is hard for our users to understand what is going on with Flow-Control/Global Parallellism.\n\nDid it hit the limit?\n\nHow many messages are waiting because of the limit?\n\nWhat is the affective Flow-Control Rate/Parallelism/Period ?\n\nWe are revising the Flow-Control implementation. The plan is to improve the get flow-control endpoint as a start to help users more\n\nGET [/v2/flow-control ](https://upstash.com/docs/qstash/api-refence/flow-control/get-flow-control-key)\n\nCurrent version:\n\n\",\n  \"waitlistSize\": 123,\n}\">\n```\n{\n  \"flowControlKey\": \"\",\n  \"waitlistSize\": 123,\n}\n\n```\n\nImproved version:\n\n\", //  \"$\" for the messages without flow control. \n  \"waitlistSize\": 123,\n  \"parallelism\": 10, // If not exists, it means not limited by parallelism\n  \"parallelismCount\": 5, // 5 tasks are running in parallel at the moment\n  \"rateMax\": 10,       // If not exists, it means not limited by rate\n  \"rateCount\" : 4,  //  4 tasks are started within the last period\n  \"ratePeriod\": \"1d\", \n  \"ratePeriodStart\": 1708000000 // Unix timestamp when the current rate period started\n}\">\n```\n{\n  \"flowControlKey\": \"\", //  \"$\" for the messages without flow control. \n  \"waitlistSize\": 123,\n  \"parallelism\": 10, // If not exists, it means not limited by parallelism\n  \"parallelismCount\": 5, // 5 tasks are running in parallel at the moment\n  \"rateMax\": 10,       // If not exists, it means not limited by rate\n  \"rateCount\" : 4,  //  4 tasks are started within the last period\n  \"ratePeriod\": \"1d\", \n  \"ratePeriodStart\": 1708000000 // Unix timestamp when the current rate period started\n}\n\n```\n\nTo access new fields via SDK -> [https://upstash.com/docs/qstash/features/flowcontrol#get-a-single-flow-control-key](https://upstash.com/docs/qstash/features/flowcontrol#get-a-single-flow-control-key)\n\nThere is a special $ wait list on this list that reports the waitlist size for the messages that doesn't have any related flow control key and just waiting for global parallelism.\n\nTo access global parallelism info via SDK -> [https://upstash.com/docs/qstash/features/flowcontrol#get-global-parallelism](https://upstash.com/docs/qstash/features/flowcontrol#get-global-parallelism)\n\nYou can access all these via rest api as well here: [https://upstash.com/docs/qstash/api-refence/flow-control/list-flow-control-keys](https://upstash.com/docs/qstash/api-refence/flow-control/list-flow-control-keys)\n\n`Flow Control` tab of QStash Console also shows all these data together with the historic global parallelism graph. And there is more detailed version of global parallelism graph on the Usage tab of the QStash Console.","publishedAt":"2026-03-05T13:03:08.000Z","url":"https://github.com/orgs/upstash/discussions/184","media":[]},{"id":"rel_YIPf64EDXwQRiWLNjUIuc","version":null,"title":"Request Builder History","summary":"Remember last X publishes from the console so that it can be run again easily.\n\nThis is aimed for development purposes.","content":"Remember last X publishes from the console so that it can be run again easily.\n\nThis is aimed for development purposes.","publishedAt":"2025-11-11T10:12:42.000Z","url":"https://github.com/orgs/upstash/discussions/171","media":[]},{"id":"rel_TmifzlTCqio7FvqH1Yxnu","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-06T11:36:19.000Z","url":"https://github.com/orgs/upstash/discussions/170","media":[]},{"id":"rel_PYw73-BUhDRqbBbV1mqDa","version":null,"title":"Local Development Environment UI","summary":"QStash requires a publicly available API to send messages to. During development when applications are not yet deployed, developers typically need to ...","content":"QStash 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/qstash/howto/local-development](https://upstash.com/docs/qstash/howto/local-development)","publishedAt":"2025-11-05T19:34:56.000Z","url":"https://github.com/orgs/upstash/discussions/173","media":[]}],"pagination":{"page":1,"pageSize":20,"totalPages":1,"totalItems":9},"summaries":{"rolling":{"windowDays":90,"summary":"QStash overhauled flow control to become a runtime-managed feature rather than a publish-time configuration. The rewrite addressed a core usability issue where cancelling rate-limited messages left slots blocked, making the feature practically unusable—now messages sit in an ordered wait list instead of being pre-scheduled to future slots, so cancellations free capacity immediately for new publishes. Alongside this, the team added pause/resume operations and an API to pin rate and parallelism values outside the publish path, plus expanded the flow control metrics endpoint to surface waitlist depth, active task counts, and effective limits so users can diagnose why messages queue. Two other threads emerged: sensitive data protection via field-level redaction in publish calls (body and header whitelisting), and regional expansion with US and EU endpoints to reduce latency.","releaseCount":6,"generatedAt":"2026-04-19T21:10:58.591Z"},"monthly":[{"year":2026,"month":3,"summary":"QStash expanded flow control capabilities and added data protection features. The team shipped pause/resume controls for flow-control keys, a new API to manually pin and adjust rate and parallelism settings without republishing messages, and enhanced the get flow-control endpoint with detailed metrics showing parallelism count, rate usage, and waitlist size to help users monitor limits. Sensitive data redaction also shipped, letting developers mark message bodies and specific headers to be redacted from the dashboard and API responses. Regional expansion to US and EU endpoints reduced latency for message ingestion.","releaseCount":5,"generatedAt":"2026-04-19T21:11:02.008Z"}]}}