Release highlights: 1.23
Breaking changes
- Legacy Streamlit dashboard removed. The legacy Streamlit-based pipeline dashboard has been removed (#3674).
dlt pipeline shownow generates and launches the marimo-based workspace dashboard instead, which requires marimo to be installed.
AI Harness for coding agents
The AI Harness ships as the dlthub ai command group, installed with pip install dlt[hub] (#3674). Run dlthub ai init to configure a coding agent (Claude Code, Cursor, or Codex) with dlt rules and skills, install curated toolkits with dlthub ai toolkit, and run a pluggable MCP server with dlthub ai mcp. In the base package, dlt ai redirects here.
pip install "dlt[hub]"
dlthub ai init --agent claude
Iceberg table and namespace properties
Set Iceberg table properties per resource with iceberg_adapter(table_properties=...), or as defaults for every table via iceberg_table_properties on the filesystem destination (#3699). Namespace properties use iceberg_namespace_properties. Properties apply only when the table or namespace is first created, and adapter values win over destination defaults on conflicting keys.
import dlt
from dlt.destinations.adapters import iceberg_adapter
@dlt.resource(table_format="iceberg")
def my_data():
yield [{"id": 1, "value": "a"}]
iceberg_adapter(
my_data,
table_properties={"write.format.default": "parquet"},
)
pipeline = dlt.pipeline("iceberg_props", destination="filesystem")
pipeline.run(my_data)
Faster JSON normalization
dlt's relational normalizer and schema evolution are substantially faster (#3626): the maintainers benchmark roughly 5x on flat data, about 2x on nested REST API data, about 1.8x on wide nested data, and 2 to 3 times faster ISO timestamp parsing. Every pipeline that normalizes JSON benefits automatically.
Databricks notebook compute credentials
When dlt runs inside a Databricks notebook without explicit server_hostname or http_path, it now derives server_hostname from the workspace URL and builds http_path from the notebook's own cluster, instead of defaulting to a SQL warehouse (#3667). Warehouse discovery remains the fallback when no cluster context is available.
Shout-out to new contributors
Big thanks to our newest contributors:
Full release notes