February 12, 20253 minute read

Dagster 1.10: Mambo No 5

Intuitive Concurrency Controls, Improved ELT integrations, and Developer Experience Upgrades
Alex Noonan
Name
Alex Noonan
Handle
@noonan
Dagster 1.10: Mambo No 5

We're excited to announce the release of Dagster 1.10 Mambo No. 5!

This release focuses on bringing clarity and consistency across the platform, making existing features more intuitive and enjoyable to learn. We've significantly improved core areas like concurrency management, ELT integrations, and developer experience.

Let's dive into the major improvements in this release.

Intuitive Concurrency Controls

One of the biggest challenges in managing data pipelines is controlling concurrent execution. With Dagster 1.10, we've completely revamped how concurrency works to make it easier to understand, configure, and monitor.

Concurrency Improvements

  • Unified Concurrency Pools: Rather than having separate APIs for run and operation concurrency, we've introduced the concept of concurrency "pools" that can be enforced at different granularities.
  • Enhanced UI Visibility: Concurrency information is now easily accessible and configurable directly in the UI.
  • Improved Configuration: Concurrency settings are now logically grouped under a dedicated concurrency block in deployment settings.
# Before: Using tags for concurrency groups
@asset(tags={"dagster/concurrency_key": "heavy_process"})
def process_data():
    pass

# After: Using explicit concurrency argument
@asset(pool="heavy_process")
def process_data():
    pass

The new approach immediately clarifies what concurrency controls are in place and how they affect your pipelines.

Modernized ELT Integrations

We've refreshed our integrations with popular ELT tools like Fivetran and Airbyte to leverage Dagster's asset-based patterns better and provide enhanced visibility into your data pipelines.

Key Improvements

  • Customizable Asset Loading: A new translator pattern allows fine-grained control over how external tool assets are represented in Dagster
  • Simplified Interfaces: Consolidated multiple configuration methods into a single, intuitive get_asset_spec() method
  • Enhanced Metadata Visibility: Better surfacing of pipeline status and performance data
from dagster_fivetran import (
    DagsterFivetranTranslator,
    FivetranConnectorTableProps,
    FivetranWorkspace,
    load_fivetran_asset_specs,
)

import dagster as dg

fivetran_workspace = FivetranWorkspace(
    account_id=dg.EnvVar("FIVETRAN_ACCOUNT_ID"),
    api_key=dg.EnvVar("FIVETRAN_API_KEY"),
    api_secret=dg.EnvVar("FIVETRAN_API_SECRET"),
)


class MyCustomFivetranTranslator(DagsterFivetranTranslator):
    def get_asset_spec(self, props: FivetranConnectorTableProps) -> dg.AssetSpec:
        default_spec = super().get_asset_spec(props)
        return default_spec.replace_attributes(
            key=default_spec.key.with_prefix("prefix"),
        ).merge_attributes(metadata={"custom": "metadata"})


fivetran_specs = load_fivetran_asset_specs(
    fivetran_workspace, dagster_fivetran_translator=MyCustomFivetranTranslator()
)

defs = dg.Definitions(assets=fivetran_specs, resources={"fivetran": fivetran_workspace})

Developer Experience Improvements

We've made several quality-of-life improvements to make development with Dagster more seamless:

GRPC Server Consolidation

The dagster dev command now launches a single centralized server per code location, reducing computational overhead and minimizing process-related errors.

Enhanced Asset APIs

  • Flexible Dependency Declaration: Mix and match between deps parameter and argument-based dependencies
  • Improved IO Manager Support: Now works seamlessly with multi_asset_check
  • Per-Partition Metadata: Add specific metadata to individual partitions during materialization
@asset(deps=["upstream1", "upstream2"])
def my_asset(upstream2):  # Only need argument for IO manager access
    pass

@multi_asset_check(
    specs=[
        AssetCheckSpec("check1", asset=asset1),
        AssetCheckSpec("check2", asset=asset2),
    ]
)
def multi_check(asset1: int, asset2: int) -> Iterable[AssetCheckResult]:
    pass

