dlt 1.28.1 Release Notes
Python 3.9 EOL
- 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/mypytarget 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 astime64[ns](via thearrow_streamreturn type) instead ofdate64(ms). dlt now normalizes all connectorx temporal columns to microsecond precision (the renamedcast_connectorx_temporal_columns), truncating ns→us losslessly since source DBs carry no nanoseconds. - Fix: ISO week/year in
detect_datetime_formatso 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
0x0characters 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\nonly. - Fix: metadata caching in
sql_database(#4067 @rudolfix) — User-passedmetadatais 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 whosedescriptionfrontmatter exceeds 1024 chars. The Codex install path now truncates the installedSKILL.mddescription to the cap (with a warning) so workbench skills likedlthub-routerload 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-initvsdlthub-startconsistently 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.ymlinto 27 parallel focused jobs (3 per OS/Python combo) so wall-clock is roughlymax(suite)instead ofsum(suites), moves runners toblacksmith-*variants, and enables Python 3.14 in CI (running the full suite, with 3.14-gated depssnowflake-connector-python>=4.4.0andcffi>=1.18). Also includes job/workflow renames; one functional reduction —lance_s3non-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
- @yashs33244 made their first contribution in #4061