{"id":"src_zQCuqHy557P2w4f_kVZQ3","slug":"inngest-python-sdk","name":"Python SDK","type":"github","url":"https://github.com/inngest/inngest-py","orgId":"org_N1JtEGFuJ9qAYySlu1jcL","org":{"slug":"inngest","name":"Inngest"},"isPrimary":false,"metadata":"{\"evaluatedMethod\":\"github\",\"evaluatedAt\":\"2026-03-30T23:45:30.748Z\",\"changelogDetectedAt\":\"2026-04-18T13:03:27.077Z\"}","releaseCount":61,"releasesLast30Days":0,"avgReleasesPerWeek":0.4,"latestVersion":"inngest@0.5.18","latestDate":"2026-03-11T19:18:21.000Z","changelogUrl":null,"hasChangelogFile":false,"lastFetchedAt":"2026-04-19T03:01:35.924Z","trackingSince":"2023-11-20T14:22:35.000Z","releases":[{"id":"rel_eka-2FqJl1H1BrF2LGbKd","version":"inngest@0.5.18","title":"inngest@0.5.18","summary":"# Features\r\n- Add `app_version` field (relevant for Connect).\r\n\r\n# Fixes\r\n- Fix duration parser only considers largest time unit.\r\n\r\n# Full Changelog\r...","content":"# Features\r\n- Add `app_version` field (relevant for Connect).\r\n\r\n# Fixes\r\n- Fix duration parser only considers largest time unit.\r\n\r\n# Full Changelog\r\nhttps://github.com/inngest/inngest-py/compare/inngest@0.5.17...inngest@0.5.18","publishedAt":"2026-03-11T19:18:21.000Z","url":"https://github.com/inngest/inngest-py/releases/tag/inngest%400.5.18","media":[]},{"id":"rel_yXhB8Fp_Mjc97fDQrg0yv","version":"inngest@0.5.17","title":"inngest@0.5.17","summary":"# Fixes\r\n- Fix thread-blocking user code causing Inngest server to think Connect worker died. Solved by putting Connect internals into a dedicated thr...","content":"# Fixes\r\n- Fix thread-blocking user code causing Inngest server to think Connect worker died. Solved by putting Connect internals into a dedicated thread.\r\n\r\n# Full changelog\r\nhttps://github.com/inngest/inngest-py/compare/inngest@0.5.16...inngest@0.5.17","publishedAt":"2026-03-03T16:59:51.000Z","url":"https://github.com/inngest/inngest-py/releases/tag/inngest%400.5.17","media":[]},{"id":"rel_MHYyw6FJk_M3RvQ8-jYsw","version":"inngest@0.5.16","title":"inngest@0.5.16","summary":"# Fixes\r\n- Fix not reraising `before_send_events` error\r\n\r\n# Full changelog\r\nhttps://github.com/inngest/inngest-py/compare/inngest@0.5.15...inngest@0....","content":"# Fixes\r\n- Fix not reraising `before_send_events` error\r\n\r\n# Full changelog\r\nhttps://github.com/inngest/inngest-py/compare/inngest@0.5.15...inngest@0.5.16","publishedAt":"2026-03-03T16:22:50.000Z","url":"https://github.com/inngest/inngest-py/releases/tag/inngest%400.5.16","media":[]},{"id":"rel_l15xD0Yl1kzfxshwTpBek","version":"inngest@0.5.15","title":"inngest@0.5.15","summary":"# Fixes\r\n- Fix parallel steps not working.\r\n- Fix large payload sizes (>1 MB) silently ignored (Connect only).\r\n\r\n# Full changelog\r\n\r\nhttps://github.c...","content":"# Fixes\r\n- Fix parallel steps not working.\r\n- Fix large payload sizes (>1 MB) silently ignored (Connect only).\r\n\r\n# Full changelog\r\n\r\nhttps://github.com/inngest/inngest-py/compare/inngest@0.5.14...inngest@0.5.15","publishedAt":"2026-01-26T18:06:01.000Z","url":"https://github.com/inngest/inngest-py/releases/tag/inngest%400.5.15","media":[]},{"id":"rel_xJ_0bkijROVozECm94PFA","version":"inngest@0.5.14","title":"inngest@0.5.14","summary":"# Features\r\n- Add debounce timeout config\r\n\r\n# Fixes\r\n\r\n- Fix Connect worker shutdown not informing Inngest Server\r\n\r\n# Improvements\r\n\r\n- Improve erro...","content":"# Features\r\n- Add debounce timeout config\r\n\r\n# Fixes\r\n\r\n- Fix Connect worker shutdown not informing Inngest Server\r\n\r\n# Improvements\r\n\r\n- Improve error messages when Connect has an invalid WebSocket URL\r\n- Remove `\"authentication_succeeded\": false` from GET response","publishedAt":"2026-01-20T22:54:15.000Z","url":"https://github.com/inngest/inngest-py/releases/tag/inngest%400.5.14","media":[]},{"id":"rel_AwlVnyP0fBwNotOGpOIKk","version":"inngest@0.5.13","title":"inngest@0.5.13","summary":"## Fixes\r\n- Fix sending message to closed WebSocket connection not forcing reconnect. (Connect only)\r\n- Fix graceful close not waiting for long-runnin...","content":"## Fixes\r\n- Fix sending message to closed WebSocket connection not forcing reconnect. (Connect only)\r\n- Fix graceful close not waiting for long-running steps. (Connect only)\r\n\r\n## What's Changed\r\n* Fix sending message to closed WebSocket not forcing reconnect by @amh4r in https://github.com/inngest/inngest-py/pull/309\r\n* Fix some tasks closing before pending requests are done by @amh4r in https://github.com/inngest/inngest-py/pull/311\r\n* Bump version to 0.5.13 by @amh4r in https://github.com/inngest/inngest-py/pull/312\r\n\r\n\r\n**Full Changelog**: https://github.com/inngest/inngest-py/compare/inngest@0.5.12...inngest@0.5.13","publishedAt":"2025-11-25T02:59:46.000Z","url":"https://github.com/inngest/inngest-py/releases/tag/inngest%400.5.13","media":[]},{"id":"rel_wZujoGICnfYtMTN5KE_WR","version":"inngest@0.5.12","title":"inngest@0.5.12","summary":"## Features\r\n* Adding a `max_worker_concurrency` field for Connect to allow maximum number of simultaneous requests for a worker.\r\n\r\n## What's Changed...","content":"## Features\r\n* Adding a `max_worker_concurrency` field for Connect to allow maximum number of simultaneous requests for a worker.\r\n\r\n## What's Changed\r\n* Add userland ID & index to Ops by @rhino1998 in https://github.com/inngest/inngest-py/pull/303\r\n* [SYS-370] Add Worker Concurrency - Python Client Support by @mar-inngest in https://github.com/inngest/inngest-py/pull/306\r\n* Add test for constraint-dependencies by @amh4r in https://github.com/inngest/inngest-py/pull/307\r\n\r\n## New Contributors\r\n* @rhino1998 made their first contribution in https://github.com/inngest/inngest-py/pull/303\r\n\r\n**Full Changelog**: https://github.com/inngest/inngest-py/compare/inngest@0.5.11...inngest@0.5.12","publishedAt":"2025-11-13T20:03:27.000Z","url":"https://github.com/inngest/inngest-py/releases/tag/inngest%400.5.12","media":[]},{"id":"rel_ZovNdicYV2VV8D4SgOAFW","version":"inngest@0.5.11","title":"inngest@0.5.11","summary":"## Fixes\r\n- Fix failed Connect handshake when concurrency scope is unspecified.\r\n\r\n## What's Changed\r\n* Add Nix Flakes For Python SDK by @mar-inngest ...","content":"## Fixes\r\n- Fix failed Connect handshake when concurrency scope is unspecified.\r\n\r\n## What's Changed\r\n* Add Nix Flakes For Python SDK by @mar-inngest in https://github.com/inngest/inngest-py/pull/300\r\n* fix: invalid connect handshake w/concurrency config by @Linell in https://github.com/inngest/inngest-py/pull/301\r\n* Bump version to 0.5.11 by @Linell in https://github.com/inngest/inngest-py/pull/302\r\n\r\n## New Contributors\r\n* @mar-inngest made their first contribution in https://github.com/inngest/inngest-py/pull/300\r\n\r\n**Full Changelog**: https://github.com/inngest/inngest-py/compare/inngest@0.5.10...inngest@0.5.11","publishedAt":"2025-10-27T16:35:27.000Z","url":"https://github.com/inngest/inngest-py/releases/tag/inngest%400.5.11","media":[]},{"id":"rel_SaOhW8B9S-YjjF1lNX_KL","version":"inngest@0.5.10","title":"inngest@0.5.10","summary":"## Features\r\n- Add `Server-Timing` response header.\r\n\r\n## Fixes\r\n- Improve Connect close process.\r\n\r\n## What's Changed\r\n* Fast API realtime end-to-end...","content":"## Features\r\n- Add `Server-Timing` response header.\r\n\r\n## Fixes\r\n- Improve Connect close process.\r\n\r\n## What's Changed\r\n* Fast API realtime end-to-end example by @djfarrelly in https://github.com/inngest/inngest-py/pull/288\r\n* feat: add StepFailed opcode by @Linell in https://github.com/inngest/inngest-py/pull/291\r\n* Move more tests to new history by @amh4r in https://github.com/inngest/inngest-py/pull/293\r\n* Use pipe operator everywhere by @amh4r in https://github.com/inngest/inngest-py/pull/295\r\n* Fix Connect closing wonkiness by @amh4r in https://github.com/inngest/inngest-py/pull/296\r\n* Add Server-Timing response header by @amh4r in https://github.com/inngest/inngest-py/pull/294\r\n* Bump version to 0.5.10 by @amh4r in https://github.com/inngest/inngest-py/pull/297\r\n\r\n## New Contributors\r\n* @Linell made their first contribution in https://github.com/inngest/inngest-py/pull/291\r\n\r\n**Full Changelog**: https://github.com/inngest/inngest-py/compare/inngest@0.5.9...inngest@0.5.10","publishedAt":"2025-10-21T16:46:48.000Z","url":"https://github.com/inngest/inngest-py/releases/tag/inngest%400.5.10","media":[]},{"id":"rel_sgDcQvuP9jbxU7Ex2zTfz","version":"inngest@0.5.9","title":"inngest@0.5.9","summary":"## Features\r\n- Realtime publishing. This is still experimental but we don't expect the interface to change much\r\n\r\n## What's Changed\r\n* Implement real...","content":"## Features\r\n- Realtime publishing. This is still experimental but we don't expect the interface to change much\r\n\r\n## What's Changed\r\n* Implement realtime publishing support by @djfarrelly in https://github.com/inngest/inngest-py/pull/281\r\n* Bump version to 0.5.9 by @djfarrelly in https://github.com/inngest/inngest-py/pull/292\r\n\r\n\r\n**Full Changelog**: https://github.com/inngest/inngest-py/compare/inngest@0.5.8...inngest@0.5.9","publishedAt":"2025-09-25T19:23:12.000Z","url":"https://github.com/inngest/inngest-py/releases/tag/inngest%400.5.9","media":[]},{"id":"rel_ivfbWAVDwzTvfyF7p8FFx","version":"inngest@0.5.8","title":"inngest@0.5.8","summary":"## Fixes\r\n- Fix Connect not handling close frames.\r\n\r\n## What's Changed\r\n* Extract HTTP logic into new HTTPClient by @amh4r in https://github.com/inng...","content":"## Fixes\r\n- Fix Connect not handling close frames.\r\n\r\n## What's Changed\r\n* Extract HTTP logic into new HTTPClient by @amh4r in https://github.com/inngest/inngest-py/pull/284\r\n* Fix Connect not handling normal close by @amh4r in https://github.com/inngest/inngest-py/pull/289\r\n* Bump version to 0.5.8 by @amh4r in https://github.com/inngest/inngest-py/pull/290\r\n\r\n\r\n**Full Changelog**: https://github.com/inngest/inngest-py/compare/inngest@0.5.7...inngest@0.5.8","publishedAt":"2025-09-24T14:57:16.000Z","url":"https://github.com/inngest/inngest-py/releases/tag/inngest%400.5.8","media":[]},{"id":"rel_SnioSG1dqSArtCfuSy7lw","version":"inngest@0.5.7","title":"inngest@0.5.7","summary":"## Fixes\r\n- Expose `Timeouts` class (as `inngest.Timeouts`).\r\n- Fix Connect signal handlers added when not in main thread.\r\n- Fix Connect not working ...","content":"## Fixes\r\n- Expose `Timeouts` class (as `inngest.Timeouts`).\r\n- Fix Connect signal handlers added when not in main thread.\r\n- Fix Connect not working with branch environments.\r\n\r\n## PRs\r\n* Expose Timeouts class by @surya-crediflow in https://github.com/inngest/inngest-py/pull/273\r\n* Fix Connect signal handlers outside main thread by @amh4r in https://github.com/inngest/inngest-py/pull/279\r\n* Use new GQL resolvers for tests by @amh4r in https://github.com/inngest/inngest-py/pull/285\r\n* Fix Connect not working with branch envs by @amh4r in https://github.com/inngest/inngest-py/pull/280\r\n* Bump version to 0.5.7 by @amh4r in https://github.com/inngest/inngest-py/pull/286\r\n\r\n## New Contributors\r\n* @surya-crediflow made their first contribution in https://github.com/inngest/inngest-py/pull/273\r\n\r\n**Full Changelog**: https://github.com/inngest/inngest-py/compare/inngest@0.5.6...inngest@0.5.7","publishedAt":"2025-09-22T16:38:15.000Z","url":"https://github.com/inngest/inngest-py/releases/tag/inngest%400.5.7","media":[]},{"id":"rel_otH-Mw0B3MXgkrWC5pN8R","version":"inngest@0.5.6","title":"inngest@0.5.6","summary":"# Features\r\n- Add `if` support in the batch config. This conditional boolean expression, when provided, would determine which events get batched toget...","content":"# Features\r\n- Add `if` support in the batch config. This conditional boolean expression, when provided, would determine which events get batched together for execution.\r\n\r\n# Fixes\r\n- Fix Connect lease issue where expired leases didn’t cancel the run or stop the lease extension.\r\n\r\n# Full Changelog\r\nhttps://github.com/inngest/inngest-py/compare/inngest@0.5.5...inngest@0.5.6","publishedAt":"2025-08-28T15:27:21.000Z","url":"https://github.com/inngest/inngest-py/releases/tag/inngest%400.5.6","media":[]},{"id":"rel_w7bKYVimVpsIXuhH9UvYG","version":"inngest@0.5.5","title":"inngest@0.5.5","summary":"# Features\r\n- Add `parallel_mode` kwarg to `group.parallel`. Setting it to `ParallelMode.RACE` will allow sequential steps in a parallel group to exec...","content":"# Features\r\n- Add `parallel_mode` kwarg to `group.parallel`. Setting it to `ParallelMode.RACE` will allow sequential steps in a parallel group to execute independent of other parallel groups at the expense of more requests to your app.\r\n\r\n# Fixes\r\n- Fix Connect heartbeater dying on error.\r\n\r\n# Full Changelog\r\nhttps://github.com/inngest/inngest-py/compare/inngest@0.5.4...inngest@0.5.5","publishedAt":"2025-08-13T14:17:41.000Z","url":"https://github.com/inngest/inngest-py/releases/tag/inngest%400.5.5","media":[]},{"id":"rel_ciE0C4hrO4PBQrTCDZhRq","version":"inngest@0.5.4","title":"inngest@0.5.4","summary":"# Fixes\r\n- Fix deserialization error when using `PydanticSerializer`","content":"# Fixes\r\n- Fix deserialization error when using `PydanticSerializer`","publishedAt":"2025-07-17T13:25:51.000Z","url":"https://github.com/inngest/inngest-py/releases/tag/inngest%400.5.4","media":[]},{"id":"rel_5DbnonhloEgvdLvRWmhuU","version":"inngest@0.5.3","title":"inngest v0.5.3","summary":"# Fixes\r\n- Fix occasional reconnect error after draining.","content":"# Fixes\r\n- Fix occasional reconnect error after draining.","publishedAt":"2025-07-15T21:16:48.000Z","url":"https://github.com/inngest/inngest-py/releases/tag/inngest%400.5.3","media":[]},{"id":"rel_j6pwwoc-xfHVPvWNSGNFV","version":"inngest@0.5.1","title":"inngest v0.5.1","summary":"## Features\r\n- Add `public_path` arg to `serve`. This is useful when behind a path-rewriting proxy\r\n\r\n## Fixes\r\n- Fix Connect heartbeater using a stal...","content":"## Features\r\n- Add `public_path` arg to `serve`. This is useful when behind a path-rewriting proxy\r\n\r\n## Fixes\r\n- Fix Connect heartbeater using a stale connection after reconnecting\r\n- Fix `anyio.WouldBlock` error when streaming is enabled\r\n\r\n## What's Changed\r\n* Switch to uv by @amh4r in https://github.com/inngest/inngest-py/pull/260\r\n* Backport v0.4 changes by @amh4r in https://github.com/inngest/inngest-py/pull/262\r\n* Fix Connect hearbeater using stale connection by @amh4r in https://github.com/inngest/inngest-py/pull/261\r\n* Release SDK v0.5.1 by @amh4r in https://github.com/inngest/inngest-py/pull/263\r\n\r\n\r\n**Full Changelog**: https://github.com/inngest/inngest-py/compare/inngest@0.5.0...inngest@0.5.1","publishedAt":"2025-06-30T20:11:44.000Z","url":"https://github.com/inngest/inngest-py/releases/tag/inngest%400.5.1","media":[]},{"id":"rel_anTg78JX7eZQaQE6DQ3Q5","version":"inngest@0.5.0","title":"inngest v0.5.0","summary":"Release blog post [here](https://www.inngest.com/blog/2025-06-23-python-v0.5)\r\n\r\nFull migration guide [here](https://www.inngest.com/docs/reference/py...","content":"Release blog post [here](https://www.inngest.com/blog/2025-06-23-python-v0.5)\r\n\r\nFull migration guide [here](https://www.inngest.com/docs/reference/python/migrations/v0.4-to-v0.5)\r\n\r\n# New features\r\n\r\n- First-class Pydantic support in step and function output\r\n- AI orchestration with `step.infer` ([docs](https://www.inngest.com/docs/features/inngest-functions/steps-workflows/step-ai-orchestration)) -- currently experimental\r\n- Connect is stable ([docs](https://www.inngest.com/docs/setup/connect))\r\n- Python 3.13 support\r\n- Event-sending retries\r\n- Function singletons ([docs](https://www.inngest.com/docs/guides/singleton))\r\n- Function timeouts ([docs](https://www.inngest.com/docs/features/inngest-functions/cancellation/cancel-on-timeouts))\r\n- Improved parallel step performance\r\n\r\n# Breaking changes\r\n\r\n## Move `step` into `ctx`\r\nThe `step` object will be moved to `ctx.step`.\r\n\r\nBefore:\r\n```py\r\n@inngest_client.create_function(\r\n    fn_id=\"provision-user\",\r\n    trigger=inngest.TriggerEvent(event=\"user.signup\"),\r\n)\r\nasync def fn(ctx: inngest.Context, step: inngest.Step) -> None:\r\n    await step.run(\"create-user\", create_db_user)\r\n```\r\n\r\nAfter:\r\n```py\r\n@inngest_client.create_function(\r\n    fn_id=\"provision-user\",\r\n    trigger=inngest.TriggerEvent(event=\"user.signup\"),\r\n)\r\nasync def fn(ctx: inngest.Context) -> None:\r\n    await ctx.step.run(\"create-user\", create_db_user)\r\n```\r\n\r\n## Parallel steps\r\n`step.parallel` will be removed in favor of a new `ctx.group.parallel` method. This method will behave the same way, so it's a drop-in replacement for `step.parallel`.\r\n\r\n```py\r\n@client.create_function(\r\n  fn_id=\"my-fn\",\r\n  trigger=inngest.TriggerEvent(event=\"my-event\"),\r\n)\r\nasync def fn(\r\n  ctx: inngest.Context,\r\n  step: inngest.Step,\r\n) -> None:\r\n  user_id = ctx.event.data[\"user_id\"]\r\n\r\n  await ctx.group.parallel(\r\n    (\r\n      lambda: step.run(\"update-user\", update_user, user_id),\r\n      lambda: step.run(\"send-email\", send_email, user_id),\r\n    )\r\n  )\r\n```\r\n\r\n## Remove `event.user`\r\nWe're sunsetting `event.user`. It's already incompatible with some features (e.g. function run replay).\r\n\r\n## Disallow mixed async-ness within Inngest functions\r\nSetting an async `on_failure` on a non-async Inngest function will throw an error:\r\n\r\n```py\r\nasync def on_failure(ctx: inngest.Context) -> None:\r\n    pass\r\n\r\n@client.create_function(\r\n    fn_id=\"foo\",\r\n    trigger=inngest.TriggerEvent(event=\"foo\"),\r\n    on_failure=on_failure,\r\n)\r\ndef fn(ctx: inngest.ContextSync) -> None:\r\n    pass\r\n```\r\n\r\nSetting a non-async `on_failure` on an async Inngest function will throw an error:\r\n```py\r\ndef on_failure(ctx: inngest.ContextSync) -> None:\r\n    pass\r\n\r\n@client.create_function(\r\n    fn_id=\"foo\",\r\n    trigger=inngest.TriggerEvent(event=\"foo\"),\r\n    on_failure=on_failure,\r\n)\r\nasync def fn(ctx: inngest.Context) -> None:\r\n    pass\r\n```\r\n\r\n## Static error when passing a non-async callback to an async `step.run`\r\nWhen passing a non-async callback to an async `step.run`, it will work at runtime but there will be a static type error.\r\n\r\n```py\r\n@client.create_function(\r\n    fn_id=\"foo\",\r\n    trigger=inngest.TriggerEvent(event=\"foo\"),\r\n)\r\nasync def fn(ctx: inngest.Context) -> None:\r\n    # Type error because `lambda: \"hello\"` is non-async.\r\n    msg = await step.run(\"step\", lambda: \"hello\")\r\n\r\n    # Runtime value is \"hello\", as expected.\r\n    print(msg)\r\n```\r\n\r\n## `inngest.Function` is generic\r\n\r\nThe `inngest.Function` class is now a generic that represents the return type. So if an Inngest function returns `str` then it would be `inngest.Function[str]`.\r\n\r\n## Middleware order\r\nUse LIFO for the \"after\" hooks. In other words, when multiple middleware is specified then the \"after\" hooks are run in reverse order.\r\n\r\nFor example, let's say the following middleware is defined and used:\r\n```py\r\nclass A(inngest.MiddlewareSync):\r\n    def before_execution(self) -> None:\r\n        # ...\r\n\r\n    def after_execution(self) -> None:\r\n        # ...\r\n\r\nclass B(inngest.MiddlewareSync):\r\n    def before_execution(self) -> None:\r\n        # ...\r\n\r\n    def after_execution(self) -> None:\r\n        # ...\r\n\r\ninngest.Inngest(\r\n    app_id=\"my-app\",\r\n    middleware=[A, B],\r\n)\r\n```\r\n\r\nThe middleware will be executed in the following order for each hook:\r\n- `before_execution` -- `A` then `B`.\r\n- `after_execution` -- `B` then `A`.\r\n\r\nThe \"before\" hooks are:\r\n```\r\nbefore_execution\r\nbefore_response\r\nbefore_send_events\r\ntransform_input\r\n```\r\n\r\nThe \"after\" hooks are:\r\n```\r\nafter_execution\r\nafter_send_events\r\ntransform_output\r\n```\r\n\r\n## Remove middleware hooks\r\n- `before_memoization`\r\n- `after_memoization`\r\n\r\n## Remove experimental stuff\r\n- `inngest.experimental.encryption_middleware` (it's now the [inngest-encryption](https://pypi.org/project/inngest-encryption/) package).\r\n- `experimental_execution` option on functions. We won't support native `asyncio` methods (e.g. `asyncio.gather`) going forward.\r\n\r\n## Dependencies\r\nDrop support for Python `3.9`.\r\n\r\nBump dependency minimum versions:\r\n```\r\nhttpx>=0.26.0\r\npydantic>=2.11.0\r\ntyping-extensions>=4.13.0\r\n```\r\n\r\nBump peer dependency minimum versions:\r\n```\r\nDjango>=5.0\r\nFlask>=3.0.0\r\nfastapi>=0.110.0\r\ntornado>=6.4\r\n```","publishedAt":"2025-06-23T16:50:54.000Z","url":"https://github.com/inngest/inngest-py/releases/tag/inngest%400.5.0","media":[]},{"id":"rel_O_Fss_eJV-gOwglxoj0Wh","version":"inngest@0.4.22","title":"inngest v0.4.22","summary":"## Fixes\r\n- Use thread pool when running non-async functions in async context. This prevents a non-async Inngest function from blocking the whole even...","content":"## Fixes\r\n- Use thread pool when running non-async functions in async context. This prevents a non-async Inngest function from blocking the whole event loop when using an async HTTP framework (e.g. FastAPI).\r\n- Raise a better error when using nested steps.\r\n- [Connect](https://www.inngest.com/docs/setup/connect) fixes and improvements.\r\n\r\n## What's Changed\r\n* Connect: add thread pool by @amh4r in https://github.com/inngest/inngest-py/pull/219\r\n* Connect: Close more gracefully by @amh4r in https://github.com/inngest/inngest-py/pull/220\r\n* Connect: Fix graceful close when no initial connection by @amh4r in https://github.com/inngest/inngest-py/pull/221\r\n* Bump version to 0.4.22a1 by @amh4r in https://github.com/inngest/inngest-py/pull/222\r\n* Delete unnecessary memo code by @amh4r in https://github.com/inngest/inngest-py/pull/224\r\n* Improve nested step handling by @amh4r in https://github.com/inngest/inngest-py/pull/223\r\n* Use thread pool when running non-async functions in async context by @amh4r in https://github.com/inngest/inngest-py/pull/225\r\n* Connect: add lease extensions by @amh4r in https://github.com/inngest/inngest-py/pull/227\r\n* Connect: fix wrong error log by @amh4r in https://github.com/inngest/inngest-py/pull/228\r\n* Connect: fix auto-close on non-retryably start request fail by @amh4r in https://github.com/inngest/inngest-py/pull/229\r\n\r\n\r\n**Full Changelog**: https://github.com/inngest/inngest-py/compare/inngest@0.4.21...inngest@0.4.22","publishedAt":"2025-05-08T01:12:49.000Z","url":"https://github.com/inngest/inngest-py/releases/tag/inngest%400.4.22","media":[]},{"id":"rel_m-mjyay68XNTLqWbxmAca","version":"inngest@0.4.21","title":"inngest@0.4.21","summary":"## New features\r\n- Add `inngest.experimental.connect` package for [Connect](https://www.inngest.com/docs/setup/connect). It's experimental, but we don...","content":"## New features\r\n- Add `inngest.experimental.connect` package for [Connect](https://www.inngest.com/docs/setup/connect). It's experimental, but we don't anticipate the API changing much.\r\n- Add `ctx.group` to Inngest function args. This is the new recommended approach for parallel steps. We'll remove `step.parallel` in a future release.\r\n\r\n## What's Changed\r\n* Use more async during testing by @amh4r in https://github.com/inngest/inngest-py/pull/207\r\n* Add ctx.group by @amh4r in https://github.com/inngest/inngest-py/pull/205\r\n* Remove invoke opt in by @amh4r in https://github.com/inngest/inngest-py/pull/208\r\n* Add experimental Connect feature by @amh4r in https://github.com/inngest/inngest-py/pull/211\r\n* Fix Connect reconnect by @amh4r in https://github.com/inngest/inngest-py/pull/212\r\n* Connect: signing key fallback test by @amh4r in https://github.com/inngest/inngest-py/pull/213\r\n* Connect: fix function runs in Cloud by @amh4r in https://github.com/inngest/inngest-py/pull/214\r\n* Connect: finish WorkerConnectRequestData todos by @amh4r in https://github.com/inngest/inngest-py/pull/215\r\n* Connect: support drains by @amh4r in https://github.com/inngest/inngest-py/pull/216\r\n* Remove Tornado tests by @amh4r in https://github.com/inngest/inngest-py/pull/217\r\n* Bump inngest version to v0.4.21 by @amh4r in https://github.com/inngest/inngest-py/pull/218\r\n\r\n\r\n**Full Changelog**: https://github.com/inngest/inngest-py/compare/inngest@0.4.20...inngest@0.4.21","publishedAt":"2025-04-03T18:59:31.000Z","url":"https://github.com/inngest/inngest-py/releases/tag/inngest%400.4.21","media":[]}],"pagination":{"page":1,"pageSize":20,"totalPages":4,"totalItems":61},"summaries":{"rolling":null,"monthly":[]}}