github dlt-hub/dlt 1.28.1

5 hours ago

dlt 1.28.1 Release Notes

Python 3.9 EOL

  1. Dropped Python 3.9 support (#4074 @Travior) — Python 3.9 reached end-of-life on 2025-10-31. dlt no longer tests against or advertises support for 3.9. The ruff/mypy target versions were bumped accordingly. Users still on 3.9 must upgrade to 3.10+ to use this release.

Highlights

  • Dataset browser shown by default in the dltHub dashboard (#4068 @lis365b) — The dashboard now opens directly on the dataset browser (no entry page, no toggle), auto-selecting the most recently used pipeline. Empty-state copy was made generic so it reads correctly both locally and in the dltHub runtime. Resolves product_backlog#153.

Core Library

  • Dataset browser by default in the dashboard (#4068 @lis365b) — see Highlights.
  • Fix: connectorx temporal-column precision on newer connectorx (#3996 @tetelio) — Newer connectorx returns timestamps as timestamp[ns] and times as time64[ns] (via the arrow_stream return type) instead of date64 (ms). dlt now normalizes all connectorx temporal columns to microsecond precision (the renamed cast_connectorx_temporal_columns), truncating ns→us losslessly since source DBs carry no nanoseconds.
  • Fix: ISO week/year in detect_datetime_format so week-date cursors round-trip (#4061 @yashs33244) — Week-date formats (YYYY-Www) were detected as %Y-W%W, which disagrees with ISO weeks at year boundaries. "2026-W01" parsed to 2025-12-29 and re-rendered as "2025-W52", silently corrupting saved incremental cursors. Now emits %G-W%V / %G-W%V-%u.
  • Fix: remove 0x0 characters from postgres INSERT strings (#4086 @rudolfix) — Postgres escaping allowed null (0x0) characters through; they are now stripped in the escape function. INSERT statements are also split by \n only.
  • Fix: metadata caching in sql_database (#4067 @rudolfix) — User-passed metadata is now correctly consulted for cached tables in both eager and deferred reflection. Fixes #4066.
  • Fix: cap codex skill descriptions at 1024 chars on ai init (#4072 @lis365b) — Codex silently drops skills whose description frontmatter exceeds 1024 chars. The Codex install path now truncates the installed SKILL.md description to the cap (with a warning) so workbench skills like dlthub-router load correctly.

Docs

  • Add EU static egress IPs for the dltHub platform (#4085 @tetelio)
  • Add EU proxy/egress IPs for the dltHub platform (#4084 @tetelio)
  • Recommend dlthub-init vs dlthub-start consistently in onboarding docs (#4080 @bjoaquinc)
  • Clean up hub getting-started/installation wording and remove outdated commands (#4070 @ShreyasGS)
  • Document the managed playground destination (#4075 @tetelio)

Chores

  • Faster CI testing + Python 3.14 on CI (#3996 @tetelio) — Splits monolithic test_common.yml into 27 parallel focused jobs (3 per OS/Python combo) so wall-clock is roughly max(suite) instead of sum(suites), moves runners to blacksmith-* variants, and enables Python 3.14 in CI (running the full suite, with 3.14-gated deps snowflake-connector-python>=4.4.0 and cffi>=1.18). Also includes job/workflow renames; one functional reduction — lance_s3 non-essential tests now run only on full-suite triggers.
  • Fix: pin airflow smoke-test installs with the airflow constraints file (#4069 @Travior) — Adds a script that fetches the latest airflow version and builds the matching constraint file, as airflow recommends for application installs.

New Contributors

Don't miss a new dlt release

NewReleases is sending notifications on new releases.