You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
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/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.