---
title: "Release highlights: 1.25"
description: Release highlights provide a concise overview of the most important new features, improvements, and fixes in a software update.
keywords: [dlt, data-pipelines, etl, release-notes, data-engineering]
---

# Release highlights: 1.25

## Breaking changes

- **`pipeline.dataset()` now includes every schema.** `pipeline.dataset()` without a `schema` argument used to return only the default schema's tables. With multiple schemas it now includes them all by default, so queries may see extra tables or rows in shared table names. Restore the old behavior with `pipeline.dataset(schema=pipeline.default_schema_name)` ([#3770](https://github.com/dlt-hub/dlt/pull/3770)).

## New `lance` destination

Load data into the [Lance](https://lance.org) columnar format on local disk or `s3`, `gs`, and `az` object storage, with optional vector embeddings generated through `lancedb` ([#3810](https://github.com/dlt-hub/dlt/pull/3810)). It uses the Lance Directory Namespace V2 catalog and supports branching. Install with `pip install "dlt[lance]"`, then point a pipeline at it. This complements the existing `lancedb` destination, which targets LanceDB Cloud.

```py
import dlt

pipeline = dlt.pipeline(
    pipeline_name="movies",
    destination="lance",
    dataset_name="movies_db",
)

info = pipeline.run(
    [{"id": 1, "title": "Blade Runner", "year": 1982}],
    table_name="movies",
)
```

## Query every schema from one dataset

A pipeline that loads several sources now exposes all their tables through one `pipeline.dataset()`, so you can query across sources together ([#3770](https://github.com/dlt-hub/dlt/pull/3770)). Tables that share a name across schemas have their columns merged and rows combined, with missing columns filled as `NULL`. Pass a schema name to scope to one source, and read its load history per schema.

```py
import dlt

pipeline = dlt.pipeline(pipeline_name="my_pipeline", destination="duckdb")

# includes tables from every schema the pipeline loaded
dataset = pipeline.dataset()

# scope to a single schema (the pre-1.25.0 default)
one_source = pipeline.dataset(schema="github")

# load history is tracked per schema
load_ids = dataset.load_ids(schema_name="github")
```

## Load metrics persist and record follow-up jobs

Load metrics are now persisted to the load package, so a load that is interrupted and resumed keeps the metrics of already-completed jobs instead of losing them, and each job records the follow-up jobs it creates. That follow-up graph is saved into the pipeline trace, closing the long-standing [#853](https://github.com/dlt-hub/dlt/issues/853) ([#3768](https://github.com/dlt-hub/dlt/pull/3768)).

## Shout-out to new contributors

Big thanks to our newest contributors:

* [@Pawansingh3889](https://github.com/Pawansingh3889)
* [@biefan](https://github.com/biefan)
* [@julien-c](https://github.com/julien-c)
* [@serl](https://github.com/serl)
* [@sangwookWoo](https://github.com/sangwookWoo)
* [@njaltran](https://github.com/njaltran)

**Full release notes**

[View the 1.25.0 release notes](https://github.com/dlt-hub/dlt/releases/tag/1.25.0)
