dlt 1.27.0 Release Notes
Breaking Changes
workspaceextra removed anddlthubcommand split out (#3929 @rudolfix) — Theworkspaceextra is gone; users should installmarimo,pyarrow,ibis,fastmcp, and other dependencies directly. Part of dev tooling moved to a plugin:dlt dashboard,dlt pipeline ... show,dlt pipeline ... mcpnow requirepip install dlt[hub].dlt aiwas moved todlthub ai.
Highlights
- Native Polars DataFrame and LazyFrame support in resources (#3837 @AyushPatel101) — Polars DataFrames and LazyFrames can now be yielded directly from
@dlt.resourcewithout manual conversion. Auto-detected and routed through the Arrow extraction pipeline; LazyFrames are auto-collected before conversion. - Databricks Zerobus loading (#3904 @jorritsandbrink) — New
databricks_adapter(my_resource, insert_api="zerobus")enables loading via the Databricks Zerobus SDK into Delta tables. API mirrorsbigquery_adapter; supported forappendwrite disposition. - Incremental filtering for
dlt.Relation(#3889 @burnash) — Apply incremental filters directly ondlt.Relation, enabling efficient incremental reads from datasets. dlthubcommand split (#3929 @rudolfix) — Reorganizes_workspacemodules and splits dev tooling (dashboard,mcp,ai) into a dedicateddlt[hub]plugin. See Breaking Changes above.
Core Library
- Native Polars DataFrame / LazyFrame support (#3837 @AyushPatel101) — See Highlights.
- Databricks Zerobus loading (#3904 @jorritsandbrink) — See Highlights.
- Incremental filtering for
dlt.Relation(#3889 @burnash) — See Highlights. dlthubcommand split (#3929 @rudolfix) — See Highlights / Breaking Changes.lancedestination REST Namespace support (experimental) (#3908 @jorritsandbrink) — Adds experimental REST Namespace support to thelancedestination, currently only validated against an ephemeral in-memory Lance REST Namespace proxy.-y/--yesflag to bypass non-interactive prompts (#3910 @anuunchin) — New flag auto-accepts allconfirm()prompts via a dedicatedALWAYS_CONFIRMflag inecho.py, without leaking intoprompt()ortext_input(). Resolves #3592.- Control dashboard section opening from URL (#3686 @djudjuu) — Lets external tools / agents pre-open a specific section of the dashboard via URL, useful for guiding users to particular pipeline state.
- Fix: Pydantic annotation metadata handling across 2.10–2.13 (#3863 @Travior) — Restores discriminated
RootModelhandling and preserves root-levelAnnotated[...]metadata after Pydantic 2.13 moved the discriminator offroot_field.annotation. - Fix: correctly materialize empty tables for multi-table resources (#3901 @anuunchin) — Tracks empty tables (not resources) so multi empty-table materialization works correctly. Resolves #3840.
- Fix:
scd2unmapped insert for nested tables (#3812 @deschman) — Generates an explicit column list (excluding SCD2from/tometadata) for the staging-to-destination insert, fixingDATATYPE_MISMATCHerrors on Spark/Databricks ANSI mode when schemas drift. Fixes #3811. - Fix(clickhouse): replica-safe merge delete temp tables (#3824 @RedZapdos123) — Detects the destination table engine and uses
ReplicatedMergeTree/SharedMergeTreefor merge delete temp tables, preventing duplicates on replicated/shared MergeTree deployments. Closes #3797. - Fix(databricks): replace deprecated
_user_agent_entry(#3935 @xodn348) — SwitchesDatabricksCredentials.to_connector_params()to the non-prefixeduser_agent_entry, silencing the deprecation warning printed on every connection. Closes #3934. - Fix:
with_load_idbreaking on non-root sibling branches (#3878 @Travior) - Fix: schema naming convention respects
max_lengthparam (#3826 @aditypan) — Removes spurious length appending in schema naming whenmax_lengthis provided. Fixes #3816. - Fix: propagate
dataset_nameto job metrics in load step (#3808 @rudolfix)
Docs
- Docs structure overhaul (#3884 @zilto) — Reorganizes the documentation site structure.
- OSS / paid split documentation (#3745 @VioletM)
- Cookbook: Arize Phoenix example (#3914 @zilto)
- Improve docs around
joinusage (#3902 @Travior) - Misc docs fixes (#3909 @zilto)
Chores
- CI from fork (#3897 @anuunchin) — Splits CI so secret-requiring tests run via a new
fork_tests_with_secrets.ymlworkflow gated by theci from forklabel and a maintainer approval in thefork-cienvironment. Resolves #3850. - Workspace tests setup fixes + CLI docs refresh (#3948 @rudolfix)
- Scope
fruit_pipelinefixture to module to avoid duckdb lock race (#3932 @burnash) — Stabilizes the dashboard e2e suite.