What PrefectHQ/prefect shipped
Written by FoxPlug from the repository's own releases; not affiliated with Prefect. Paste your own repository in the box below and FoxPlug writes the same weekly update for your product. This page is an automatic summary of the releases, pull requests and commits in github.com/PrefectHQ/prefect; Prefect did not write it and does not use or endorse FoxPlug. Every line links to the change it describes.
Get a weekly update like this for your product, free
Week of November 2, 2026
What shipped
- Queue polling now writes deployments only when a poll actually changes them, recording polled queue heartbeats in a short write-only transaction first. Pull request #23130
- MemoryLockManager and FileSystemLockManager now treat releasing an already released or expired lock as a no-op, matching RedisLockManager. Pull request #23725
- Sweep_held_events now skips held events locked by another transaction instead of waiting on them, leaving a later sweep to delete them. Pull request #23757
- Flow run heartbeats now stop before the engine proposes a terminal state, so a heartbeat that comes due during that round trip no longer lands after completion. Pull request #23784
- Database query timeouts, connection pool timeouts and PostgreSQL connection dropouts are now treated as client retryable exceptions. Pull request #23741
- Non-block $ref values in flow parameter schemas are now preserved instead of failing with ParameterTypeError before the flow runs. Pull request #23432
- GitRepository.pull_code now applies directories changes to an existing sparse checkout, adding new directories and disabling sparse checkout when directories is removed. Pull request #23712
- Flow state hooks now receive arguments the same way in the engine and the runner: by name when hooks name their parameters, positionally otherwise. Pull request #23715
- Still_connected now returns False after a websocket disconnect message instead of returning True. Pull request #23781
- Deployment parameters containing arrays of objects now display as JSON in parameter fields. Pull request #23723
Why it matters
This week lands steady fixes across deployment polling, locking and flow runs: polls that write only what changed, lock release that tolerates already-expired locks, and heartbeats that stop before a terminal state is proposed. Flow parameter schemas keep their references, and git-based deployments can adjust sparse checkout directories on an existing checkout. The 3.9.2 release and its nightly builds carry these changes to users.
Changelog entry
- Release 3.9.2 with reduced deployment writes from queue polling and artifact table rendering fixes Release
- Only write deployments that a poll actually changes Pull request #23130
- Tolerate release of expired locks in MemoryLockManager and FileSystemLockManager Pull request #23725
- Skip locked rows when sweeping held events Pull request #23757
- Stop flow run heartbeats before proposing a terminal state Pull request #23784
- Treat database and connection pool timeouts as client retryable exceptions Pull request #23741
- Preserve JSON Schema references in flow parameters Pull request #23432
- Preserve init=False dataclass fields in
visit_collectionPull request #23270 - Fix GitRepository.pull_code ignoring directories changes on an existing sparse checkout Pull request #23712
- Accept the same flow state hook signatures in the engine and the runner Pull request #23715
- Return False from
still_connectedafter a websocket disconnect message Pull request #23781 - Display deployment parameters containing arrays of objects as JSON Pull request #23723
Prefect 3.9.2 shipped this week. Deployment polling writes only what changed, lock release tolerates expired locks, and heartbeats stop before a terminal state proposal. Also: $ref flow parameter schemas and sparse checkout directory changes now work.
Prefect 3.9.2 is out this week. Queue polling now writes deployments only when a poll actually changes them, keeping poll freshness without extra writes. MemoryLockManager and FileSystemLockManager release expired or already-released locks as a no-op, and flow run heartbeats stop before the engine proposes a terminal state. Other fixes: held-event sweeps skip locked rows, $ref values in flow parameter schemas are preserved, git pull_code applies directory changes to an existing sparse checkout, and flow state hooks receive arguments the same way in the engine and the runner.
Week of October 26, 2026
What shipped
- Fixed task caching so different tasks with similar code no longer share a cache key and return another task's saved result. Pull request #23468
- Preserved DataFrame column order when computing INPUTS cache keys so reordered columns no longer produce incorrect cached task results. Pull request #23303
- Fixed failed states returned from tasks being cached as successful task results. Pull request #23523
- Preserved configured Docker volumes when submitting flows directly to a work pool without bundle storage. Pull request #23683
- Fixed flow run filter and paginate endpoints returning a 500 when a flow run has an integer parameter outside the 64-bit range. Pull request #23429
- Added retry logic so concurrent Kubernetes worker submissions no longer fail when another submission creates the shared API-key Secret first. Pull request #23649
- Added longest to shortest and shortest to longest duration sorting for task runs, sorted on the server so order holds across pages. Pull request #23275
- Fixed
filter_filesaborting on a directory symlink cycle, affecting what deployment upload paths ship. Pull request #23307 - Preserved the deployment concurrency lease ID on forced flow run state changes so a cancelled run's slot is released once instead of twice. Pull request #23304
- Raised ObjectUnsupported from the async
create_work_poolwhen the plan doesn't allow the pool, matching the sync client. Pull request #23610
Why it matters
This week's changes tighten correctness in caching, scheduling and state handling, which matters to anyone relying on task results and deployment concurrency. Docker volume handling and Kubernetes worker retries reduce failures in common submission paths, while several CLI and UI fixes remove confusing errors and display bugs.
Changelog entry
- Fixed different tasks returning another task's cached results by hashing the complete code object. Pull request #23468
- Preserved DataFrame column order when computing INPUTS cache keys. Pull request #23303
- Fixed returned failed states being cached as successful task results. Pull request #23523
- Preserved configured Docker volumes in direct flow submissions to work pools without bundle storage. Pull request #23683
- Fixed 500 errors from flow run filter and paginate endpoints for parameters beyond 64 bits. Pull request #23429
- Handled concurrent API-key Secret creation in Kubernetes workers with retry on 409. Pull request #23649
- Added duration ascending and descending sort options for task runs. Pull request #23275
- Fixed
filter_filesaborting on a directory symlink cycle. Pull request #23307 - Preserved deployment concurrency lease IDs on forced flow run state changes. Pull request #23304
- Async
create_work_poolnow raises ObjectUnsupported when the plan doesn't allow the pool. Pull request #23610 - Stopped extra cron runs during DST refills on Python 3.11 and 3.12. Pull request #23672
- Showed an invalid slug error from prefect block inspect and block delete for extra slashes. Pull request #23670
This week: task cache keys no longer collide across different tasks, DataFrame column order is preserved in INPUTS cache keys, and failed task states are no longer cached as successful. Also: Docker volume preservation on direct flow submissions, Kubernetes worker retry on API-ke
This week's work on Prefect focused on correctness. Task caching fixes stop different tasks from sharing a cache key, preserve DataFrame column order in INPUTS cache keys, and prevent failed task states from being stored as successful results. Deployment submissions to Docker work pools now keep configured volumes when no bundle storage is used, and Kubernetes workers retry when another submission creates the shared API-key Secret first. Task runs can be sorted by duration on the server, filter_files no longer aborts on a directory symlink cycle, and deployment concurrency leases are preserved on forced state changes.
Week of October 19, 2026
What shipped
- Released 3.9.0, which drops Python 3.10 support, removes deprecated runner execution paths, and deprecates Pendulum datetime behavior on Python 3.11 and 3.12. Release
- Nightly 3.9.1.dev3 added custom state discovery and filters, locked prefect-redis and prefect-kubernetes for the Docker image, and made flows that return a failed state retry when retries are configured. Release
- Added separate state type and state name filters so custom states can be discovered and selected, backed by a new observed-states endpoint with prefix search and transition timestamps. Pull request #23490
- Fixed GitRepository.pull_code so a shallow clone is updated in place with a depth-1 fetch and hard reset instead of being re-cloned on every new commit. Pull request #23351
- The provisioned ECS execution role can now create CloudWatch log groups, and roles created by earlier versions gain the permission when provisioning runs again. Pull request #23557
- Prefect flow-run inspect now shows its not-found message for missing flow runs instead of a traceback. Pull request #23329
- Metric triggers on metric names this client does not know are now read as strings instead of raising a validation error. Pull request #23513
- Cached
get_timezonesso schedule validation stops rescanning tzdata on every call. Pull request #23531 - Released 2.20.27 for the 2.x line, which allows patched AnyIO releases and refreshes pip and Conda CA trust in the Prefect 2 images. Release
- Fixed a duplicate Retries label in the deployment custom run creation form. Pull request #23343
Why it matters
This week brought the 3.9.0 release, which drops Python 3.10 and removes deprecated runner execution paths, alongside a 2.x maintenance release. Nightly builds also added custom state discovery and filters and changed how failed states interact with retries, while several fixes addressed shallow clone updates and provisioning permissions.
Changelog entry
- Release 3.9.0: drops Python 3.10, removes deprecated runner execution paths, deprecates Pendulum datetime behavior on Python 3.11-3.12. Release
- Release 2.20.27: allows patched AnyIO releases on 2.x and refreshes pip and Conda CA trust in Prefect 2 images. Release
- Add custom state discovery and filters with separate state type and name filters and a new observed-states endpoint. Pull request #23490
- Fix GitRepository.pull_code re-cloning a shallow clone on every new commit. Pull request #23351
- Allow the provisioned ECS execution role to create CloudWatch log groups. Pull request #23557
- Show a not-found error from prefect flow-run inspect for missing runs. Pull request #23329
- Read metric triggers on metrics this client does not know instead of raising a validation error. Pull request #23513
- Cache
get_timezonesso schedule validation stops rescanning tzdata. Pull request #23531 - Fix duplicate Retries label in deployment custom run creation. Pull request #23343
- Nightly 3.9.1.dev1: publish duration lower bounds only where validation enforces them, move remaining Node 20 pins to Node 22, and update Node to the October 2026 security releases. Release
- Nightly 3.9.1.dev2: prevent state persistence errors from failing a successful flow and skip unset Pydantic private attributes when rebuilding models. Release
- Enforce the configured minimum when entering duration values. Pull request #23122
Prefect 3.9.0 is out: Python 3.10 support dropped, deprecated runner execution paths removed, Pendulum datetime behavior deprecated on 3.11-3.12. Nightly builds also add custom state discovery and filters, and flows that return a failed state now retry when retries are set.
Prefect 3.9.0 is released, dropping Python 3.10 support, removing deprecated runner execution paths, and deprecating Pendulum datetime behavior on Python 3.11 and 3.12. The 2.x line also got 2.20.27, which allows patched AnyIO releases and refreshes pip and Conda CA trust in the Prefect 2 images. Nightly builds added custom state discovery and filters, including separate state type and name filters for custom states, and made flows that return a failed state retry when retries are configured. Other fixes cover shallow clone updates and CloudWatch log group permissions for provisioned ECS roles.
Week of October 12, 2026
What shipped
- S3Bucket keeps its configured
bucket_folderwhen a read or write path starts with a leading slash, so writes like /reports/file.txt now land under the configured prefix instead of being dropped. Pull request #23407 - Visit_collection no longer returns another object's cached result after an id is reused. Pull request #23404
- Prefect deploy no longer drops list items that are templated from build or push step outputs. Pull request #23381
- Pause_flow_run,
apause_flow_run,suspend_flow_runandasuspend_flow_runnow raise a ValueError immediately when given a negative timeout. Pull request #22761 - Bundled collection metadata now uses working logo URLs instead of the dead Sanity-hosted ones. Pull request #23409
- The items type in the bundled schema changed from string to an object with a string-typed name property, matching the Kubernetes docs. Pull request #23388
- The ECS worker manual-deployment guide now imports WorkPoolUpdate from prefect.client.schemas.actions, so the snippet no longer fails with an ImportError. Pull request #23367
- Integration packages have updated classifiers and integration tests now include Python 3.14. Pull request #23273
- The ECS integration test now expects string CPU and memory values in running-container responses, matching Moto 5.2.4 serialization. Pull request #23431
- Nightly development release 3.8.9.dev6 bundles the ECS resource expectation fix, optional collections in flow parameter schemas and the S3 bucket prefix fix. Release
Why it matters
This week's changes are mostly fixes that remove small but confusing failures: S3 paths with leading slashes keep the bucket folder, deploy stops dropping templated list items, invalid negative timeouts are rejected up front, and the ECS docs snippet imports correctly. Integration packages also picked up updated classifiers and added Python 3.14 to their tests, and a nightly release rolls the fixes together.
Changelog entry
- Preserve S3 bucket prefixes for paths with leading slashes. Pull request #23407
- Fix
visit_collectionreturning another object's cached result after id reuse. Pull request #23404 - Fix prefect deploy dropping list items templated from step outputs. Pull request #23381
- Raise ValueError for negative timeout in
pause_flow_runandsuspend_flow_run. Pull request #22761 - Replace dead Sanity logo URLs in bundled collection metadata. Pull request #23409
- Fix items type to an object with a string-typed name property. Pull request #23388
- Import WorkPoolUpdate from client.schemas.actions in the ECS guide. Pull request #23367
- Update classifiers in all integrations and add 3.14 to integration tests. Pull request #23273
- Fix ECS container resource expectations for Moto 5.2.4. Pull request #23431
- Nightly development release 3.8.9.dev6. Release
- Nightly development release 3.8.9.dev5. Release
- Nightly development release 3.8.9.dev3. Release
This week: S3 bucket prefixes now survive paths with leading slashes, prefect deploy keeps list items templated from step outputs, negative timeouts in pause and suspend are rejected up front, and integration tests now cover Python 3.14.
This week in Prefect: S3 bucket folder prefixes are preserved when read or write paths start with a leading slash, prefect deploy no longer drops list items templated from build or push step outputs, and pause_flow_run, suspend_flow_run and their async versions now raise a ValueError right away for negative timeouts instead of failing later. Bundled collection metadata got working logo URLs, the ECS manual-deployment guide imports WorkPoolUpdate from the correct module, and integration packages have updated classifiers with Python 3.14 added to their test matrix. These fixes are collected in nightly development release 3.8.9.dev6.
Week of October 5, 2026
What shipped
- Released 3.8.8, the last release that supports Python 3.10, with bug fixes for
get_call_parametersand paging through all runs in cancellation cleanup and pause expiration monitors. Release - Released nightly 3.8.9.dev2 with UI fixes so flow run activity cells are navigable, run graph artifact icons render instead of black boxes, and run artifacts open directly from the Artifacts tab and run graph. Release
- Kept the runner healthcheck healthy while the Prefect API is in maintenance, following the same change made for workers. Pull request #23325
- Kept the worker healthcheck healthy while the API is in maintenance and gave it the normal polling window to recover after maintenance ends. Pull request #23230
- Reloaded collections after installing a missing worker integration so prefect worker start works on the first run. Pull request #23237
- Allowed prefect work-pool update --concurrency-limit 0 to set the limit to zero instead of treating it as not provided. Pull request #23299
- Made work-pool preview and work-queue preview respect the --hours window when listing scheduled runs. Pull request #23300
- Fixed
create_default_prefect_yamlraising a TypeError when the optional contents argument is omitted or None. Pull request #23334 - Fixed failed state losing metadata during retry so retry rules see the original state details. Pull request #23256
- Passed the configured botname to NotifyMattermost so the name is no longer dropped at send time. Pull request #23281
Why it matters
This week brought a stable release that is the last to support Python 3.10, plus a nightly with several UI fixes for run graphs, artifacts and activity navigation. Work also continued on making worker and runner healthchecks stay healthy during API maintenance windows, and on clearing configuration bugs in work pools, blocks and notifications. For people running flows, the fixes touch retries, caching, hooks and collection loading.
Changelog entry
- Release 3.8.8: last release supporting Python 3.10, with bug fixes for
get_call_parametersand run paging in cancellation cleanup and pause expiration monitors. Release - Nightly 3.8.9.dev1: dropped Python 3.10 support. Release
- Nightly 3.8.9.dev2: flow run activity cells are navigable, run graph artifact icons render correctly, and run artifacts open directly from the Artifacts tab and run graph. Release
- Runner webserver healthcheck stays healthy while the Prefect API is in maintenance. Pull request #23325
- Worker healthcheck stays healthy while the API is in maintenance, with the normal polling window to recover afterwards. Pull request #23230
- Collections reload after installing a missing worker integration so prefect worker start works the first time. Pull request #23237
- Prefect work-pool update --concurrency-limit 0 now sets the limit to zero. Pull request #23299
- Work-pool preview and work-queue preview respect --hours when listing scheduled runs. Pull request #23300
- Create_default_prefect_yaml no longer raises TypeError when contents is omitted or None. Pull request #23334
- Failed state no longer loses metadata during retry. Pull request #23256
- NotifyMattermost now receives the configured botname. Pull request #23281
- Log and event text search treats underscore and percent literally on the database path. Pull request #23214
Released Prefect 3.8.8, the last version supporting Python 3.10. Also shipped: runner and worker healthchecks stay healthy during API maintenance, work-pool update accepts --concurrency-limit 0, --hours is respected in previews, and UI fixes for run graphs and artifacts. Nightly
This week Prefect 3.8.8 shipped as the last release supporting Python 3.10, with fixes for get_call_parameters and for paging through all runs in cancellation cleanup and pause expiration monitors. A nightly, 3.8.9.dev2, followed with UI fixes: flow run activity cells are navigable, run graph artifact icons render instead of black boxes, and run artifacts open directly from the Artifacts tab and run graph. Runner and worker healthchecks now stay healthy while the Prefect API is in maintenance. Other fixes let prefect work-pool update --concurrency-limit 0 set a zero limit, made work-pool and work-queue previews respect --hours, reloaded collections after installing a missing worker integration, and passed the configured botname to NotifyMattermost.
Week of September 28, 2026
What shipped
- Fixed
retry_jitter_factorto actually apply jitter to retry delays as documented, resolving a gap between documentation and implementation in the task engine. Pull request #23222 - Fixed cancellation cleanup and pause expiration monitors to page through all matching runs, ensuring child flows are properly handled regardless of volume. Pull request #23240
- Fixed
get_call_parametersto correctly unwrap FieldInfo defaults for flow runs. Pull request #23228 - Corrected misleading cron schedule help text that reversed the OR/AND logic explanation. Pull request #23238
- Docker image now installs locked dependency versions instead of resolving fresh at build time, ensuring consistent environments. Pull request #23225
- Released prefect-shell 0.3.7 with updated logo URLs. Release
Why it matters
This week addresses several correctness issues that improve reliability of flow execution and monitoring. The retry jitter fix ensures retries behave as documented, the cancellation monitor fix prevents incomplete cleanup of large flow runs, and the Docker image change ensures reproducible deployments.
Changelog entry
- Apply
retry_jitter_factorin the task engine Pull request #23222 - Page through all runs in cancellation cleanup and pause expiration monitors Pull request #23240
- Fix
get_call_parametersto unwrap FieldInfo defaults for flow runs Pull request #23228 - Fix misleading cron schedule help text Pull request #23238
- Install locked dependency versions in Docker image Pull request #23225
- Bump virtualenv from 21.7.1 to 21.7.12 Release
- Bump oauthlib from 3.3.1 to 4.0.0 Release
- Release prefect-shell 0.3.7 Release
3.8.8.dev releases this week: retry_jitter_factor now works as documented, cancellation monitors handle large flow volumes, Docker builds use locked dependencies for consistency.
This week's Prefect updates focus on correctness and reliability. Retry jitter now properly applies to retry delays as documented. Cancellation and pause monitors now page through all runs, ensuring complete cleanup regardless of volume. Docker images now use locked dependency versions, providing reproducible builds. These fixes improve the consistency between documented behavior and actual behavior.
Week of September 21, 2026
What shipped
- Version 3.8.7 released with browser-local pinned deployments in the React UI, allowing users to pin deployments that sort to the top of the list using browser storage. Release
- Pinned deployments can be set from the deployment table row or details page, with pins stored in the browser's localStorage rather than on the server. Pull request #23143
- Fixed retry budget for completed subflows when a parent flow retries, giving the child a fresh run with its configured retries while preserving the previous Completed run's state. Pull request #23153
- Fixed interval form to display correct remaining time values and show the selected time unit when editing schedules. Pull request #23209
- Fixed event publisher to log the actual size of oversized events that are refused for publication. Pull request #23180
- Added support for rendering data:image/* URIs in ui-v2 markdown content. Release
- Modernized prefect-dbt type annotations to Python 3.10+ syntax. Pull request #23081
- Fixed falsy values like blank strings and zeroes being rendered as empty in the variables table. Pull request #23096
- Fixed date range selection for relative time queries that were selecting the previous period instead of the next. Pull request #23081
- PrefectDbtRunner now raises an error when dbt nodes are skipped during execution. Pull request #23050
Why it matters
Version 3.8.7 introduces browser-local pinned deployments for UI organization and fixes critical issues with subflow retries, scheduling forms, and event logging. These changes improve both user experience and reliability of flow execution and state management.
Changelog entry
- Add browser-local pinned deployments to the React UI Release
- Format deployment Created/Updated timestamps in ui-v2 metadata Release
- Fix retry budget for completed subflows on parent retry Release
- Fix reading results persisted to an unsaved local filesystem Release
- Log the real size when refusing to publish an oversized event Pull request #23180
- Fix interval form showing incorrect value and time unit Pull request #23209
- Render data:image/* URIs in ui-v2 markdown Release
- Fix falsy variables rendered as blank Pull request #23096
- Fix next date selection selecting previous date Pull request #23081
- Raise on skipped dbt nodes in PrefectDbtRunner Pull request #23050
Prefect 3.8.7 is out. Pin deployments in the React UI using browser storage, fix subflow retry budgets, and improve scheduling form display.
Prefect 3.8.7 brings browser-local pinned deployments to the React UI for better deployment organization, fixes retry budget handling for completed subflows on parent retry, and resolves scheduling form display issues. These improvements enhance both usability and flow execution reliability.
Week of September 14, 2026
What shipped
- Version 3.8.6 released with pause and cancellation improvements, including the ability to cancel blocking paused flow runs after pause timeout elapses. Release
- Fixed date range selector on flow runs page so clicking cancel no longer incorrectly selects 'All time'. Pull request #23148
- Version 3.8.7.dev2 includes deployment timestamp formatting in UI v2 metadata and improved dark-mode readability for flow run cards. Release
- Fixed shell assertion tests in prefect-shell integration that were not actually validating the launched shell type. Pull request #23144
- Fixed multiple test assertions that were being evaluated but not actually checked, preventing test failures from being caught. Pull request #23141
- Version 3.8.7.dev1 fixes V2 run-list wrapping and toolbar overflow issues at constrained widths. Release
- Nightly releases now build only wheels instead of source distributions, and UI source maps are disabled to reduce PyPI storage growth. Pull request #23120
- Version 3.8.7.dev3 restores deployment, work pool, and work queue links on V2 flow-run cards and shows tag names inline. Release
- Added native Redis Sentinel support to prefect-redis integration. Pull request #22377
- Added Osano consent manager configuration to Prefect 3 documentation. Pull request #23133
Why it matters
This week brings flow run improvements and UI fixes in 3.8.6 along with several development releases. The release focuses on pause and cancellation workflows, while bug fixes address both test reliability and user-facing issues like date filtering in the UI.
Changelog entry
- Allow cancelling a blocking paused flow run after its pause timeout elapses Release
- Allow transitioning to cancelling from paused state Release
- Reduce task run recorder INSERT compilation CPU Release
- Fix date clearing on cancel in flow runs page date range selector Pull request #23148
- Format deployment Created/Updated timestamps in ui-v2 metadata Release
- Improve dark-mode readability of flow run cards Release
- Fix V2 run-list wrapping and toolbar overflow at constrained widths Release
- Omit UI source maps and build only wheels for nightly prefect releases Pull request #23120
- Show tag names inline and make tag overflow focusable Release
- Restore deployment, work pool, and work queue links on V2 flow-run cards Release
- Add Redis Sentinel support to prefect-redis Pull request #22377
Prefect 3.8.6 is out with pause/cancellation improvements including blocking paused flow run cancellation after timeout. UI fixes address date filtering and overflow issues.
Prefect 3.8.6 is now available with enhanced pause and cancellation workflows. This release allows you to cancel blocking paused flow runs after the pause timeout elapses, improving control over long-running flows. Recent development builds have also addressed UI reliability with fixes to flow run list wrapping, date range selection, and dark mode readability in v2.