New Module Loading APIs

We've introduced new APIs to simplify loading definitions from modules:

import dagster as dg
import package.submodule as my_submodule

defs = dg.load_definitions_from_module(my_submodule)

New API lifecycle

We've introduced new API lifecycle stages, with their own decorators, annotations and warnings, to help developers make informed decisions about which APIs to use in their projects.

  • Preview: Features at an early stage of development and testing are marked as preview.
  • Beta: Features that are still under development, but are ready for use in non-critical production environments, are marked as beta.
  • Superseded: Features that are still available, but no longer considered best practice, are marked as superseded.

Discover all API lifecycle stages in our guide.

Looking Forward

Dagster 1.10 represents our commitment to making data orchestration more intuitive and powerful. These improvements lay the groundwork for exciting features coming later this year.

Want to try out these new features? Upgrade to Dagster 1.10 today:

pip install -U dagster

Check out our updated documentation to learn more about these new features and improvements.

As always, we'd love to hear your feedback! Join us on Slack to share your thoughts and experiences with the new release.

Acknowledgments

We want to thank all community contributors for their efforts and innovations in making this release possible.

Fábio | HynekBlaha | Matthew Kuzyk | Meg McRoberts | Simon Heather | Alexander Grueneberg | Alexander Bogdanowicz | Aksel Stokseth | Alex Harris | Aleksei Kozharin | ARookieDS | Avril Aysha | Axell | Benoit Perigaud | Daniel | Anton Burnashev | Charles Lariviere | Chris Histe | Christopher Tee | Cooper Ellidge | Daniel Gafni | Jonas Thelemann | Dinis Rodrigues | divyanshu | David Liu | Danny Xie | Dan Schafer | Tyler Eason | Edson Nogueira | Egor Dmitriev | Ethan Wolinsky | Đỗ Trọng Hải | Ion Koutsouris | izzy | ja14000 | Judah Rand | kevin-longe-unmind | Kristian André Jakobsen | Louis Guitton | Marijn Valk | Matt Weingarten | Matthew Heguy | Niko | Oral Ersoy Dokumacı | ollie-bell | Pablo Recio | tianzedavid | Tiberiu Ana | Shane Zarechian | Adam Skärbo Jonsson | Andrew Ardill | Fredrik Bakken | GBBBAS | Marek H | Anton | HynekBlaha | Morten Kuhlwein | Francisco | Oren Lederman | Quinten Bruynseraede | Rhiyo | kamthanev | abhinavDhulipala | aimeecodes | Alex Harris| Alex Rasmussen | Aidas Petryla | Ben Gotow | Brian Tu | Charles Augello | Christopher Tee | Daniel Gafni | David Aktas-Beckschulte | David Baker | Daniel Bartley | Orestis Herodotou | Dinis Rodrigues | Dragos Pop | dwisdom-tk | Tyler Eason | Sergei Nikiforov | Gianfranco Demarco | David Beran | Ion Koutsouris | Ian Jenkins | jj | Joscha Feth | Josh Taylor | Josmar Cristello | kang | Marijn Valk | Melnikov Levy | Maryam Khan | Matt Weingarten | Michael Mussato | hvle | Rune Hessner | Pavel Roslovets | shimon pats | stigmarl | Eric Yoo | Thiago Azevedo | Martin Erpicum | V | Thanabodee Charoenpiriyakij | Thierry Jean | zyd14

Stay tuned for more updates and enhancements in future releases.


The Dagster Labs logo

We're always happy to hear your feedback, so please reach out to us! If you have any questions, ask them in the Dagster community Slack (join here!) or start a Github discussion. If you run into any bugs, let us know with a Github issue. And if you're interested in working with us, check out our open roles!

Follow us:


Read more filed under
Blog post category for Release. Release
Share this article
Share Dagster on Twitter / XCheck out Dagster on LinkedInShare Dagster on Reddit

Dagster Newsletter: Get updates delivered to your inbox

Dagster University