Prefect 3.8.8 is a bug fix release for the Prefect workflow orchestrator, with notes on how it affects pipeline operators. It is the last version that supports Python 3.10, and it fixes several retry, pagination and shutdown problems.
Prefect 3.8.8 was published on October 6, 2026 under the release name “I take my wildcards literally”. It is a stable release, not a prerelease. The headline is the support floor: the notes say future releases will require Python 3.11 or later. The rest is a large batch of bug fixes. The full release notes and downloads are on the GitHub release page.
Python 3.10 is done after this release ¶
If any of your flow images, workers or CI runners still run Python 3.10, this is the last tag you can upgrade to on that interpreter. Pin it, then plan the move to 3.11 or later before the next minor release lands. Check base images first. Long lived worker pools on old images are the usual place where this surprises people.
The Docker image also changed. #23225 installs locked dependency versions in the image, so image contents should match what the project tested.
Retries, state and hooks in the task engine ¶
Several fixes touch how flows and tasks behave when something goes wrong. These matter most to teams with retry heavy pipelines.
- #23222 applies
retry_jitter_factorin the task engine. If you set it and saw no spread between retries, this is why. - #23256 stops a failed state from losing metadata during a retry.
- #23186 fixes rollback and commit hooks not working.
- #23224 preserves cache policy configuration when excluding inputs.
- #23228 makes
get_call_parametersunwrapFieldInfodefaults for flow runs.
The jitter and hook fixes change observable behavior. If you worked around them, for example with manual sleeps in retry logic, review those workarounds. Retry timing will now differ from what you tuned against.
Server, worker and shutdown behavior ¶
This group is the part platform operators should read twice.
- #23240 pages through all runs in the cancellation cleanup and pause expiration monitors. Before this, those monitors did not walk every page, so large run backlogs could be missed.
- #23244 stops rescheduling a flow run on SIGTERM when the server already finished it. That avoids duplicate runs after a pod eviction.
- #23230 keeps the worker healthcheck healthy while the API is in maintenance. Liveness probes should stop killing workers during planned API downtime.
- #23308 keeps the event persister periodic flush alive when the database raises
CancelledError. - #23220 fixes an
UnboundLocalErrorin the observer_get_k8s_jobswhen the Kubernetes client cannot be created. - #23278 parses
Retry-Afterheaders in HTTP date form, and tolerates invalid values, instead of crashing.
The tradeoff is small. Monitors that now page fully will do more database work on large installs. That is the correct cost, but watch query load after the upgrade.
Search, schemas and CLI details ¶
A few fixes are narrower but easy to trip over.
- #23214 matches
_and%literally in log and event text search. The release name appears to refer to this wildcard fix. - #23299 allows
prefect work-pool update --concurrency-limit 0. - #23195 stops truncating runner names that contain dots.
- #23192 fixes a nested schema
requiredlist leaking onto sibling properties inprocess_properties. - #23215 resolves single value block keys that start with
value.
Other fixes cover Mattermost bot names, automation edit crashes, POSIX paths in the prefect deploy flow picker, and a UI checkbox change. These are real but unlikely to affect most pipelines.
Dependencies and housekeeping ¶
The dependency section is routine Dependabot work: urllib3 2.7.0 to 2.8.0, pyjwt 2.13.0 to 2.15.0, oauthlib 3.3.1 to 4.0.0, tornado 6.5.8 to 6.5.9, plus virtualenv and UI package bumps. The oauthlib major version bump is the one to check if you pin it in a shared environment. The development section is mostly test stabilization, logo hosting and CI workflow migration. None of it changes runtime behavior, apart from #23172, which stops QueueService from handing out a stopped instance.
Upgrade notes ¶
- Python 3.10 support ends with this tag. Move to 3.11 or later before the next release.
- Retry jitter now applies. Expect different retry spacing.
oauthlibmoves to a new major version in the dependency set.
The full list of changes is on the release page, and the compare view is at https://github.com/PrefectHQ/prefect/compare/3.8.7...3.8.8.
Where to get it ¶
- Release page: https://github.com/PrefectHQ/prefect/releases/tag/3.8.8
- Repository: https://github.com/PrefectHQ/prefect
- Tag:
3.8.8