The @asset decorator now supports a hooks argument to allow for functions to be executed on asset success / failure (thanks @brunobbaraujo)!
The log message produced when an asset check is evaluated now includes its pass / fail state.
The @multi_asset_check decorator now supports the pool argument.
[dagster-dbt] The DagsterDbtTranslator class now has a get_asset_check_spec method which can be overridden to customize the AssetCheckSpecs that are produced for each individual dbt test.
Fixed an issue where setting the non-public blocking attribute on an AssetCheckSpec would halt execution of the step as soon as any asset check failure was emitted, even if the step still had asset materializations or check evaluations to emit that were not downstream of the failed asset check. Now that this issue has been fixed, the blocking attribute on AssetCheckSpec has been made a public attribute. If you were making use of the blocking attribute on AssetCheckSpec before it was public and relying on the previous behavior, you should exit from your asset evaluation function after emitting an AssetCheckFailure from within your multi-asset in order to halt further execution of the step.
Fixed a bug where GraphDefinition.to_job() would not work if an op had a custom IO manager key.
Fixed an issue that would cause .allow() and .ignore() applications to not propagate through .since() automation conditions.
Fixed a bug where assets with cross-location dependencies could sometimes be incorrectly reported as "Unsynced".
Fixed an issue where dagster dev was sometimes failing to load code locations with a "Deadline Exceeded" error unless the --use-legacy-code-server-behavior flag was set.
The backfill daemon can now be configured to use a threadpool executor via helm (thanks @hynekblaha)!
[dagster-gcp] Added a google-cloud-bigquery>=1.28.3 pin to correctly reflect the lowest compatible version.
Fix a bug with dg check yaml where valid component type names were rejected if they were not registered (i.e. visible from dg check components).
dg create-dagster now warns when scaffolding a project or workspace if it is not the latest version.
The project.registry_modules configuration can now accept wildcards (e.g. foo_bar.components.*). This will register any module matching the pattern with dg.
The env YAML function now errors if the specified env var is unset. Default values can be provided as an additional argument: {{ env('MY_ENV_VAR', 'default') }}
defs.yaml files can now specify a component in the module where it is defined, as opposed to just the module where it is exposed in the dg registry.
The PipesSubprocessScriptCollectionComponent has been removed.
Running dg commands such as dg check defs and dg dev in a project folder that is part of the workspace will now only apply to that project, instead of every project in the workspace.
Scaffolded projects no longer contain a "components" directory or a Python dagster_dg_cli.plugin entry point.
Scaffolded components can now be placed anywhere within a project module hierarchy.
The entry point group used by shared libraries exposing custom components to dg has been renamed from dagster_dg_cli.plugin to dagster_dg_cli.registry_modules (projects no longer need to define an entry point group at all).
dg list plugin-modules has been renamed to dg list registry-modules.
dg list defs now supports configuring output columns with the --columns/-c option.
[dagster-airbyte] Introduced a AirbyteCloudWorkspaceComponent which can be used to pull in Airbyte Cloud connections into Dagster
Running dg commands like dg check defs and dg dev in a project folder that is part of the workspace will now only apply to that project, instead of every project in the workspace.
dg list defs now supports the --assets/-a option, to show only assets matching the provided selection.
dg list defs now supports a --path argument to subset the defs files shown.
The create-dagster workspace command now accepts the same required path argument as the create-dagster project command, instead of defaulting to a dagster-workspace subfolder of the current working directory.
The entry point group used by shared libraries exposing custom components to dg has been renamed from dagster_dg_cli.plugin to dagster_dg_cli.registry_modules (projects no longer need to define an entry point group at all).
dg list plugin-modules has been renamed to dg list registry-modules.
Newly scaffolded projects no longer contain a "components" directory or a Python dagster_dg_cli.plugin entry point.
Newly scaffolded components can now be placed anywhere within a project module hierarchy.
Resolvable subclasses can now use bare dict and list as field types.
Resolving a Resolvable subclass will no longer change empty strings to None.
Users can define multiple @definitions-decorated functions in a single module in the defs hierarchy and they are automatically merged and incorporated into the project.
Added @component_instance to replace @component. This allows multiple component instances in a python file.
Fixed an issue where dg commands would sometimes output extra dagster_telemetry_logger lines to stdout at the end of commands.
Added @template_var as an alternative approach for defining variables in a templating context.
[dagster-dbt] An issue occurring when using dbt selection arguments with a dbt project using saved queries and semantic models has been fixed.
[dagster-fivetran] Fixed an issue with load_assets_from_fivetran_instance where assets whose asset keys have been customized using a Fivetran translator would lead to an exception.
[dagster-cloud-cli] Added a --wait to the dagster-cloud job launch command that makes it wait until the launched run copmletes. Thanks @stevenayers!
[fix][dagster-cloud-cli] Fixed an issue where the dagster-cloud cli failed to deploy PEX projects on python 3.12 in certain environments without setuptools already installed.
The dg CLI is now installed in each project's Python environment instead of as a global tool. If you previously had dg installed globally and are upgrading, first uninstall the global dg tool (uv tool uninstall dagster-dg or pip uninstall dagster-dg) and add dagster-dg-cli as a dependency to each of your projects. Newly scaffolded projects will automatically include the dg CLI going forward.
A new create-dagster CLI has been added for scaffolding projects instead of workspaces. uvx create-dagster project has replaced dg scaffold project, and uvx create-dagster workspace has replaced dg scaffold workspace. The commands take identical arguments.
Definitions and component instances are now scaffolded with dg scaffold defs <scaffolder> instead of dg scaffold <scaffolder>.
The component.yaml file to specify a component instance is now called "defs.yaml". "component.yaml" will remain supported for several weeks, but is deprecated.
The lib folder in newly scaffolded projects has been renamed to "components".
dg scaffold component-type has been renamed to dg scaffold component.
dg list plugins has been renamed to dg list plugin-modules and now outputs only plugin module names, not plugin objects.
dg list component now lists component types instead of instances.
Exports from dagster.components are now available in the top-level dagster module.
Added @component_instance to replace @component, which allows multiple component instances in a python file.
If you type a partial component name for dg scaffold defs <component>, you will now be prompted with possible matches.
When component classnames are unique, you can now use just the classname as an alias for the fully qualified name when running dg scaffold defs <component>.
dg launch now supports passing config files through --config/-c.
Added Component.from_attributes_dict and Component.from_yaml_path to help with testing.
Added dagster.components.testing.component_defs utility to help with testing components.
Scaffolded schedules and sensors in dg are now loadable by default.
dg scaffold defs inline-component can now be used to create inline components and corresponding instances.
dg list defs now outputs resources.
[fix] The dagster-dbt cli flag --components flag now correctly finds DbtProjectComponent again.
[dagster-fivetran] Added a FivetranAccountComponent which can be used to pull in Fivetran connections into Dagster.
[dagster-dlt] The DltLoadCollectionComponent scaffolder no longer attempts to automatically construct loads for the given source and destination type.
Fixed an issue where components failed to load when using load_assets_from_airbyte_instance or other APIs that return a CacheableAssetsDefinition.
typing_extensions is now pinned to >=4.11.0 instead of >=4.10.0.
[ui] Viewing an automation condition evaluation now automatically expands the set of applicable sub-conditions.
[ui] Added the ability to navigate from an automation condition evaluation to upstream automation condition evaluations.
[ui] Added an asset graph node facet for viewing automation conditions and the most recent evaluation. This can be enabled in the user settings via a feature flag (Enable faceted asset nodes).
[ui] A new experimental integrations marketplace tab is now available and can be enabled in your user settings via a feature flag (Display integrations marketplace). It provides easy access to the gallery of dagster-supported plugins.
Fixed an issue with the ExternalNotebookDataRequest GRPC call that would allow it to access files outside of the current directory.
Fixed an issue that would cause op_tags set on @observable_source_assets to be dropped from the underlying step context object when executed.
Fixed an issue where dagster dev would sometimes raise a gRPC error when loading several code locations at once.
Fixed an issue where setting an environment variable to the string "false", "0" or "None" for a dagster config field using a BoolSource would evaluate to True.
Fixed an issue where specifying executable_path in a workspace.yaml file to run code locations in a different virtual environment would not correctly inherit the PATH of that virtual environment in the code location.
[dagster-dbt] Fixed an issue causing dbt CLI invocation to fail when materializing assets when OpExecutionContext was used as the type hint for the context.
[dagster-deltalake] Corrected the timeout property data type in ClientConfig to be str instead of int (thanks, @edsoncezar16!)
Added a config section to dagster.yaml to enable submitting backfill runs in a threadpool.
Expanded definition time validation for partition mappings to avoid runtime errors querying asset status.
[ui][beta] You can now re-execute a run that targeted a multi-asset from the point of asset failure instead of step failure, meaning only assets that failed or were skipped will be re-executed. To enable this option, turn on the Enable retries from asset failure feature flag in your user settings.
[ui] Made it easier to select and copy image names for code locations.
[ui] Added asset lineage navigation within the automation condition evaluation tree.
[ui] Viewing an evaluation tick now auto-expands the set of applicable automation conditions.
[ui] Added an asset graph node facet for viewing automation conditions and the most recent evaluation in the global asset graph.
[dagster-fivetran] The FivetranWorkspace resource is now marked as generally available (GA).
Changed Scaffolder.scaffold to have the params object as an attribute of the ScaffoldRequest object instead of a dictionary. This is a breaking change for those who have implemented a custom scaffolder.
Added support for scaffolding resources via dg scaffold dagster.resources path/to/resources.py.
Added support for the usage of @definitions in the defs hierarchy.
Dagster components now include code references by default. When viewing an asset emitted by a component in the asset catalog, this will allow you to jump to the backing component.yaml file in your editor.
[dagster-dbt] DbtProjectComponent fields now properly evaluate templates.
[dagster-sling] Updated the SlingReplicationCollectionComponent from using the asset_attributes parameter to translation, in order to match our other integration components.
Fixed an issue where dg dev failed with a temporary file permissions error when running on Windows. Thanks @polivbr!
Fixed a bug which could cause an error when calling MultiPartitionsDefinition.has_partition_key() on invalid keys.
Fixed a bug where the default multiprocess executor would fail runs where the child process for a step crashed, even if a retry policy resulted in a successful retry of that crashed step.
Fixed a bug with AutomationCondition.initial_evaluation which could cause it to return False for an asset that went from having a condition, to having no condition at all, back to having the original condition again.
[ui] Fixed an issue which could cause the "Target" field of AutomationConditionSensorDefinitions to render incorrectly when exactly one asset check was defined in a code location.
Dagster components no longer change the working directory while they are being loaded. This allows components to store relative paths and ensure that they will still work when accessed outside of the component loading codepath. This change may affect user-defined components that depend on Path.cwd() or os.getcwd(). Instead, you should use a path relative to the current source file when loading paths in a component, using the context.resolve_source_relative_path method (see resolve_dbt_project in DbtProjectComponent for an example).
Added dagster.job scaffolder.
[dagster-dbt] The DbtProjectComponent now has a translation_settings argument for adjusting DagsterDbtTranslatorSettings.
[dagster-dbt][fix] DbtProjectComponent fields now properly evaluate templates.
Fixed docstring for load_defs entrypoint, thanks @mattgiles!
If an unselected asset check is executed during a run, the system will now warn instead of throwing a hard error.
When evaluating AutomationCondition.any_deps_match or AutomationCondition.all_dep_match with an allow / ignore specified, an error will no longer be produced if the provided asset selection references an asset key that does not exist.
Added the ability to restrict the list of ports that dagster dev is allowed to use to open subprocesses when running on Windows, by setting the DAGSTER_PORT_RANGE env var to a string of the form <start>=<end> - for example "20000-30000".
[dagster-aws] The S3 sensor's get_objects now returns an empty list if no new files can be found since the since_last_modified parameter. Thanks @bartcode!
[dagster-dbt] @dbt_assets and build_dbt_manifest_asset_selection now support a selector argument, allowing you to use yaml-based selectors.
[dagster-k8s] improved run monitoring when running with increased backoff limits. Thanks @adam-bloom!
Fixed a bug with AutomationCondition.initial_evaluation which could cause it to return False for an asset that went from having a condition, to having no condition at all, back to having the original condition again.
Fixed a bug that would cause the AutomationCondition.any_deps_updated() condition to evaluate to False when evaluated on a self-dependency.
Fixed a bug in the quickstart_aws example. Thanks @Thenkei!
[ui] Fixed navigation between asset tabs by no longer preserving query parameters from one tab to the next.
[ui] Fixed an issue where the asset graph looked like it was still loading when it wasn't.
[dg] Error message when an invalid configuration file is detected is now shorter and more clear.
[components] Descriptions and examples have been restored for core models such as ResolvedAssetSpec. description and examples arguments have been added to Resolver for documenting fields on non-pydantic model based Resolvable classes.