In Dagster+, dynamic partitions can now be wiped and deleted in a single action, clearing the asset's degraded health status. Multi-partitioned assets are not yet supported.
Alert policies can now notify on successful code location deploys.
[ui] Filter inputs now show your recent searches in the autocomplete dropdown before you start typing.
[ui] Refreshed the Dagster and Dagster+ logos and favicons to the new branding.
[ui] Updated the Google kind tag icons. (Thanks, @dragos-pop!)
[ui] Fixed an issue where the sensor dry run "Apply requests & commit tick result" action could launch runs even when creating or deleting dynamic partitions failed due to insufficient permissions.
Assets whose failed partitions are all awaiting an automatic retry now report a warning health status instead of degraded. The asset health popover and alert notifications indicate that a retry is pending.
[dagster-snowflake] SnowflakeDbtProjectComponent now supports configuring defs_state, so Dagster+ deployments can opt into versioned state storage.
Fixed an issue where a config field typed as a discriminated union with a default value ignored that default.
[dagster-snowflake] Fixed an issue where the SnowflakeDbtProjectComponent observation sensor could report Dagster-triggered dbt runs as externally triggered.
[dagster-snowflake] Fixed an issue where SnowflakeDbtProjectComponent raised an error when dbt built models outside the selected subset of assets.
[ui] The asset graph sidebar's search now matches only assets shown in the sidebar, matches on the full asset key as well as the displayed name, lists results alphabetically, and shows the namespace for results whose name is ambiguous.
[ui] Added a "Copy asset key" item to the asset node context menu.
[ui] Added a SLURM kind tag icon. (Thanks, @geoHeil!)
[dg] Fixed an issue where a Hybrid deployment running on Kubernetes could be misidentified as Serverless, causing PEX-configured builds to be packaged as Docker images.
[dg] Relaxed the tomlkit version constraint to allow newer releases. (Thanks, @geoHeil!)
[ui] Fixed the asset graph sidebar to sort assets by their displayed name rather than their full asset key.
[ui] Fixed an issue where text in the search UI was truncated earlier than necessary.
[dagster-cloud] The Kubernetes agent now degrades gracefully when its service account is not permitted to manage ConfigMaps, launching code servers without fast in-place reload rather than failing to deploy the code location. Granting the agent's Role permissions on configmaps, which the latest agent Helm chart includes, restores fast reloads.
[dagster-spark] Fixed a command injection issue in spark_resource and create_spark_op: spark-submit is now invoked directly instead of through a shell, so shell metacharacters in application_arguments are no longer interpreted. Multiple and quoted arguments continue to work.
[dagster-tableau] Fixed an issue where empty workbooks could cause code location loads to fail.
Declarative Automation can now automate jobs, available as a preview feature. Pass an automation_condition to define_asset_job — wrapping an asset-level condition with AutomationCondition.any_job_root_assets_match or AutomationCondition.all_job_root_assets_match — to launch a single run of the job when the condition becomes true. Evaluation history is viewable in the new Automation tab on job pages.
[ui] The Components tab for a code location now lists all component instances in the location, not just app-managed ones.
[dagster-airbyte] Fixed a bug where Airbyte API requests were not retried on transient failures, causing syncs to fail after a single transient error despite the request_max_retries setting. (Thanks, @MercureTony!)
Clarified the distinction between definition-time and runtime metadata, and documented how to access asset definition metadata from a custom I/O manager.
Documented the available configuration options for the Soda integration.
Fixed an issue where a fresh installation of dagster could resolve an incompatible version of grpcio-health-checking, breaking code server imports due to a protobuf version conflict.
[ui] Fixed an error that occurred when viewing tick details for declarative automation runs.
[ui] Improved the performance of the runs feed for runs that target large numbers of assets and asset checks. The feed now fetches a bounded preview of the selection and loads the full lists on demand.
[dagster-aws] Added a dashboard_refresh_interval parameter to PipesEMRServerlessClient and increased its default so that Spark UI URLs are no longer invalidated prematurely during a run. (Thanks, @noy-solvin!)
Fixed a bug where a partitioned asset check with its own automation condition could raise a CheckError and halt the entire automation tick when it was requested on a tick that did not materialize the asset it targets.
Fixed a bug where a code location could be left stuck in an error state after a transient gRPC failure during refresh (common during Kubernetes rolling deployments). The gRPC server watcher now periodically retries refresh for locations whose load error is a DagsterUserCodeUnreachableError. (Thanks, @jmoldow!)
[ui] Fixed an issue where long pool names could overflow their container; they are now truncated, and the run pools dialog wraps and scrolls when there are many pools.
[dagster-dbt] Fixed a KeyError on failures when converting dbt run results to Dagster events for runs that omit that key (such as dbt Fusion).
[ui] The asset catalog page now renders as a single virtualized list, so workspaces with many asset groups or code locations no longer freeze the UI when expanding those sections.
[dagster-dbt] Added a new "insights" option to DbtProjectComponent's include_metadata field, enabling Dagster+ Insights tracking from YAML config.
[dagster-graphql] Added an optional limit argument and new assetSelectionCount / assetCheckSelectionCount fields to the Run GraphQL type, so clients can render a bounded preview of a run's asset/check selection alongside the true totals.
Asset check history is now cleared when an asset or its partitions are wiped; stale entries no longer linger in the Execution History and Partitions views.
[ui] The run detail page header now displays the asset-check count for asset-job runs, and the count is now read from the execution plan rather than by scanning the full run event log.
[ui] The "View asset lineage" item in the run actions menu now correctly scopes to the assets in that run.
[dagster-dbt] .with_insights() now logs a warning instead of raising when called against an unsupported adapter.
Added a new page documenting Dagster+ code-location snapshot size limits, with a script you can run locally to estimate snapshot sizes before deploying.
Documented the "Run concurrency" Insights metric.
Fixed an invalid pool config in the "Preventing concurrent dbt snapshots" DbtProjectComponent example.
Fixed a bug where DagsterInstance.get_latest_materialization_event (and get_asset_records) could return a stale pre-wipe materialization for a wiped asset once a new run targeting the asset started or an observation was reported. In Dagster+, fixed the analogous bug where wiping partitions could leave the wiped partition's materialization as the asset's latest materialization.
Fixed an issue where an asset backfill could get stuck — emitting no further runs but never completing — when an asset whose partitions definition includes certain dates depended on an asset whose partitions definition excludes them.
Fixed a performance issue where assets partitioned by a cron schedule using an explicit minute list (e.g. 0,30 * * * *) computed partition counts much more slowly than the equivalent */30 schedule.
Improved the performance of loading the backfills for a partition set on deployments with a large number of backfills, which previously fetched and deserialized every backfill in the deployment on each request.
[ui] Fixed a performance regression that caused views with truncated text, such as the asset catalog, to render slowly.
[dagster-cloud] Fixed an issue where importing dagster_cloud.serverless could fail with a missing boto3 dependency on serverless deployments that did not install the [serverless] extra.
Asset group names may now contain / separators to define hierarchical groups (e.g. marketing/ads). Hierarchical groups can be selected with wildcards in asset selections (e.g. group:"marketing/*") and are rendered as nested groups in the asset graph.
Added an is: filter to the asset selection syntax and search filters to select assets by type (e.g. is:external, is:materializable).
[dg] DG_PROJECT_PYTHON_EXECUTABLE in a project's .env is now parsed via python-dotenv, so export KEY=value, quoted values, and trailing comments are honored.
[ui] When filtering assets in the lineage view with the selection input, a "Save selection" button now allows creating a saved selection directly from the input value.
[ui] Redesigned the recent updates timeline on asset pages.
[dagster-cloud] Uploads through S3 presigned URLs (code location snapshots, serverless I/O manager objects, compute logs, and PEX files) now retry on transient HTTP 500 errors from S3.
[dagster-dlt] DltLoadCollectionComponent now supports partitions_def and backfill_policy. (Thanks, @Benjamin0313!)
[helm] User code deployments now support running multiple replicas via replicaCount. All replicas of a deployment share a consistent gRPC server ID, so multi-replica deployments do not trigger spurious code location reloads. (Thanks, @HynekBlaha!)
Fixed an issue where date-like strings (e.g. "2021-10-30") in YAML config files were converted to datetime objects instead of being passed through as strings.
Fixed an issue where run failure sensors did not receive error information when a run failed due to a step failure. The originating step error is now available on the sensor context.
Fixed an issue where schedules using cron strings constrained to specific hours or days (e.g. */15 9-16 * * 1-5) were incorrectly treated as ticking uniformly throughout the day, which could produce overcounted partition counts and oversized backfills.
Fixed a deadlock that could occur when shutting down event log watchers on Postgres or MySQL storage while a watch callback was concurrently unsubscribing.
TemplatedSqlComponent now generates a unique default op name based on its template, preventing op name collisions when multiple components omit an explicit execution name.
[ui] Fixed an issue where clicking "View runs" in the backfill step status dialog did not open the runs dialog.
[ui] On the asset partitions page, the focused partition now resets when it falls outside the selected partition range, instead of continuing to display a partition that is no longer in the range.
Special characters are now allowed in team owners for jobs, schedules, and sensors. (Thanks, @dragos-pop!)
Added kinds tags and icons for Microsoft Fabric and OneLake. (Thanks, @MartyP233!)
The BigQuery, Snowflake, and DuckDB I/O managers now skip the table write when an asset returns an empty DataFrame, logging a warning instead. This prevents incorrect type inference and degenerate tables for empty partitions.
[ui] The per-code-location "Docs" tab is now "Components", with its content available under a "Library" subtab. Existing /docs links continue to work via redirect.
[dagster-aws] The EMR PySpark step launcher now honors a configured S3 job package path.
[dagster-cloud] code_server.* metrics now carry a server_instance_id tag identifying the underlying gRPC server process. For multi-replica code locations, the tag identifies whichever replica answered the most recent metrics ping.
InstigationLogger now stringifies log record attributes that are not JSON-serializable instead of failing to emit the log. (Thanks, @jonaslb!)
Fixed a SQL injection vulnerability in dagster-clickhouse, dagster-clickhouse-pandas, and dagster-clickhouse-polars when using dynamic partition keys. ClickHouse partition queries now bind partition key values as driver parameters instead of interpolating them into SQL strings.
Fixed an issue where tag values in component YAML files were not coerced correctly.
[dg] dg labs ai dispatch no longer writes a plan.md artifact into version control.
[dg] Fixed an error that occurred when using TypedDict-typed fields in component configuration.
[ui] Fixed partition step status labels and squares that rendered incorrectly after the CSS Modules migration.
[ui] Fixed backfill progress not reaching 100% until all runs had completed.
[dagster-databricks] Fixed Databricks workspace job list pagination and added retries for rate-limit responses.
[dagster-dbt] Fixed DbtProject.prepare() to always run dbt deps when dependency files are present.
[dagster-dbt] Fixed YAML-based translation in DbtProjectComponent subclasses to also translate dependency keys.
[dagster-dbt] Fixed an issue where dbt unit tests could be ignored unexpectedly.
[dagster-dbt] Fixed incorrect asset key translation when generating column lineage with DbtProjectComponent.
[dagster-dbt] Fixed unbounded recursive copying of the .local_defs_state() directory when a dbt project was located at the repository root.
[dagster-cloud-cli] Fixed dg plus deploy failing with No module named pip in uv-managed environments.
[dagster-cloud-cli] Removed an overly strict dependency-file check from the Docker deploy path.
Added an owners parameter to build_schedule_from_partitioned_job to set owners on the resulting schedule. (Thanks, @dragos-pop!)
[dagster-airlift] Added support for Python 3.12, 3.13, and 3.14.
[dagster-fivetran] The Fivetran component now supports a fetch_column_metadata option to fetch column-level metadata for synced tables.
[dagster-k8s] When includeConfigInLaunchedRuns.enabled is set in the Helm chart, run pods now inherit nodeSelector, tolerations, and podSecurityContext from user deployment configuration.
Fixed a SQL injection vulnerability in dagster-clickhouse, dagster-clickhouse-pandas, and dagster-clickhouse-polars when using dynamic partition keys. ClickHouse partition queries now use driver parameter binding instead of interpolating partition key values into SQL strings.
Fixed a race condition where readers polling for a run to reach FAILURE could observe the failed status before the dagster/failure_reason tag was written.
Fixed a regression where a blocking asset check that did not emit a result (e.g. a dbt test that dbt declined to run under indirect_selection: cautious or buildable) could silently cause downstream assets to be skipped. Missing blocking check results now allow downstream assets to proceed and log a warning; failed blocking checks continue to fail the step and the run as before.
Improved deduplication in AutomationCondition.any_downstream_conditions() to prevent recursive blowups in condition size when combined with other automation conditions.
[ui] Fixed extra scrollbars appearing in the asset overview and asset sidebar.
[dagster-k8s] Fixed an AttributeError when using kubernetes client v36+, which uses PEP 585 dict syntax (e.g. dict[str, str]) in its OpenAPI type annotations. (Thanks, @vanika02!)
Schedule, sensor, and asset daemon ticks now dispatch instigators round-robin across code locations, preventing a single code location with many instigators from delaying launches in other code locations.
Added dg api run launch command for launching runs from the CLI against the Dagster+ API.
Improved declarative automation performance for assets sharing the same cron schedule.
[ui] The asset catalog now shows a toggle to hide duplicate connections-defined assets when an SDA and a connection target the same table, and the asset sidebar links to matched assets.
[dagster-dbt] Added a configurable job pool to DbtCloudComponent and DbtCloudWorkspace to work around dbt Cloud's one-concurrent-run-per-job limit.
Fixed an issue where asset keys and partitions containing leading "/" characters or ".." characters would sometimes cause IOManagers to read and write outside of the supplied base_path.
Fixed a regression where a blocking asset check that did not emit a result (e.g. a dbt test skipped under indirect_selection: cautious or buildable) would silently cause downstream assets to be skipped. Missing check results now allow downstream assets to proceed; failed checks still fail the step.
Softened the job_snapshot_id mismatch invariant in execution plan persistence from a crash to a warning, preventing run launch failures when client and server compute slightly different snapshot IDs.
Pinned antlr4-python3-runtime to <4.14 to prevent potential breakage from future ANTLR minor version bumps.
[ui] Fixed minor flex alignment issues for tags and metadata buttons on asset catalog detail pages.
[dagster-k8s] Added support for the PEP 585 dict[str, str] syntax used by the kubernetes client v36+ when snake-casing model dictionaries, fixing an AttributeError: module 'kubernetes.client.models' has no attribute 'dict[str, str]' raised on kubernetes>=36. (Thanks, @vanika02!)