3.6.21 - {"cli": { "speaks_json": true } }
Released on March 05, 2026
Enhancements ββ
- Add
--output jsonsupport toflow lscommand by @Br1an67 in #20907 - Fix
match_relatedtype hints and add Python examples forDeploymentEventTriggerby @devin-ai-integration[bot] in #20902 - Support multihost Postgres connection strings in LISTEN/NOTIFY listener by @devin-ai-integration[bot] in #20926
- Move event trimming from
EventPersisterto docket-baseddb_vacuumservice by @tom21100227 in #20811 - Add
--output jsontotask-run ls,work-pool ls, andconcurrency-limit lsby @zzstoatzz in #20967 - Add
--output jsonsupport toblock inspectandblock type inspectby @zzstoatzz in #20981 - Add
--output jsonsupport toflow-run logsandtask-run logsby @zzstoatzz in #20982 - Add
--output jsonsupport toserver services lsby @jellyfish0316 in #20983 - Add
--output jsonsupport tocloud workspaceandwebhookcommands by @zzstoatzz in #20984 - Add
--output jsonsupport towork-queue lsandpreviewby @zzstoatzz in #20985 - Add
--output jsonsupport towork-pool previewby @zzstoatzz in #20986 - Add
--output jsonsupport toprofile lsandconfig viewby @zzstoatzz in #20987 - Add composite index on
task_run(state_type, start_time)by @desertaxle in #20940 - Defer task worker import in CLI
taskcommand by @zzstoatzz in #20925 - Lazy-load top-level CLI command registration by @zzstoatzz in #20930
- Add centralized exit code hint registry by @desertaxle in #20959
- Add
PREFECT_CLIENT_SERVER_VERSION_CHECK_ENABLEDsetting by @devin-ai-integration[bot] in #20973 - Cache serialized context and env vars in
ProcessPoolTaskRunner.submit()by @devin-ai-integration[bot] in #20972
- Fix
postgres_listenerto preserve Kerberos/GSSAPI and TLS connection params by @devin-ai-integration[bot] in #20890 - Fix non-deterministic flow scanning in
prefect deployby @ashwanth0110 in #20874 - Remove Panel border from
work-pool createsample code output by @Br1an67 in #20906 - Fix broken link in
PrefectHTTPStatusErrormessage by @devin-ai-integration[bot] in #20938 - Prevent Rich console from word-wrapping CLI JSON output by @zzstoatzz in #20947
- Fix database reset failing on PostgreSQL with orphaned
state_idreferences by @devin-ai-integration[bot] in #20941 - Mark followers as seen and clean up lost follower Redis keys by @devin-ai-integration[bot] in #20955
- Fix expiration check on in-memory cache hits in
ResultStore._read/_areadby @devin-ai-integration[bot] in #20988
- Add clearer CLI benchmark regression gating feedback by @zzstoatzz in #20916
- Fix flaky test: mock
git_cloneinpip_install_reqstest by @devin-ai-integration[bot] in #20949 - Add apt retry configuration to Dockerfile to handle transient network errors by @devin-ai-integration[bot] in #20943
- Document prebuilt integration images and version pinning for workers by @rcash in #20893
- Improve MCP discoverability in existing docs IA by @gabcoyne in #20660
- Update rate limit docs to match unified limits by @zangell44 in #20927
- Add
pull_with_blockYAML example to Bitbucket integration docs by @toroleapinc in #20935 - Add missing
PREFECT_API_URLenv var in the self-hosted Docker Compose file by @Kiskadee-dev in #20897 - Add note about server default limit for client queries by @audreydng in #20909
- Document that deployment steps are just Python functions by @Sagargupta16 in #20956
- Minor cleanup from custom steps clarification by @zzstoatzz in #20963
3.6.20 - new cli, who dis?
Released on February 27, 2026 Enhancements ββ- Migrate CLI from
typertocyclopts, remove toggle and delegation machinery by @zzstoatzz in #20821 - Route
ProcessPoolTaskRunnersubprocess events and logs through a single parent queue, improving per-task performance by ~28% in log-heavy workloads by @desertaxle in #20864 - Add configurable subprocess message processors to
ProcessPoolTaskRunnerfor custom event/log handling in the parent forwarder by @desertaxle in #20869 - Use distinct FK scan for orphaned log/artifact vacuum queries, reducing cycle time from ~3.6s to ~0.5s on large databases by @zzstoatzz in #20868
- Avoid
Noneasset descriptions in events by @devin-ai-integration[bot] in #20840 - Lower default DB vacuum
batch_sizefrom 1000 to 200 to prevent query timeouts on Postgres by @zzstoatzz in #20857 - Fix subprocess events silently lost in
ProcessPoolTaskRunnerwhen task completes before async event forwarding by @devin-ai-integration[bot] in #20876 - Fix page header breadcrumb truncation for long entity names by @devin-ai-integration[bot] in #20870
- Add truncation to card breadcrumbs and locale format automation count by @devin-ai-integration[bot] in #20871
- Promote
_cyclopts/tosrc/prefect/cli/, removetyperdependency by @zzstoatzz in #20838 - Prevent
nvmfrom clobberingsetup-nodein pre-commit CI by @zzstoatzz in #20854 - Increase test timeout to fix flaky concurrency slot release test by @devin-ai-integration[bot] in #20843
- Replace inline SQLite compilation with pre-built Docker image for faster builds by @desertaxle in #20824
- Update rate limit docs for unified two-bucket system by @zangell44 in #20828
- Update docs logos and favicon by @znicholasbrown in #20858
3.6.19 - This release sucks in the best way possible
Released on February 24, 2026 This release introduces an optional database vacuum service that periodically deletes old flow runs and orphaned resources (logs, artifacts, artifact collections) to keep your database lean. Itβs disabled by default β enable it withPREFECT_SERVER_SERVICES_DB_VACUUM_ENABLED=true. Once enabled, it runs hourly and removes terminal top-level flow runs older than 90 days. Both the retention period and frequency are configurable via PREFECT_SERVER_SERVICES_DB_VACUUM_RETENTION_PERIOD (in seconds, minimum 1 hour) and PREFECT_SERVER_SERVICES_DB_VACUUM_LOOP_SECONDS.
Enhancements ββ
- Add DB vacuum service in Docket by @tom21100227 in #20746
- Add Docker images for
prefect-gcpandprefect-azureby @devin-ai-integration[bot] in #20771
- Add SSRF protection to
CustomWebhookNotificationBlockby @devin-ai-integration[bot] in #20781 - Fix scheduler to check per-schedule run counts for multi-schedule deployments by @devin-ai-integration[bot] in #20699
- Fix FastAPI 0.132.0 compatibility by @devin-ai-integration[bot] in #20822
- Add UI v2 unit tests and E2E tests to Devin flaky test workflow by @devin-ai-integration[bot] in #20774
- Migrate work-pool command to cyclopts by @zzstoatzz in #20766
- Migrate transfer command to cyclopts by @zzstoatzz in #20767
- Migrate cloud command to cyclopts by @zzstoatzz in #20780
- Migrate deploy command to cyclopts by @zzstoatzz in #20783
- Remove bogus alias from cyclopts deployment command by @zzstoatzz in #20793
- Add deploy to cyclopts routing and remove dead delegation code by @zzstoatzz in #20794
- Migrate automation command to cyclopts and register init at root level by @zzstoatzz in #20802
- Split database and orchestration tests into separate jobs by @desertaxle in #20803
- Clean up cyclopts phase 2 β server status, stdin handling, watch monkeypatch by @devin-ai-integration[bot] in #20807
- Add
ImportStringsection to form-building guide by @zzstoatzz in #20768 - Fix MDX rendering issues in prefect-databricks API reference docs by @desertaxle in #20792
3.6.18 - The annotation that minds its own business
Released on February 19, 2026 Enhancements ββ- Add
opaqueannotation to prevent recursive traversal of resolved task inputs by @devin-ai-integration[bot] in #20650 - Add
PREFECT_WORKER_DEBUG_MODEfor worker-only debug logging by @devin-ai-integration[bot] in #20653 - Support
DateTimeDeltaas interval option inIntervalScheduleby @devin-ai-integration[bot] in #20692
- Include duration fields in
TaskRunResponseby @vyagubov in #20664 - Skip lease renewal and release when no concurrency limits exist by @zzstoatzz in #20666
- Fix order-dependent slug collisions in deployment schedule
replaceshandling by @chrisguidry in #20669 - Strip null bytes from log messages before database insert by @Mr-Neutr0n in #20677
- Fix
uq_task_run__flow_run_id_task_key_dynamic_keyconstraint violation with multiple background workers by @devin-ai-integration[bot] in #20697 - Fix async listener for UNIX domain socket PostgreSQL connections by @devin-ai-integration[bot] in #20744
- Bump
pydocketminimum version to 0.17.7 by @devin-ai-integration[bot] in #20731
- Update YAML templates to conform with yamllint standards by @veeceey in #20594
- Migrate
server,worker,shellCLI commands to cyclopts by @zzstoatzz in #20603 - Add Claude Code
SessionStarthook to symlinkAGENTS.mdfiles toCLAUDE.mdfiles by @desertaxle in #20667 - Migrate
flowCLI command to cyclopts by @zzstoatzz in #20672 - Migrate
flow-runCLI command to cyclopts by @zzstoatzz in #20673 - Add regression gate to CLI startup benchmarks by @zzstoatzz in #20678
- Migrate
deploymentCLI command to cyclopts by @zzstoatzz in #20721 - Migrate
dashboard,task,sdkCLI commands to cyclopts by @zzstoatzz in #20723 - Migrate
concurrency-limit,events,experimentalCLI commands to cyclopts by @zzstoatzz in #20724 - Migrate
variable,artifact,task-run,apiCLI commands to cyclopts by @zzstoatzz in #20740 - Migrate
dev,global-concurrency-limitCLI commands to cyclopts by @zzstoatzz in #20745 - Migrate
blockCLI command to cyclopts and add command aliases by @zzstoatzz in #20749 - Migrate
work-queueCLI command to cyclopts by @zzstoatzz in #20763
- Add comprehensive base job template examples for Kubernetes by @kingsley-123 in #20670
- Set up automatic API reference docs via mdxify for all integration packages by @devin-ai-integration[bot] in #20679, #20704β#20720
- Exclude
analyticsmodule from API reference docs by @devin-ai-integration[bot] in #20722 - Add documentation for logging inside hooks by @pblocz in #20734
- Clarify that primitive
wait_for_inputtypes generate avaluefield for programmatic resume by @desertaxle in #20741
3.6.17 - Goodbye, Ghost in the WebSocket
Released on February 12, 2026 New Features π- Add
prefect server statuscommand by @devin-ai-integration[bot] in #20619
- Make
PrefectFutureList.result()fail-fast usingas_completedby @desertaxle in #20592 - Improve CLI connection message for self-hosted server by @Kulkarnivaishnavi473 in #20623
- Add
replacesfield for renaming schedule slugs by @desertaxle in #20460 - Add attribution headers to SDK API requests by @zangell44 in #20508
- Fix flow timeout not retrying when retries are enabled by @devin-ai-integration[bot] in #20572
- Fix the flow run graph being hidden when a flow run is in
AwaitingRetrystate by @vyagubov in #20318 - Fix websocket timeout when watching long-running flow runs by @devin-ai-integration[bot] in #20590
- Handle missing resources gracefully in
prefect transferautomations by @devin-ai-integration[bot] in #20639 - Fix
prefect deploystripping{{ ctx.flow.* }}templates from job variables by @desertaxle in #20611 - Add
ResumeFlowRunaction to automation events by @lordsoffallen in #20604 - Fix
print_as_logso log formatters report the callerβs location by @devin-ai-integration[bot] in #20618
- Deflake lease renewal failure tests: revoke via API to avoid FS race by @devin-ai-integration[bot] in #20576
- Fix flaky
test_error_handling_on_cache_policiesby increasing random range by @devin-ai-integration[bot] in #20566 - Fix flaky
test_docker_deploy: add retry logic for transient Docker registry errors by @devin-ai-integration[bot] in #20580 - Add cyclopts CLI migration infrastructure by @zzstoatzz in #20584
- Migrate
config,profile,versionto cyclopts (wave 1) by @zzstoatzz in #20585 - Add
CycloptsCliRunnerfor in-process CLI testing by @zzstoatzz in #20609 - Fix flaky threaded client lifespan test by using thread-safe counters by @devin-ai-integration[bot] in #20616
- Fix potential script injection in Docker build workflows by @RinZ27 in #20593
- Fix flaky concurrency timeout tests by @devin-ai-integration[bot] in #20568
- Add CLI subdirectories to
EXCLUDE_FROM_CLEAR_DB_AUTO_MARKby @devin-ai-integration[bot] in #20578 - Replace
UI_COMPONENTS_CONTENTS_PRS_RWwithGITHUB_TOKENin nightly release workflow by @jamiezieziula in #20602 - Use PAT token for nightly release workflow by @jamiezieziula in #20627
- Increase SQLite
busy_timeoutfor better test concurrency by @devin-ai-integration[bot] in #20553
- Update manage workspace instructions by @rcash in #20569
- Add testing with
caplogexample by @rcash in #20570 - Remove deprecated GitHub Action reference by @seanpwlms in #20610
- Add
docs/AGENTS.mdandwrite-docsskill for AI agent guidance by @desertaxle in #20606 - Fix inconsistent deployment concurrency limit documentation by @devin-ai-integration[bot] in #20622
- Fix incorrect
concurrency_optionskey in debouncing guide by @desertaxle in #20633 - Add Telegram notification example by @Rodrigorm33 in #20385
- Fix MDX OpenAPI frontmatter to match
schema.jsonpaths by @devin-ai-integration[bot] in #20620
- Add
include_filessupport to@ecsdecorator for bundling non-Python files by @desertaxle in #20551
3.6.16 - Itβs Bulking Season
Released on February 05, 2026 New Features π- Add
prefect cloud assetlist and delete commands by @zzstoatzz in #20524 - Add bulk operation endpoints for flow runs, deployments, and flows by @bunchesofdonald in #20469
- Add SDK instrumentation module by @desertaxle in #20438
- Allow infra name templating with
flowandflow_runby @Rodrigorm33 in #20358 - Add
max_scheduled_runs,parameters, andslugfields to deployment schedule methods by @devin-ai-integration[bot] in #20556
- Fix
visit_collectionto handleNamedTuples by @chuqCTC in #20517 - Use count endpoint for deployments page empty state check by @zzstoatzz in #20404
- Handle non-serializable objects in
JsonFormatterfor logging by @devin-ai-integration[bot] in #20482 - Fix env var template resolution in
deploy --allconsole output by @devin-ai-integration[bot] in #20511 - Resolve circular import when plugins import from
prefectby @desertaxle in #20514 - Fix stale
TaskRunContextleaking into Pending event related resources by @bunchesofdonald in #20536
- Remove old admin routes by @desertaxle in #20515
- Untrack analytics config file to fix build versioning by @devin-ai-integration[bot] in #20483
- Add regression test for fan-out sibling asset dependency isolation by @chrisguidry in #20478
- Fix flaky test: add thread completion check and increase timeout by @devin-ai-integration[bot] in #20505
- Use unique block type slugs in tests to prevent parallel test conflicts by @devin-ai-integration[bot] in #20496
- Exclude 10 test modules from
clear_dbauto-mark by @devin-ai-integration[bot] in #20487 - Add more test modules to
EXCLUDE_FROM_CLEAR_DB_AUTO_MARKby @devin-ai-integration[bot] in #20490 - Add DB-LIGHT test modules to
clear_dbexclusion list by @devin-ai-integration[bot] in #20491 - Add
test_flow_runs.pyandtelemetry/toclear_dbexclusion list by @devin-ai-integration[bot] in #20492 - Add
input/,deployment/,experimental/toclear_dbexclusion list by @devin-ai-integration[bot] in #20493 - Add
tests/resultstoclear_dbexclusion list by @devin-ai-integration[bot] in #20495 - Add 5 test modules to
EXCLUDE_FROM_CLEAR_DB_AUTO_MARKby @devin-ai-integration[bot] in #20504 - Add
tests/events/clienttoclear_dbexclusion list by @devin-ai-integration[bot] in #20506 - Add
tests/infrastructuretoclear_dbexclusion list by @devin-ai-integration[bot] in #20507 - Add
tests/blocks/toEXCLUDE_FROM_CLEAR_DB_AUTO_MARKby @devin-ai-integration[bot] in #20512 - Add
tests/test_task_runners.pyandtests/test_variables.pytoclear_dbexclusion list by @devin-ai-integration[bot] in #20530 - Add
tests/test_futures.pyandtests/test_logging.pytoclear_dbexclusion list by @devin-ai-integration[bot] in #20531 - Add UUID-based randomization to top-level test files by @devin-ai-integration[bot] in #20539
- Add UUID-based randomization to CLI Cloud test files by @devin-ai-integration[bot] in #20546
- Add UUID-based randomization to CLI Deploy test files by @devin-ai-integration[bot] in #20552
- Add UUID-based randomization to CLI transfer test files by @devin-ai-integration[bot] in #20563
- Add Claude Code marketplace install instructions to MCP docs by @devin-ai-integration[bot] in #20545
3.6.15 - Simply Authful
Released on January 30, 2026 Bug Fixes π- Fix
PrefectCloudEventsClientauth handshake breaking Cloud connections by @desertaxle in #20472 - Cap concurrency limit
retry-afterto prevent excessive delays from burst traffic by @bunchesofdonald in #20470
3.6.14 - A Prefect Server for Every ::1
Released on January 29, 2026 Enhancements ββ- Support parsing TOML 1.0 on Python 3.11+ by @zed in #20398
- Make runner cancellation observing critical to runner health by @joshuastagner in #20219
- Reload root settings after running plugins to enable environment variable updates to take effect by @desertaxle in #20393
- Support IPv6 addresses in
prefect server startby @zzstoatzz in #20361 - Add authentication to
/api/events/inWebSocket endpoint by @devin-ai-integration[bot] in #20372
- Add polling fallback in
PrefectFlowRunFuture.wait_asyncby @devin-ai-integration[bot] in #20406 - Fix race condition in ephemeral consumer group cleanup by @devin-ai-integration[bot] in #20435
- Fix flow runs with parameter validation failures missing
end_timeby @devin-ai-integration[bot] in #20369 - Fix
flow_run.idreturning string"None"instead ofNoneby @bnaul in #20425
- Bump
pydocketminimum version to 0.17.2 by @chrisguidry in #20405
- Replace
skipif(sys.platform != 'win32')with@pytest.mark.windowsand removeskipif(sys.platform == 'win32')by @devin-ai-integration[bot] in #20327 - Fix flaky test: use
pytest.approxfordate_diff_secondstiming assertions by @devin-ai-integration[bot] in #20354 - Migrate
deployments/runner.pyfrom@sync_compatibleto@async_dispatchby @zzstoatzz in #20359 - Fix flaky
test_timeout_concurrency_slot_releasedtests by @devin-ai-integration[bot] in #20364 - Migrate
Task.serve()from@sync_compatibleto@async_dispatchby @zzstoatzz in #20374 - Migrate
Flow.deploy()from@sync_compatibleto@async_dispatchby @zzstoatzz in #20380 - Migrate
Runnermethods from@sync_compatibleto@async_dispatchby @zzstoatzz in #20382 - Fix flaky docket task keys tests: use custom lifespan without worker by @devin-ai-integration[bot] in #20408
- Fix flaky test: use
TestClientas context manager for proper lifespan cleanup by @devin-ai-integration[bot] in #20426 - Add CLI benchmark harness as external dependency by @zzstoatzz in #20439
- Add in-repo CLI benchmark workflow by @zzstoatzz in #20451
- Add accordion for logging pydantic-ai tool calls to Prefect by @zzstoatzz in #20410
- Expand task invocation methods documentation by @devin-ai-integration[bot] in #20403
- Add Docket URL configuration for HA background services by @devin-ai-integration[bot] in #20422
- Add Bluesky link to README by @zzstoatzz in #20413
3.6.13 - The heartbeat is coming from inside the engine
Released on January 23, 2026 Enhancements ββ- Add
FlowRunFilterCreatedByby @zzstoatzz in #20256 - Add retry logic for
PrefectEventsClient.__aenter__()initial connection by @devin-ai-integration[bot] in #20328
- Move flow run heartbeat event emission to flow run engine by @zzstoatzz in #19641
- Fix websocket cleanup
AttributeErrorin event clients by @devin-ai-integration[bot] in #20323 - Add warning when sync task with timeout runs in worker thread by @desertaxle in #20315
- Prevent GitHub token leakage in git error messages by @Rodrigorm33 in #20330
- Consolidate
strip_auth_from_urlintoprefect._internal.urlsby @zzstoatzz in #20331 - Fix git URL comparison when credentials are embedded in URL by @zzstoatzz in #20346
- Fix
slot_decay_per_secondNonevalue causing 422 error inupsert_global_concurrency_limit_by_nameby @devin-ai-integration[bot] in #20320 - Fix Windows-specific process termination bug in
hosted_api_serverfixture by @devin-ai-integration[bot] in #20322
- Fix flaky docket task keys tests: include running tasks in key assertions by @devin-ai-integration[bot] in #20293
- Pin miniconda3 image to fix conda Docker build failure by @desertaxle in #20309
- Bump dependencies in lockfile by @zzstoatzz in #20205
- Push dev images to main repository with dev tags by @mitchnielsen in #20311
- Fix flaky test cleanup: use
ignore_errorsinrmtreefor SQLite race condition by @devin-ai-integration[bot] in #20326 - Fix release workflows not triggering on prereleases by @mitchnielsen in #20332
- Fix conda Docker build by installing git from Trixie on Bookworm by @desertaxle in #20345
- Fix flaky test: add
sys.pathisolation fixture for importtools tests by @devin-ai-integration[bot] in #20347 - Migrate
task_worker.pyfrom@sync_compatibleto@async_dispatchby @zzstoatzz in #20259 - Migrate testing fixtures from
@sync_compatibleto@async_dispatchby @zzstoatzz in #20313 - Migrate
ResultStorefrom@sync_compatibleto@async_dispatchby @zzstoatzz in #20314 - Migrate
Flow.visualizefrom@sync_compatibleto@async_dispatchby @zzstoatzz in #20353
- Update job variables page title to cover flow runs by @devin-ai-integration[bot] in #20351
3.6.12 - Itβs not a feature, itβs a bug!
Released on January 20, 2026 Enhancements ββ- Add httpx.ConnectError to client retry exceptions by @joshuastagner in #20276
- Add build=False documentation to flow.deploy guide by @devin-ai-integration[bot] in #20269
- fix: display error details nicely in
work-pool createcommand by @devin-ai-integration[bot] in #20277 - fix: remove CANCELLED from EnforceCancellingToCancelledTransition to allow retrying cancelled flows by @zzstoatzz in #20275
- Add retry logic to
PrefectEventSubscriber.__aenter__()for initial connections by @devin-ai-integration[bot] in #20295 - fix: convert dynamic_key to str in sync clientβs create_task_run by @zzstoatzz in #20302
- Fix wait() timeout not being respected when using WatcherThreadCancelScope by @devin-ai-integration[bot] in #20257
- migrate RemoteFileSystem and SMB from @sync_compatible to @async_dispatch by @zzstoatzz in #20230
- Migrate notification blocks from @sync_compatible to @async_dispatch by @zzstoatzz in #20258
- Fix Devin flaky tests workflow API integration by @desertaxle in #20272
- Add GitHub Actions workflow to trigger Devin.ai on test failures by @desertaxle in #20255
- Add release notes for integration packages by @desertaxle in #20266
3.6.11 - Itβs my generation, baby
Released on January 15, 2026 This release introducesprefect sdk generate a new CLI command that generates fully-typed, custom Python SDKs from the deployments in your workspace or self-hosted server, making it easy to trigger your deployments from other workflows with confidence.
To see how it works, check out the Prefect docs. This functionality is currently in beta, so try it out and open a GitHub issue if you have feedback!
New Features π
- Add
prefect sdk generateCLI command for generating custom deployment SDKs from existing deployments by @desertaxle in #20150, #20158, #20167, #20172, #20173
- Add JSON output to
prefect variable lsCLI command by @xeniumcode in #20192 - Add JSON output to
prefect global-concurrency-limit lsCLI command by @xeniumcode in #20194 - Add JSON output to
prefect artifactCLI commands by @xeniumcode in #20193 - Add JSON output to
prefect block lsCLI command by @xeniumcode in #20195 - Add JSON output to
prefect block type lsCLI command by @xeniumcode in #20196 - Add JSON output to
prefect deployment scheduleCLI commands by @xeniumcode in #20197 - Add JSON output to
prefect deploymentCLI commands by @xeniumcode in #20198 - Migrate
pause,suspend,resume, andrun_inputfrom@sync_compatibleto@async_dispatchby @devin-ai-integration[bot] in #20178 - Add
forceparameter toChangeFlowRunStateandflow_run_idJinja filter by @zzstoatzz in #20112 - Link
automation.action.*events toautomation.triggeredevent by @chrisguidry in #20227 - Add
DISABLEDto clientDeploymentStatusenum for Cloud compatibility by @chrisguidry in #20244
- Fix flow run cancellation handling bugs by @joshuastagner in #20143
- Fix race condition in filesystem lease storage with atomic writes by @devin-ai-integration[bot] in #20153
- Add task keys to docket calls in API handlers to prevent duplicate execution by @desertaxle in #20210
- Support ISO 8601 duration strings for interval schedules in
prefect.yamlby @zzstoatzz in #20238 - Disable Docket result storage to prevent memory bloat by @desertaxle in #20253
- Preserve the
updatedcolumn value of deployments when marking them as ready by @vkrot-innio in #19936
- Add
arun_deploymentand replace@sync_compatiblewith@async_dispatchby @desertaxle in #20160 - Patch correct method in
test_concurrency_respects_timeoutby @devin-ai-integration[bot] in #20185 - Fix flaky test by reducing
slot_decay_per_secondto prevent race condition by @devin-ai-integration[bot] in #20208 - Remove incorrect docstrings from CLI ls commands by @zzstoatzz in #20206
- Add Claude command frontmatter by @zzstoatzz in #20224
- Enable multi-checker type safety tests with mypy, pyright, and ty by @zzstoatzz in #20159
- Migrate
concurrency/v1from@sync_compatibleto@async_dispatchby @zzstoatzz in #20225 - Migrate
blocks/core.pyfrom@sync_compatibleto@async_dispatchby @devin-ai-integration[bot] in #20226 - Stale item cleanup enhancements by @bdalpe in #20145
- Add plan label to exclude from release notes by @zzstoatzz in #20182
- Auto-label PRs that touch
plans/directory by @zzstoatzz in #20183 - Disable migrations and block registration for multi-worker test by @devin-ai-integration[bot] in #20179
- Fix plan label to only apply when all changed files are in
plans/by @desertaxle in #20207
- Add ECS base job template customization guide by @zzstoatzz in #20249
- Fix MDX parsing error in events CLI documentation by @desertaxle in #20252
- Add documentation for
prefect sdk generateCLI by @desertaxle in #20241
3.6.10 - Five Bugs Walked Into A Bar And None Of Them Left
Released on January 08, 2026 Enhancements ββ- Add
prefect automation updateCLI command by @devin-ai-integration[bot] in #20118 - Add upserting global concurrency limit decay by @cbrown1234 in #20124
- Fix
AttributeErrorinConsumer.cleanup()for non-memory brokers by @devin-ai-integration[bot] in #20089 - Fix
exception_to_crashed_state_syncfailing without async backend by @zzstoatzz in #20139 - Fix
MockValSerserialization error withStateDetailsby @zzstoatzz in #20127 - Resolve race condition in compound trigger evaluation by @desertaxle in #20106
- Fix
AttributeErrorforfunctools.partialhooks inRunnerby @devin-ai-integration[bot] in #20136
- Add
UISettingsmodel for/ui-settingsendpoint by @desertaxle in #20103 - Fix flaky
test_concurrency_respects_timeouttest by @devin-ai-integration[bot] in #20138 - Update
@prefecthq/prefect-ui-libraryto version 3.14.8 by @marvin-robot in #20147 - Run integration tests against PostgreSQL to prevent CI timeouts by @devin-ai-integration[bot] in #20080
- Use correct apt version syntax for git in Dockerfile by @devin-ai-integration[bot] in #20094
- Link to MCP server security FAQ by @zzstoatzz in #20120
- Fix broken ECS worker deployment guide links by @devin-ai-integration[bot] in #20119
- Clarify that base job template variables must be referenced in
job_configurationby @zzstoatzz in #20133
3.6.9 - Auld Lang Sync
Released on December 31, 2025 New Features π- Add worker-side cancellation for pending flow runs by @joshuastagner in #20022
- Add JSON schema for
prefect.yamlfiles by @zzstoatzz in #19996 - Send entrypoint pip install errors to Prefect logs by @jakekaplan in #20058
- Run read and count queries concurrently in paginate endpoints by @zzstoatzz in #20049
- Preserve symlinks in
get_directoryinstead of following them by @majiayu000 in #19993 - Fix
GitRepositoryname parameter preservation in pull step conversion by @devin-ai-integration[bot] in #20004 - Add explicit
ruamel.yaml.clibdependency to fix Docker builds by @zzstoatzz in #20068
- Update
@prefecthq/prefect-ui-libraryto version 3.14.5 by @marvin-robot in #20003 - Add GitHub Actions workflow for UI v2 E2E tests by @devin-ai-integration[bot] in #20042
3.6.8 - On Exception! On Timeout! On Error and Failure! π¦
Released on December 24, 2025 New Features π- Add
prefect flow-run retrycommand by @desertaxle in #19858
- Add
urlproperty to server-sideReceivedEventfor automation templates by @devin-ai-integration[bot] in #19851
- Add timeout to Docket worker shutdown by @desertaxle in #19940
- Prevent dictionary mutation during iteration in
preprocess_schemaby @zzstoatzz in #19946 - Allow string
form_datainCustomWebhookNotificationBlockby @zzstoatzz in #19953 - Bump
pydocketversion and remove background worker shutdown timeout by @desertaxle in #19969 - Fix
TASK_SOURCEcache policy for remote execution withcloudpickleby @desertaxle in #19926
- Run lint, build, and test in parallel for ui-v2 checks by @devin-ai-integration[bot] in #19884
- Fix docker deploy integration test failing due to uv import by @desertaxle in #19899
- Update kickoff-release schedule from Monday to Thursday by @devin-ai-integration[bot] in #19930
- Add security considerations to Prefect MCP server guide by @zzstoatzz in #19875
- Document AWS IAM role assumption by @seanpwlms in #19963
3.6.7 - LoopService #OpenToWork: 3+ Years Experience Looping
Released on December 18, 2025 Enhancements ββ- Add support for AWS IAM authentication for PostgreSQL database by @alaminopu in #19580
- Add generic typing support for
Variable.getmethod by @devin-ai-integration[bot] in #19764 - Convert
late_runsservice to Docket perpetual function by @zzstoatzz in #19722 - Convert
repossessorservice to Docket perpetual function by @zzstoatzz in #19739 - Convert
foremanservice to Docket perpetual function by @zzstoatzz in #19741 - Convert
telemetryservice to Docket perpetual function by @zzstoatzz in #19754 - Convert scheduler and proactive triggers to Docket, remove
LoopServiceby @zzstoatzz in #19756
- Update broken links in creating-automations docs by @devin-ai-integration[bot] in #19759
- Silence retryable SQLite lock errors from
docket.workerlogger by @devin-ai-integration[bot] in #19772 - Exclude unset
grace_period_secondsfrom deploymentconcurrency_optionsby @zzstoatzz in #19784 - Correct
docket_urlsetting path toserver.docket.urlby @zzstoatzz in #19791 - Fix Mattermost bot name issue by @tre-ert in #19780
- Restore netloc-based credential formatting for YAML deployments by @zzstoatzz in #19873
- Add @chrisguidry as a CODEOWNER by @zzstoatzz in #19738
- Add negative matching documentation for automation triggers by @chrisguidry in #19760
3.6.6 - The Eternal Docket of the Spotless Server
Released on December 08, 2025 Enhancements ββ- Add client-side configuration for deployment concurrency grace period by @devin-ai-integration[bot] in #19489
- Add PostgreSQL
search_pathsupport via settings by @devin-ai-integration[bot] in #19620 - Add memory safeguards to event persister service by @desertaxle in #19651
- Add perpetual services infrastructure and convert
cancellation_cleanupto perpetual Docket task by @zzstoatzz in #19715 - Convert
pause_expirationsservice to perpetual Docket task by @zzstoatzz in #19719
- Prevent uvloop from setting global event loop policy in healthcheck by @zzstoatzz in #19660
- Clarify
result_storageusage with@taskand@flowdecorators by @devin-ai-integration[bot] in #19671 - Exclude
DEFAULTcache policy from triggering automaticpersist_resultby @devin-ai-integration[bot] in #19673 - Remove return type annotation from settings serializer to fix OpenAPI schema by @zzstoatzz in #19616
- Use
history_interval_secondsas parameter name in OpenAPI schema by @desertaxle in #19659
- Turn off dependabot for Vue UI package updates by @desertaxle in #19636
- Add weekly release kickoff workflow by @desertaxle in #19661
- Migrate
prefect.input.actionsfromsync_compatibletoasync_dispatchby @zzstoatzz in #19632 - Remove auto-generate docs workflow by @desertaxle in #19665
- Fix incorrect Dockerfile example in βDeploy via Pythonβ guide by @desertaxle in #19653
3.6.5 - Batch Me If You Can
Released on December 04, 2025 Enhancements ββ- Raise if event is too big by @jakekaplan in #19531
- Support
Pathobjects inresult_storageparameter by @zzstoatzz in #19533 - Hide βJoin the Communityβ in air-gapped deployments by @zzstoatzz in #19540
- Parametrize
xreadgroupbatch size in consumer and addEventPersisterservice setting by @saschwartz in #19545 - Parametrize
xautoclaimbatch size by @saschwartz in #19557 - Parametrize
TaskRunRecorderandTriggerservice message read batch size by @saschwartz in #19559 - Add Slack GovCloud (slack-gov.com) webhook support to
SlackWebhookblock by @devin-ai-integration[bot] in #19565 - Support dot-delimited syntax for
job_variablesin workers by @devin-ai-integration[bot] in #19619 - Add client-side caching for concurrency limits by @devin-ai-integration[bot] in #19625
- Support
username:passwordauth for self-hosted BitBucket instances by @zzstoatzz in #19516 - Optimize
/api/task_runs/countendpoint performance by @naaa760 in #19548 - Fix docker compose file in self hosted docs by @rodeyfeld in #19551
- Fix performance issues with sync tasks on Windows by @desertaxle in #19595
- Fix dead thread hang by @zzstoatzz in #19601
- Allow Jinja templates in trigger enabled field during YAML loading by @zzstoatzz in #19610
- Fix compatibility with
fastapi==0.123.7by @desertaxle in #19626 - Allow EC2 task definitions to omit
launchTypefor capacity providers by @zzstoatzz in #19630
- Update sucrase to remove vulnerable glob dependency by @zzstoatzz in #19599
- Add timeout to worker teardown to prevent test flakes by @zzstoatzz in #19465
- Update CODEOWNERS by @desertaxle in #19578
- Pin
pytest-asyncioto fix 3.10 client tests by @desertaxle in #19609 - Fix flakes in
TestReadTaskRunCountsByState::test_returns_all_state_typesby @desertaxle in #19612
- Add per-worker task concurrency example by @zzstoatzz in #19541
- Improve database maintenance documentation and examples by @zzstoatzz in #19604
- Fix YAML key for Bitbucket repository by @desertaxle in #19607
- Add Google Tag Manager integration to docs by @zzstoatzz in #19629
3.6.4 - No Deployment Left Unparametrized
Released on November 21, 2025 Bug Fixes π- fix: preserve event template parameters in deployment triggers by @zzstoatzz in #19504
- Fix truncating log behavior by @jakekaplan in #19496
- Chore: Bump ui library by @znicholasbrown in #19492
- docs: Add migration note about unmapped mutable objects by @zzstoatzz in #19494
3.6.3 - Thatβs JSON Bourne
Released on November 19, 2025 Enhancements ββ- Add
-o jsonoutput option toprefect flow-run lscommand by @devin-ai-integration[bot] in #19484 - fix: allow pause_flow_run() to pause parent flow when called from task by @zzstoatzz in #19457
- Use acquisition service pattern for lease-based concurrency slots by @bunchesofdonald in #19451
- fix: respect subflow attributes (log_prints, result_storage) when running inside task by @zzstoatzz in #19450
- fix: defer forward reference resolution in ValidatedFunction by @zzstoatzz in #19452
- fix: validate deployment triggers after templating so jinja-based booleans work, should close #19348 by @iclectic in #19414
- fix: show detailed validation errors for top-level prefect.yaml fields by @zzstoatzz in #19468
- Clamp denied_slots decay rate to match retry-after calculation by @bunchesofdonald in #19466
- Fix: Enable parameter type checking for @task decorator by @zzstoatzz in #19459
- add βbuild-arg to dev build-image command to allow direct passing ofβ¦ by @conrade-ctc in #19473
- Add database cleanup example with human/AI approval by @zzstoatzz in #19456
3.6.2 - The Missing Link
Released on November 13, 2025 Enhancements β- Add causal link from automation action events to triggering events by @zzstoatzz in #19426
- cap retry-after for concurrency limits to prevent excessive delays by @zzstoatzz in #19428
- accept numeric values for PREFECT_API_SERVICES_LATE_RUNS_AFTER_SECONDS by @zzstoatzz in #19434
- add work_queue_id to DeploymentResponse by @zzstoatzz in #19417
- correct GitHub Actions conditional syntax in integration release workflow by @zzstoatzz in #19439
3.6.1 - Pop, Lock it, Docket
Released on November 10, 2025 Enhancements β- Add logfire sampling configuration and fix boolean env var handling by @zzstoatzz in #19383
- Fix interactive deploy CLI selecting wrong flow when opting out by @zzstoatzz in #19392
- Fix deployment.parameters in nested flows using ContextVars by @zzstoatzz in #19366
- Upgrade pydocket to stable 0.13.0 release by @zzstoatzz in #19401
- Add client methods for querying events via REST API by @zzstoatzz in #19382
3.6.0 - Throw it on the docket and weβll get to it in a jiffy
This release addspydocket, a background task system, to replace FastAPIβs background_tasks. Background tasks now include automatic retries and can optionally use Redis as a backing layer for enhanced durable execution.
Released on November 07, 2025
Enhancements ββ
- Replace FastAPI
background_taskusage withpydocketby @desertaxle in #19377 - Emit events for deployment pull step execution by @zzstoatzz in #19339
- Fix import order dependency and circular import issues by @zzstoatzz in #19344
- Fix
deployment.parametersin subprocess flows by @zzstoatzz in #19331 - Fix misleading
pyrighterror when calling async task with wrong argument types by @zzstoatzz in #19327 - Fix
EventsWorkersingleton leak inprefect_test_harnessby @zzstoatzz in #19343 - Fix
run_deploymentexecution graph display when called from tasks by @desertaxle in #19361 - Fix automation deletion deadlock by enforcing consistent lock ordering by @zzstoatzz in #19369
- Update
prefect-ui-libraryto latest version by @znicholasbrown in #19350
- Remove legacy settings imports from CLI by @desertaxle in #19353
- Clean up root directory by @zzstoatzz in #19355
- Replace Optional with pipe syntax in _trim_traceback function by @devin-ai-integration[bot] in #19358
- Auto-close superseded documentation PRs by @zzstoatzz in #19357
- Add @chrisguidry as a CODEOWNER by @desertaxle in #19368
- Sync UI v2 OpenAPI schema with node v20.19.0 by @zzstoatzz in #19373
- Migrate
RedisStorageContainerfromsync_compatibletoasync_dispatchby @devin-ai-integration[bot] in #19363
- Add Pulumi section to Infrastructure as Code documentation by @bdalpe in #19352
- Fix link in ECS worker docs by @mattiamatrix in #19364