Prefect 3.8: the redesigned UI ships by default
The redesigned UI is now the default for self-hosted servers, with quicker run navigation, clickable log links, and a round of reliability fixes.
New in Prefect: features, improvements, and fixes. For the complete record of every open source release, see the release notes.
The redesigned UI is now the default for self-hosted servers, with quicker run navigation, clickable log links, and a round of reliability fixes.
A patch release focused on reliability at the edges: RRULE schedule anchors, the event recorder under load, and clearer worker auth errors.
The releases between 3.7.0 and 3.7.8 built a real-time channel between the server and workers, made the scheduler noticeably faster, and started emitting lifecycle events for every object.
Two of our most-requested experimental surfaces graduate to general availability, flows can render their own dependency graphs, and prepared workspaces now run with uv.
The releases across early 2026 leaned into the command line and day-to-day operations: SDK generation, a server status command, watching runs from the terminal, and richer run telemetry.
Replace @task with @materialize and Prefect tracks the tables, models, and files your workflows produce, and how they all connect.
The redesigned UI is the default for self-hosted servers. Run Prefect yourself and you now get the V2 interface out of the box, with no opt-in required. (#22519)
Also in this release:
The full release notes cover every change, including bug fixes.
RRULE anchors were computed in UTC but interpreted as local time, which could shift recurring runs by your UTC offset.#22456TaskRunRecorder keeps its periodic flush alive when events are dropped, so a burst no longer stalls recording.#22441git pull in runner storage no longer hits a permission error.#22447Upgrade with pip install -U prefect, or see the full release notes for everything in 3.7.
The release notes cover every 3.7 release in full.
Infrastructure decorators are generally available. Declare where a flow runs next to the flow itself, no separate deployment configuration required. (#21784)
The plugin system is generally available. Extend Prefect with your own integrations using the same mechanism our official ones use. (#21787)
Also in this release:
flow.generate_mermaid_graph() renders a flow's dependency graph with no extra dependencies, and the UI now renders Mermaid diagrams inside Markdown blocks.#21786#21793ThreadPoolTaskRunner submissions would deadlock.The full release notes cover every change, including bug fixes.
prefect sdk generate builds a typed client for an existing deployment, so callers get autocomplete and validation.#20150prefect server status checks a self-hosted server's health from the command line.#20619prefect flow-run watch follows any flow run until it reaches a terminal state.#21260with_context() propagates Prefect's run context into processes you spawn yourself.#21304prefect cloud asset lists and deletes assets.#20524Submitting and InfrastructurePending, so you can watch a run come up.#20964The release notes cover every 3.6 release in full.
When a dashboard throws garbage numbers at quarter-end, someone has to follow the breadcrumbs back through tasks, tables, and stray CSVs. That is asset lineage in the real world, and Prefect now tracks it without asking you to contort your workflow around asset definitions. Tell Prefect what a function produces:
@materialize("s3://bucket/important-data.csv")
def write_data():
# writes s3://bucket/important-data.csv
...Prefect builds the lineage graph from there: what each workflow produces, when it last ran, and how your outputs depend on each other.
Read the announcement post for the full story, or start with the assets documentation.