[dagster-dbt] dagster-dbt no longer installs dbt-core. It is now available as the dagster-dbt[dbt-core] extra. Do not install dbt-core into an environment that also has dbt Fusion's dbt PyPI package: both claim the dbt import namespace and overwrite each other's files, and pip reports no error.
Sensor ticks that request a run larger than the instance's run size limit now fail with an explicit error naming the offending run requests, instead of storing those requests in tick history.
The SF_PARTNER_ID environment variable is now set by default, to allow for partner attribution on Snowflake connections made through third-party libraries.
Run monitoring now includes the run worker's debug info (for example, a Kubernetes OOMKilled termination reason) when it fails a started run because the run worker failed. (Thanks, @hosaka2!)
[dg] dg list envs, dg plus create env, and dg plus pull env now accept a --deployment option (or the DAGSTER_CLOUD_DEPLOYMENT environment variable) to target a deployment other than the configured default.
[dagster-cloud] The published dagster-cloud-agent image now includes the Azure Container Apps launcher.
[dagster-dbt] A dbt Fusion binary on PATH is now used as-is, instead of being shadowed by the dbt entry point that dbt-core installs into the virtualenv.
[dagster-dbt] fetch_column_metadata() and fetch_row_counts() no longer fail the step when running on the dbt Fusion engine, or when dbt adapter initialization fails. They now log a warning and emit events without the metadata.
[dagster-dbt] dagster-dbt's sqlglot dependency no longer pins an upper bound. Column lineage generation now works on sqlglot 28.1 and later, including the performance improvements in 30.x for wide models.
[dagster-dbt] Asset materializations from dbt runs now carry the node's dbt status as metadata.
GraphQL event-log, tick, and run-record queries no longer fail when the requested limit exceeds the server-side default. The limit is clamped to the default, and the remaining rows are available by paginating.
Fixed a bug where a run's asset list could be under-reported in the UI for runs with a large number of materializations, and where an asset could be reported as failed even though it was materialized by a different step than the one that planned it.
Fixed an issue where the UI could keep displaying a code location's previous container image after a rolling update, until browser storage was cleared. (Thanks, @HynekBlaha!)
[ui] Run filters now keep tag values that contain =, such as partition keys like region=west.
[ui] Selection inputs no longer collapse repeated spaces inside quoted values, and now have an accessible name.
[ui] On cursor-paginated lists such as Runs, "Newer" now returns to the previous page after you switch tabs and press browser Back, instead of jumping to the first page.
[dagster-dbt] Fixed a bug where dbt models that finished with a no-op, reused, or warn status emitted no materialization, so the asset silently stopped updating and downstream freshness checks and automation conditions never fired. partial success and skipped are still treated as failures, since dbt marks a partial-success node's dependents as errored, and dbt Fusion reports both a genuine no-op and an upstream-failure skip as skipped.
[dagster-dbt] Fixed an issue where dbt Fusion models with no ref() or source() calls were still left out of asset selection in environments without dbt-core installed, which the fix in 1.13.25 did not cover. Selections other than the default select are still affected.
[dagster-dbt] Fixed a bug where, when running on dbt Fusion without dbt-core installed, every passing dbt test was reported as a failed asset check.
[dagster-dbt] Fixed a bug where a dbt Cloud run containing seeds executed under dbt Fusion failed event translation with KeyError: 'materialized', dropping materializations for every asset after the first seed in the run.
[dagster-dbt] Fixed a failure reloading a dagster-dbt project on Windows, where the local defs state snapshot could not be rebuilt if it contained read-only files such as a git checkout's object files.
Corrected the Dagster+ credit usage documentation: credits are counted per step execution plus per asset materialization event, and the page now covers retries, failures, and how Insights attributes credits across assets materialized in one step.
Improved the performance of declarative automation for partitioned assets with a long materialization history.
[ui] The UI now has a mobile layout for phones, with a new navigation menu and mobile versions of the Home, Jobs, Automation, Timeline, Asset Catalog, and Asset Overview pages. Pages without a mobile version show a banner with an option to always use the desktop site, which can also be set in user settings.
[ui] When launching a time-partitioned asset, the partition selector now shows the most recent 90 days by default, with an option to show all partitions.
[dagster-aws] The ECS run launcher now supports resuming run workers, so run monitoring's max_resume_run_attempts can be set above 0 on ECS deployments.
[dagster-prefect] The Prefect Pipes clients now read messages through Prefect's logs API by default, so a shared filesystem or bucket is no longer needed. Prefect deployments work without changes to the flow. Flows and tasks that open a Pipes session must pass message_writer=PipesPrefectLogsMessageWriter().
[dg] Fixed AttributeError: module 'dbt' has no attribute 'contracts' when passing a file named dbt.py to dg plus integrations dbt manage-manifest and dagster-cloud ci manage-state.
[dagster-dbt] Fixed an issue where dbt Fusion models with no ref() or source() calls were silently left out of asset selection, including in DbtProjectComponent.
[ui] Fixed an issue where pressing Newer on paginated lists such as Runs jumped to the first page after using the browser Back button or reloading the page.
Loading a project whose root module is not importable now raises an error explaining that the project package is likely not installed, instead of a bare ModuleNotFoundError.
[dagster-cloud] The ECS agent now supports cross-account service discovery. When the Cloud Map namespace lives in a different AWS account from the agent, the agent registers code server tasks in Cloud Map directly and reconciles them on an interval, configurable with the new service_discovery_reconcile_interval option (default 300 seconds). Same-account deployments are unchanged.
[dagster-dbt] fetch_column_metadata() now emits column lineage for dbt snapshots on dbt 1.12 and later, and no longer logs a warning and traceback for them on earlier versions.
Fixed a bug where a job that included a @multi_asset with can_subset=True and specs using different partitions definitions failed to resolve with DagsterInvalidDefinitionError when one of its unselected dependencies was converted to an external asset. (Thanks, @Terroface!)
Fixed --use-ssl being silently ignored when connecting to a gRPC code server via --grpc-port or --grpc-socket, which caused an insecure channel to be used. Also fixed dagster dev --use-legacy-code-server-behavior silently dropping --package-name and --autoload-defs-module-name when launching the webserver and daemon.
Fixed a bug where a callable object with a custom __signature__ had its type hints read from __call__ instead, causing resource parameters to be misinterpreted as asset inputs or dropped from a sensor's required resources.
[ui] Fixed an issue where asset health and other live data could remain stale after a failed refresh until the page was reloaded.
[dagster-airflow] Fixed a bug where every Airflow task log line was written twice to the compute logs on Airflow 2.9 and later.
[dagster-dbt] Fixed an AttributeError raised when a DbtProject's project_dir was a string rather than a Path, which could happen after the project was round-tripped through Dagster metadata.
[dagster-dbt] Fixed the type annotation of build_schedule_from_dbt_selection so that non-string tags values, which already worked at runtime, no longer fail type checking, matching define_asset_job.
[dagster-k8s] Fixed a bug where a Dagster Pipes Kubernetes run whose pod had a failing init container would hang until the wait timed out (a day by default) instead of failing with the init container's error.
Added a guide on code-backed and UI-managed alert policies in Dagster+.
Added documentation for owner-scoped RBAC in Dagster+.
Added a page on asset groups and nested groups, and corrected the asset selection syntax reference to note that wildcard matching is not limited to the key filter.
In Dagster+, alert policies can now target deployment capacity metrics — queued runs and in-progress runs — evaluated over a rolling window with aggregations such as max.
In Dagster+ Serverless, fast deploys now build a Docker image instead of a Python executable when the target environment cannot run one: Serverless on Kubernetes, or a Harbor image registry. Set DAGSTER_CLOUD_DISABLE_PEX_DOCKER_REDIRECT to opt out.
Component definition files can now use the .yml extension in addition to .yaml, as can dagster.yaml and workspace.yaml. .yaml still takes precedence when both are present.
The dagster-k8s, dagster-celery-k8s, and user-code-example images are now published as multi-platform images supporting both amd64 and arm64.
[cli] dagster project from-example now produces a components-layout project that installs with uv sync outside the Dagster repo.
[ui] Updated the Prefect kind tag icon, which now adapts to dark mode.
[ui] Fixed an issue where pages that refresh automatically stopped polling after a failed request.
[ui] Fixed an issue where the Catalog assets folder tree could jump back to the top while scrolling.
[dagster-dbt] The dbt Cloud client now tolerates a trailing slash in access_url, treats deleting an already-deleted job as success, and includes dbt Cloud's error response body when logging request failures.
[dagster-prefect] Failure messages now name the Prefect run state consistently across Python versions.
Run dequeuing is now significantly faster when concurrency pools are in use and many runs are queued, as pool state is read once per dequeue pass rather than repeatedly.
In Dagster+, the MCP server's launch_job_run and launch_asset_run tools no longer require a code location and repository name. They are looked up from the job being launched.
[ui] The tick timeline now supports filtering to a time window, paging through history, and a live-updating view.
[dagster-dbt] Added support for dbt-core 1.12. (Thanks, @jrbasso!)
[dagster-looker] Now requires python-liquid>=2.2.1 (previously <2).
[dagster-prefect] A new Prefect integration is available in preview. Launch Prefect deployments and background tasks from a Dagster asset with Dagster Pipes, including partition mapping and cancellation forwarding.
Asset backfills whose runs have all finished but which still have partitions with no materialization status now complete as failed instead of remaining in progress indefinitely.
In Dagster+, wiping and deleting dynamic partitions in a single action now also supports multi-partitioned assets that use the dynamic partitions definition as a dimension.
In Dagster+, alert policies defined in a YAML file can no longer be edited, disabled, or deleted from the UI. Update the file and sync instead. Muting is still available from the UI, and the in-app YAML editor now shows only UI-managed alert policies.
In Dagster+, syncing alert policies from a YAML file no longer deletes alert policies created in the UI. Alert policies that existed before this release are never removed by a sync and must be deleted manually from the UI.
[ui] Automation condition evaluations now explain history-dependent conditions (since, newly_true, newly_missing) by showing the remembered values that determined them, such as when a latch was set or reset and an operand's value on the current versus previous tick, instead of the operands' current values, which could appear to contradict the parent condition.
Fixed an issue where a freshness policy declared for an asset in one code location was ignored when another code location defined the same asset without a policy (for example, a dbt source spec paired with an ingestion-tool materialization). The policy now appears in the asset catalog and is evaluated by the freshness daemon.
Fixed a bug where a backfill run that materialized some partitions of an asset and failed on others left the failed partitions showing as in progress.
[dagster-postgres] Fixed a connection leak where checking for the existence of the event log table did not return its connection to the pool, which could exhaust the webserver's connection pool on instances with many asset nodes. (Thanks, @watacoso!)
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!)
Raised the SQLite busy_timeout default from 5s to 30s on SqliteEventLogStorage and ConsolidatedSqliteEventLogStorage to better tolerate slow or network-backed $DAGSTER_HOME filesystems.
[ui] Removed the "Scheduled" tab from the runs feed.
[ui] The sensor tick timeline now shows more ticks on the newest page, matching the list of ticks shown in the table below.
[dagster-k8s] Added a delete_pod_on_completion flag to PipesK8sClient.run, allowing callers to opt out of the automatic pod deletion at the end of a Pipes run.
[dagstermill] Dropped support for papermill 1.x. dagstermill now requires papermill>=2.0.0.
Job backfills now retry on transient daemon errors such as code-server unreachable, matching the existing behavior for asset backfills. The DAGSTER_MAX_ASSET_BACKFILL_RETRIES environment variable has been renamed to DAGSTER_MAX_BACKFILL_RETRIES, with a fallback to the old name for backwards compatibility.
Fixed a bug where asset checks could be dropped from a JobDefinition when selected as part of a subset selection.
Fixed a bug where, in a partitioned-asset backfill running multiple partitions concurrently, an inline AssetCheckResult could record a target_materialization pointing to a different partition's materialization.
Fixed a regression introduced in 1.12.10 where OutputContext.asset_partition_key_range and InputContext.asset_partition_key_range could raise CheckError: The instance is not available to load partitions for assets using a MultiPartitionsDefinition that includes a DynamicPartitionsDefinition.
Improved the error message shown when the instance is not available to load dynamic partitions, recommending the use of partition_loading_context.
[ui] Fixed an issue where viewing the Lineage tab for an asset could cause the page header to disappear.
[dagster-dbt] Fixed a bug where, when a dbt asset selection grew large enough to switch from inline --select/--exclude to a temporary selectors.yml, runtime --exclude arguments were silently dropped.
[dagster-dbt] Fixed runtime selection arguments not being properly applied when used with @dbt_assets ops.
[dagstermill] Increased the default Jupyter kernel-startup timeout for dagstermill notebook ops from 60s to 120s.
typing.Mapping and typing.Sequence annotations are now supported on op and asset inputs.
Added a path_prefix parameter to DagsterGraphQLClient to support connecting to webserver deployments behind a non-root path prefix.
Added a storage_kind field to TableMetadataSet to denote the storage system that backs a table (e.g., snowflake, databricks, bigquery).
define_asset_job now validates owner strings at definition time, producing clearer error messages for invalid owners.
[ui] The schedule: and sensor: selector syntax now matches assets in jobs targeted by the schedule or sensor, in addition to assets directly in the asset selection.
[dagster-azure] Added a configurable endpoint_suffix parameter to ADLS2 and Blob Storage utilities, resources, components, and compute log manager (also exposed as endpointSuffix in the Helm chart for AzureBlobComputeLogManager), enabling Azure Government Cloud, Azure China, and other sovereign cloud endpoints.
[dagster-dbt] Added a translation parameter to DbtCloudComponent for customizing how dbt models are translated into Dagster assets.
[dagster-soda] Added a new dagster-soda library (preview) containing the SodaScanComponent for executing Soda Core data quality checks.
Fixed a bug where asset checks could be dropped from a job during subset selection.
Asset checks can now be defined on assets whose names contain dots.
[dg] Fixed a bug where dg plus deploy did not read the local config stored by dg plus login.
[ui] Fixed the "Flatten graphs" toggle in the graph query input on the Launchpad.
[ui] Restored CommonMark-compliant Markdown line break rendering in Markdown descriptions and docs blocks. (Thanks, @vidiyala99!)
[dagster-airbyte] Fixed an issue where Airbyte job timestamp parsing could fail with newer Airbyte API versions due to stricter ISO format handling.
[dagster-aws] InsufficientFreeAddressesInSubnet and "Task provisioning failed" are now treated as transient ECS stop reasons, so affected runs are retried instead of marked as a permanent failure.
[dagster-dbt] Fixed a bug where path-based dbt selectors did not match assets correctly because absolute paths were not calculated relative to the project root.
[dagster-dbt] Fixed an issue where conflicting source metadata could spuriously raise an error.
Added an owners parameter to define_asset_job, mirroring the field on regular jobs.
Improved error messages when required config is missing in Dagster jobs, with clearer guidance on which fields are missing and example config to provide.
LOGS_CAPTURED event messages no longer say "Started capturing logs", since compute log managers typically upload logs on completion rather than streaming in real time.
[ui] Added client-side validation for the deployment settings YAML editor that warns when unknown keys are detected.
[ui] Op tags are now shown on the asset details page in a separate "Op tags" row, alongside the asset's own tags.
[ui] Redesigned the sensor dry run dialog with a stacked cursor layout, copy buttons for cursor values, and an inline run config preview.
[dagster-clickhouse] Added new dagster-clickhouse, dagster-clickhouse-pandas, and dagster-clickhouse-polars libraries with native ClickHouse resources, IO managers, and dg components.
[dagster-cloud] The EcsUserCodeLauncher now accepts a repository_credentials config option, allowing ECR credentials to be configured at the agent or deployment level instead of only per code location.
[dagster-postgres] Added workload identity federation (WIF) authentication for PostgreSQL via a new auth_provider config option (azure_wif, gcp_wif, or aws_wif), with optional extras dagster-postgres[azure], dagster-postgres[gcp], and dagster-postgres[aws]. The Helm chart supports WIF via global.postgresqlAuthWifEnabled. (Thanks, @JohnMav!)
Fixed an error when starting a schedule whose name was previously used for a sensor (or vice versa).
Fixed a race condition in Pipes that could cause dynamically-added log readers to be missed.
[dg] Fixed bugs in the GitLab hybrid scaffolder used by dg plus deploy configure.
[ui] Fixed the open/close behavior of the partition selector in the materialization dialog.
[ui] Fixed false-positive syntax errors in asset selection inputs while the autocomplete dropdown was open.
[ui] Fixed key:value autocompletion in search inputs not advancing into value-suggestion context when accepting a key with the Enter key.
[ui] Fixed the asset catalog "Group by Owner" and "Group by Tags" views not showing assets with empty owner or tag arrays under a "None" section.
[ui] Fixed asset selection summary tiles with long titles visually overlapping with adjacent UI.
[ui] Fixed monospace text in several places that had reverted to the default font.
[dagster-airbyte] Fixed errors parsing timestamps from newer versions of the Airbyte API.
[dagster-cloud] Fixed an issue where the --defs-state-info argument was applied to the multipex server command but not to the gRPC server command in serverless deployments.
[dagster-dbt] Fixed an issue where dbt assets configured with enable_duplicate_source_asset_keys could emit duplicate dependency entries and ambiguous source metadata when multiple dbt sources resolved to the same asset key.
[dagster-k8s] Added a workaround for an upstream issue in the Kubernetes Python client where setting the NO_PROXY or no_proxy environment variable did not affect the configuration of Kubernetes API calls.
[dagster-snowflake] Replaced deprecated Pydantic validator usage with field_validator to eliminate Pydantic deprecation warnings.
[ui] Users can now hold Cmd or Ctrl while clicking launch, materialize, re-execute, or retry buttons to open the resulting run in a new
browser tab instead of navigating away from the current page.
[ui] Added an Azure DevOps kind tag icon for assets tagged with the azuredevops kind.
[dg] The dg utils integrations sub-command has been removed.
[dagster-databricks] DatabricksClientResource now accepts a credentials_strategy argument, enabling federated and custom authentication flows via the Databricks SDK's CredentialsStrategy protocol. (Thanks, @hbellur0526!)
Added PipesCompositeMessageReader (preview) to support multiple concurrent message streams in a single Pipes session.
Added sensor:, schedule:, and job: attribute support to the asset selection syntax (e.g., sensor:my_sensor, job:my_job).
Added automation_type: attribute support to the asset selection syntax, allowing queries like automation_type:schedule or automation_type:sensor.
State-backed integration components (e.g., AirbyteWorkspaceComponent, FivetranWorkspaceComponent) now default to LOCAL_FILESYSTEM state storage instead of legacy_code_server_snapshots.
[dagster-dbt] DagsterDbtTranslatorSettings.enable_source_metadata now defaults to True, enabling upstream asset key remapping based on dbt source table names by default.
Fixed a possible SQL injection in a few IO managers when used with dynamic partition.
Fixed an issue where runs executed via execute_in_process() would sometimes fail to display the step timeline in the Dagster UI.
Fixed a bug where multi-asset definitions containing virtual assets would produce incorrect execution plans.
[ui] Fixed the tick result button for sensors using dynamic partitions.
[dagster-aws] PickledObjectS3IOManager now defaults the S3 key prefix to an empty string when none is provided. (Thanks, @aksestok!)
[dagster-databricks] PipesDatabricksClient.run_multi_task and PipesDatabricksServerlessClient.run_multi_task now give each submitted task its own message destination by default, fixing chunk-file collisions between concurrent tasks.
[dagster-dbt] Fixed the dbt Cloud v2 polling sensor and adhoc job to use stable, ID-based identifiers, preventing naming conflicts.
[dagster-dbt] Fixed the dbt Cloud v2 polling sensor to correctly filter out runs from adhoc jobs.
AI-assisted development: Released dagster-io/skills, a collection of Dagster-focused AI skills for coding agents like Claude Code, OpenAI Codex, and others. Expanded dg api commands for programmatic inspection of assets, runs, jobs, schedules, and more.
Partitioned asset checks: Asset checks can now target specific partitions of an upstream asset, aligning data quality logic with how partitioned data is produced and monitored.
State-backed components enabled by default: Integrations that depend on external metadata (dbt, Fivetran, Airbyte, Tableau, Looker, etc.) now use persisted local state by default, providing a more predictable code location loading experience.
Virtual assets (preview): New is_virtual parameter on @asset and AssetSpec for modeling assets like database views that automatically reflect upstream changes without explicit materialization.
20+ new components: Added or expanded components for dbt Cloud, Spark, Azure (Blob Storage, ADLS2), GCP (BigQuery, GCS, Dataproc), Databricks, Tableau, Looker, Census, Polytomic, and more. Integrations gained richer observability, metadata, and operational support.
Deeper integration support: dbt Cloud supports partitioned assets; Databricks gained job-level subsetting and auto-cancel on run termination; Fivetran added polling sensors, retry-on-reschedule, and resync support; BI integrations auto-enrich assets with table metadata for cross-system lineage.
Dagster+ improvements: Organization-level timezone settings, service users for Pro accounts, more resilient code server redeploy behavior, improved agent failure recovery, and expanded insights and alerting workflows.
Removed deprecated external_asset_from_spec and external_assets_from_specs. Use AssetSpec inputs directly to Definitions(...) or AssetsDefinition(specs=[...]) instead.
Removed deprecated single-AssetKeydeps argument support from asset dependencies. Use a sequence of AssetDep objects instead.
Removed deprecated get_all_asset_specs from Definitions.
Removed deprecated legacy_freshness_policy parameter from @observable_source_asset.
Removed deprecated auto_observe_interval_minutes parameter from @observable_source_asset.
Removed deprecated legacy_freshness_policies_by_output_name parameter from AssetsDefinition.
Removed deprecated load_component_at_path from ComponentLoadContext. Use context.load_component instead.
Removed deprecated build_defs_at_path from ComponentLoadContext.
[dagster-airbyte] Removed deprecated AirbyteState enum (use AirbyteJobStatusType instead) and removed deprecated legacy_freshness_policy and auto_materialize_policy parameters from build_airbyte_assets().
[dagster-looker] Removed deprecated DagsterLookerResource.build_defs, get_asset_key, get_dashboard_asset_key, get_explore_asset_key, get_view_asset_key methods, and Type[DagsterLookerApiTranslator] support from API helpers.
[dagster-powerbi] Removed deprecated PowerBIWorkspace.build_defs(), translator key helpers (use get_asset_spec() instead), and Type[DagsterPowerBITranslator] support in load_powerbi_asset_specs() (pass an instance instead).
[dagster-sigma] Removed deprecated SigmaOrganization.build_defs(), DagsterSigmaTranslator.get_asset_key() (use get_asset_spec(...).key instead), and Type[DagsterSigmaTranslator] support in load_sigma_asset_specs() (pass an instance instead).
(Preview) Added support for virtual assets. The @asset decorator and AssetSpec now accept an is_virtual parameter for defining assets that represent views or derived tables that don't need to be materialized. Virtual assets are supported in staleness calculations, execution planning, and declarative automation.
Job-level config defaults are now applied when partial config is provided to a run.
[dagster-dbt] Added enable_dbt_views_as_virtual_assets setting to DbtTranslatorSettings for automatically treating dbt views as virtual assets.
Fixed an issue where a sensor targeting a job with run_tags and specifying an asset_selection in the RunRequest would not apply the job's run_tags to the resulting run.
Fixed a potential error in YAML config snapshot conversion when encountering None fields.
[dg] Fixed dg plus deploy configure generating a GitHub Action that used Docker instead of the PEX build strategy.
[dagster-cloud-cli] PR comments in CI are now scoped by deployment name, preventing overwrites across deployments.
[ui] Fixed "Missing" partition selection for time-based partitioned assets.
[ui] Fixed raw log display rendering after ansi-to-react library update.
[ui] "Terminate all runs" dialog now handles extremely large sets of runs more reliably.
Added SCIM Groups filter support for members.value eq queries.
Fixed an issue where the Dagster+ Kubernetes agent would emit log noise about DAGSTER_CLOUD_RAW_GIT_URL and DAGSTER_CLOUD_GIT_URL environment variables when onlyAllowUserDefinedK8sConfigFields was set.
Fixed incorrect alert type label for metrics alerts.
[dg] dg projects can now configure agent_queue and image in pyproject.toml under [tool.dg.project], which are included in the generated dagster_cloud.yaml when running dg plus deploy.
[dg] Added dg api job list and dg api job get commands for querying job metadata including schedules, sensors, and tags.
[dg] Added dg api asset-check list, dg api asset-check get-executions, and dg api asset get-partition-status commands.
[ui] The asset overview page now shows a loading spinner for "Latest materialization" while data is loading, instead of a dash.
[ui] Removed the legacy asset catalog component and the flagAssetCatalogSidebar feature flag. The asset catalog sidebar is now always enabled.
[ui] The pipeline snapshot link is no longer shown in the Run Actions Menu for hidden asset group jobs.
[dagster-aws] The EcsRunLauncher and Dagster+ ECS agent now supply idempotency tokens when creating ECS services and tasks, improving retry behavior after transient failures.
[dagster-dbt] DbtCloudComponent now supports an option to include a polling sensor for monitoring dbt Cloud job runs.
Fixed snap_to_yaml incorrectly removing empty dicts that represent valid config values for Permissive, Map, and Noneable config types.
Fixed an issue where resources defined in parent components could incorrectly trigger DagsterInvalidDefinitionError during nested component post_processing resolution. (Thanks, @vidiyala99!)
[dagster-aws] Fixed PipesECSClient incorrectly treating a task that failed to start as a successful execution.
[dagster-fivetran] Fixed an incorrect connector URL format generated by the Fivetran integration.
[ui] Fixed a performance issue where canceling a backfill before any runs executed would unnecessarily fetch the entire asset materialization history.
[dg] Fixed dg plus deploy not correctly pulling in environment variables when refreshing definitions state for state-backed components.
[ui] Fixed ANSI color rendering in run logs.
[ui] Fixed a visual rendering issue with the graph depth input field.
[dagster-dbt] Fixed issue that could cause DbtProjectComponents with custom translation methods to not work with utilities like build_schedule_from_dbt_selection.
[ui] Fixed asset catalog sidebar not clearing key prefix filters when navigating back to root.
[ui] Fixed deployment switcher button text color in Light Mode.
[ui] Fixed duplicate "Catalog" breadcrumb on asset detail pages.
[ui] Fixed lineage graph edges disappearing when zoomed out by increasing the maximum visible edge limit.
Execution context classes (OpExecutionContext, AssetExecutionContext, AssetCheckExecutionContext) now expose a multi_partition_key property that returns a MultiPartitionKey when the current run is a multi-partition run.
Added Braze and Runpod kind tags. (Thanks, @dragos-pop!)
[dagster-databricks] The Databricks job run URL is now rendered as a clickable link in the Dagster UI.
[dagster-dbt] Added DbtCloudComponent for loading dbt Cloud projects as Dagster assets using the Components API.
[dagster-dbt] The dbt_cloud_assets decorator now supports partitioned assets via the partitions_def parameter.
[dagster-fivetran] Added a polling sensor for Fivetran observability, which detects externally-triggered syncs and emits materialization events.
[dagster-fivetran] FivetranWorkspace now supports a retry_on_reschedule option to automatically retry syncs rescheduled by Fivetran due to quota limits, as well as resync operations.
[dagster-fivetran] The Fivetran translator now includes sync schedule and custom report metadata on connector assets.
[dagster-k8s] The Dagster Helm chart and Dagster+ Kubernetes Agent Helm chart now support k8sApiCaBundlePath to configure a custom CA certificate path for Kubernetes API communication.
[dagster-k8s] Code location server Kubernetes Services now support a service_spec_config field for arbitrary Kubernetes Service spec overrides (for example, clusterIP: None for headless services).
Fixed an issue where time window partitions with exclusions would sometimes create more runs than needed when using single-run backfills.
Fixed a "Cannot access partition_key for a non-partitioned run" error that could occur with multi-asset definitions that included non-partitioned assets or asset checks alongside partitioned ones.
[dagster-aws] Fixed s3_pickle_io_manager failing with dynamic outputs when step keys contain bracket characters in the generated S3 object path.
[dagster-aws] Fixed an issue in PipesEMRServerlessClient where a custom CloudWatch log group name configured in monitoringConfiguration.cloudWatchLoggingConfiguration.logGroupName was ignored, causing log streaming to always use the default /aws/emr-serverless log group. (Thanks, @kchainani-figma!)
[ui] Fixed the asset recent updates trend visualization when multiple event types share the same run ID.
[ui] Fixed text wrapping and spacing in the asset event detail view for long partition names and run titles.
Added a troubleshooting guide for Kubernetes agent network connectivity issues, including TCP keepalive configuration recommendations for Helm chart deployments.
Added a "Report Execution" dialog to the asset checks detail view, allowing users to manually record check evaluation results.
Added database pool configuration options (--db-pool-recycle, --db-pool-pre-ping, and others) to dg dev and dagster dev.
Added dg plus config view command for inspecting the current CLI configuration.
[ui] Updated the Usage dialog and Run timeline to display "Jobless asset materializations" (previously "Ad hoc materializations") with a tooltip describing what is grouped within this category.
[ui] Planned run events are now excluded from the event count shown in the run log filter.
[dagster-azure] Added component support for dagster-azure, including AzureBlobStorageResourceComponent and ADLS2ResourceComponent for declarative YAML configuration of Azure resources.
[dagster-databricks] DatabricksAssetBundleComponent is now subsettable at the job level, enabling selective execution of individual Databricks tasks.
[dagster-databricks] DatabricksAssetBundleComponent now uses the Databricks CLI to resolve variable references to task and job names in bundle templates.
[dagster-databricks] Databricks jobs are now cancelled when the corresponding Dagster run is terminated in DatabricksWorkspaceComponent.
[dagster-dbt] dagster-dbt now prefers dbt-core for manifest parsing when it is installed.
[dagster-gcp] Added BigQueryResourceComponent, GCSResourceComponent, GCSFileManagerResourceComponent, and DataprocResourceComponent for declarative YAML configuration of GCP resources.
[dagster-gcp] BigQueryIOManager now supports a configurable write_mode parameter (truncate, replace, or append).
Fixed an issue where auto-run reexecution would attempt to rerun jobs belonging to already-completed or cancelled backfills.
Fixed an issue where backfill errors that were subsequently retried would remain incorrectly associated with the backfill.
dg plus pull env now merges pulled secrets into the existing .env file instead of replacing it, preserving any locally-set variables not present in Dagster Plus.
[ui] Fixed rendering of newlines in markdown blockquotes in the UI.
[dagster-databricks] Fixed a KeyError for run_page_url in DatabricksWorkspaceComponent.
[dagster-databricks] Fixed asset mapping in DatabricksAssetBundleComponent and DatabricksWorkspaceComponent to use job and task key combinations, preventing conflicts when task keys are not unique across jobs.