# Dagster 1.10: Mambo No 5

> Dagster 1.10 improves concurrency controls, expands ELT integration, and enhances the developer experience across orchestration workflows.

Source: https://dagster.io/blog/dagster-1-10-mambo-no-5
Published: 2025-02-12

We're excited to announce the release of Dagster 1.10 [Mambo No. 5](https://www.youtube.com/watch?v=EK_LN3XEcnw)!

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.

- [Concurrency Updates](#intuitive-concurrency-controls)
- [Modernized ELT Integrations](#modernized-elt-integrations)
- [Developer Experience Improvements](#developer-experience-improvements)
- And thanks to all the [community contributors since 1.9](#acknowledgments)

## 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"](https://docs.dagster.io/guides/operate/managing-concurrency#setting-a-default-limit-for-concurrency-pools) that can be enforced at different granularities.
- **Enhanced UI Visibility**: Concurrency information is now easily accessible and configurable directly in the UI.

```python
# 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
```

- **Improved Configuration**: Concurrency settings are now logically grouped under a dedicated `concurrency` block in deployment settings.

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](https://docs.dagster.io/integrations/libraries/fivetran) and [Airbyte](https://docs.dagster.io/integrations/libraries/airbyte/airbyte-oss) 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

```python
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})
```

- **Enhanced Metadata Visibility**: Better surfacing of pipeline status and performance data

## 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

```python
@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](https://docs.dagster.io/api/dagster/definitions) from modules:

```python
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](https://docs.dagster.io/api/api-lifecycle).

## 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.

```bash
pip install -U dagster
```

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

Check out our [updated documentation](https://docs.dagster.io) to learn more about these new features and improvements.

As always, we'd love to hear your feedback! Join us on [Slack](https://dagster.io/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](https://github.com/0xfabioo) | [HynekBlaha](https://github.com/HynekBlaha) | [Matthew Kuzyk](https://github.com/MattyKuzyk) | [Meg McRoberts](https://github.com/StackScribe) | [Simon Heather](https://github.com/X-Guardian) | [Alexander Grueneberg](https://github.com/agrueneberg) | [Alexander Bogdanowicz](https://github.com/akbog) | [Aksel Stokseth](https://github.com/aksestok) | [Alex Harris](https://github.com/aleexharris) | [Aleksei Kozharin](https://github.com/alekseik1) | [ARookieDS](https://github.com/arookieds) | [Avril Aysha](https://github.com/avriiil) | [Axell](https://github.com/axellpadilla) | [Benoit Perigaud](https://github.com/b-per) | [Daniel](https://github.com/bdart) | [Anton Burnashev](https://github.com/burnash) | [Charles Lariviere](https://github.com/chasleslr) | [Chris Histe](https://github.com/chrishiste) | [Christopher Tee](https://github.com/christeefy) | [Cooper Ellidge](https://github.com/cooperellidge) | [Daniel Gafni](https://github.com/danielgafni) | [Jonas Thelemann](https://github.com/dargmuesli) | [Dinis Rodrigues](https://github.com/dinis-rodrigues) | [divyanshu](https://github.com/divyanshu-in) | [David Liu](https://github.com/dliu27) | [Danny Xie](https://github.com/dnxie12) | [Dan Schafer](https://github.com/dschafer) | [Tyler Eason](https://github.com/easontm) | [Edson Nogueira](https://github.com/edsoncezar16) | [Egor Dmitriev](https://github.com/egordm) | [Ethan Wolinsky](https://github.com/eswolinsky3241) | [Đỗ Trọng Hải](https://github.com/hainenber) | [Ion Koutsouris](https://github.com/ion-elgreco) | [izzy](https://github.com/izzye84) | [ja14000](https://github.com/ja14000) | [Judah Rand](https://github.com/judahrand) | [kevin-longe-unmind](https://github.com/kevin-longe-unmind) | [Kristian André Jakobsen](https://github.com/kristianandre) | [Louis Guitton](https://github.com/louisguitton) | [Marijn Valk](https://github.com/marijncv) | [Matt Weingarten](https://github.com/matt-weingarten) | [Matthew Heguy](https://github.com/mheguy) | [Niko](https://github.com/nikomancy) | [Oral Ersoy Dokumacı](https://github.com/oedokumaci) | [ollie-bell](https://github.com/ollie-bell) | [Pablo Recio](https://github.com/pablorecio) | [tianzedavid](https://github.com/tianzedavid) | [Tiberiu Ana](https://github.com/tiberiuana) | [Shane Zarechian](https://github.com/zero-stroke) | [Adam Skärbo Jonsson](https://github.com/AdamSkarboJonsson) | [Andrew Ardill](https://github.com/Cogito) | [Fredrik Bakken](https://github.com/FredrikBakken) | [GBBBAS](https://github.com/GBBBAS) | [Marek H](https://github.com/Grzyblon) | [Anton](https://github.com/Gw1p) | [HynekBlaha](https://github.com/HynekBlaha) | [Morten Kuhlwein](https://github.com/Kuhlwein) | [Francisco](https://github.com/Milias) | [Oren Lederman](https://github.com/OrenLederman) | [Quinten Bruynseraede](https://github.com/QuintenBruynseraede) | [Rhiyo](https://github.com/Rhiyo) | [kamthanev](https://github.com/VenkyRules) | [abhinavDhulipala](https://github.com/abhinavDhulipala) | [aimeecodes](https://github.com/aimeecodes) | [Alex Harris](https://github.com/aleexharris)| [Alex Rasmussen](https://github.com/alexras) | [Aidas Petryla](https://github.com/apetryla) | [Ben Gotow](https://github.com/bengotow) | [Brian Tu](https://github.com/briantu) | [Charles Augello](https://github.com/chazmo03) | [Christopher Tee](https://github.com/christeefy) | [Daniel Gafni](https://github.com/danielgafni) | [David Aktas-Beckschulte](https://github.com/david-aktas-beckschulte) | [David Baker](https://github.com/davvidbaker) | [Daniel Bartley](https://github.com/dbrtly) | [Orestis Herodotou](https://github.com/digitaltopo) | [Dinis Rodrigues](https://github.com/dinis-rodrigues) | [Dragos Pop](https://github.com/dragos-pop) | [dwisdom-tk](https://github.com/dwisdom-tk) | [Tyler Eason](https://github.com/easontm) | [Sergei Nikiforov](https://github.com/futurewasfree) | [Gianfranco Demarco](https://github.com/gianfrancodemarco) | [David Beran](https://github.com/hom3r) | [Ion Koutsouris](https://github.com/ion-elgreco) | [Ian Jenkins](https://github.com/jenkoian) | [jj](https://github.com/jjyeo) | [Joscha Feth](https://github.com/joscha) | [Josh Taylor](https://github.com/joshuataylor) | [Josmar Cristello](https://github.com/josmarcristello) | [kang](https://github.com/kang8) | [Marijn Valk](https://github.com/marijncv) | [Melnikov Levy](https://github.com/markgrin) | [Maryam Khan](https://github.com/maryam-khan-dev) | [Matt Weingarten](https://github.com/matt-weingarten) | [Michael Mussato](https://github.com/michimussato) | [hvle](https://github.com/pomverte) | [Rune Hessner](https://github.com/rchrand) | [Pavel Roslovets](https://github.com/roslovets) | [shimon pats](https://github.com/shimon-cherrypick) | [stigmarl](https://github.com/stigmarl) | [Eric Yoo](https://github.com/swrookie) | [Thiago Azevedo](https://github.com/thiagoazcampos) | [Martin Erpicum](https://github.com/tintamarre) | [V](https://github.com/vincent0426) | [Thanabodee Charoenpiriyakij](https://github.com/wingyplus) | [Thierry Jean](https://github.com/zilto) | [zyd14](https://github.com/zyd14)

Stay tuned for more updates and enhancements in future releases.
