All notable changes to this project are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Python 3.10 support. Both
dlthub-initand the scaffolded workspace now require Python 3.11 or newer: 3.10 reached end of life in October 2026,dlthub-client0.28.8 already dropped it, and the scaffold pins 3.13 via.python-version. Thetomlifallback dependency is gone with it.
- Capped
beaupybelow 5 so a lock refresh cannot take a major version silently. - Refreshed the bundled minimal workspace
uv.lockto the latest within-constraint versions (dlt1.31.0 → 1.32.0,dlthub0.30.0 → 0.32.0,dlthub-client0.28.7 → 0.28.8,fastmcp4.0.11 → 4.1.6,marimo0.25.1 → 0.25.2,pyarrow25.0.1 → 26.0.1), plus 48 transitive updates, droppedbackports-tarfile,importlib-metadata,jaraco-classes,jaraco-context,jaraco-functools,jeepney,keyring,more-itertools,pywin32-ctypes,secretstorage,zipp. - Synced the bundled minimal workspace dependencies with dlt's
workspace_deps(): changedduckdbtoduckdb>=0.9,<2. - Refreshed the root
uv.lockto the latest within-constraint versions (beaupy3.12.0 → 4.0.1,mypy2.4.0 → 2.4.1,posthog7.64.1 → 7.84.3,pytest9.1.1 → 9.2.0), plus 4 transitive updates, droppedemoji. - Refreshed the bundled skills to workbench
0c2b3a3.
make scaffold-deps-syncworks with dlt 1.32.0, whereWORKSPACE_DEPSbecameworkspace_deps()(#43).
- Refreshed the bundled minimal workspace
uv.lockto the latest within-constraint versions (notablydlt1.30.0 → 1.31.0,dlthub-client0.28.4 → 0.28.7,marimo0.24.0 → 0.25.1,duckdb1.5.5 → 1.5.6,fastmcp3.4.7 → 4.0.11,mcp1.29.1 → 2.3.0,cyclopts4.23.3 → 5.2.0,sqlglot30.17 → 30.21), plus transitive updates.dlthubis unchanged at 0.30.0. - Synced the bundled minimal workspace dependencies with dlt 1.31.0's
WORKSPACE_DEPS: raisedfastmcpto>=3.1.0and dropped the explicitcroniterentry (it is now a coredltdependency and still resolves in the lock). - Refreshed the root
uv.lock(notablyposthog7.45.1 → 7.64.1,mypy2.3.1 → 2.4.0). - Refreshed the bundled skills to workbench
c3f4f78: thedlthub-routerskill gains a "Background agents" section (routing "my job failed" todebug-deploymentor thedlthub-platform:job-inspectoragent) and two new trigger phrases in its description;setup-secretsfixes a docs URL suffix.
- Bumped the bundled minimal workspace's
dlthub-client0.28.3 → 0.28.4, pulling in its newregextransitive.
- The bundled minimal workspace now ships a
.mcp.jsonregistering the dlt workspace MCP server.
- Synced the bundled minimal workspace dependencies with dlt's
WORKSPACE_DEPS: addeds3fs(plusaiobotocore,aiohttp,botocoreand transitives) and dropped the redundantpython_version >= '3.10'markers onibis-frameworkandfastmcp. Refreshed the scaffolduv.lockaccordingly.
- Refreshed the bundled minimal workspace
uv.lockto the latest within-constraint versions (notablymarimo0.23.16 → 0.24.0,dlthub-client0.28.2 → 0.28.3,authlib1.7.2 → 1.8.0,cyclopts4.22.5 → 4.23.3,cryptography50.0.0 → 50.0.1,pydantic2.13.4 → 2.13.5), plus transitive updates.dltanddlthubare unchanged. - Refreshed the root
uv.lock(posthog7.39.1 → 7.45.1,pygments2.20.0 → 2.21.0,idna3.18 → 3.19).
- Refreshed the bundled minimal workspace
uv.lockto the latest within-constraint versions (notablydlt1.29.1 → 1.30.0,dlthub0.29.0 → 0.30.0,starlette1.3.1 → 1.6.0,sqlglot30.14 → 30.17,setuptools83.0 → 84.0), plus transitive updates.
- Refreshed the bundled minimal workspace
uv.lockto the latest within-constraint versions (notablydlt1.29.0 → 1.29.1,duckdb1.5.4 → 1.5.5,sqlglot30.13 → 30.14,cryptography49.0 → 50.0,marimo0.23.14 → 0.23.16), plus transitive updates.
- Refreshed the bundled minimal workspace
uv.lockto the latest within-constraint versions (notablydlt1.28.2 → 1.29.0,dlthub0.27.0 → 0.29.0,sqlglot28.0 → 30.13,marimo0.23.13 → 0.23.14), plus transitive updates. Dropped thepython-josecrypto stack (python-jose/rsa/ecdsa/pyasn1).
- Refreshed the bundled minimal workspace
uv.lockto the latest within-constraint dependency versions (notablydlt1.28.1→1.28.2; plus transitive bumps tofastmcp,cyclopts,uvicorn,croniter,tzdata, and others).
- Non-interactive runs (piped stdin, CI, coding agents) no longer crash at the venv prompt. Without a TTY,
dlthub-initused to fail withUnexpected error: (25, 'Inappropriate ioctl for device')and create no venv; it now proceeds with the prompt defaults and installs the venv unattended.
- In non-interactive runs the final "Next steps" line now points at the bundled skills in
.agents/skills/instead of telling you to open a coding agent.
- Refreshed the bundled skills to workbench
e8bcc26: thedlthub-routerskill now only runs thedlthub ai statusverification when the install result is ambiguous or MCP hasn't been checked this session, instead of every time. - Refreshed the bundled minimal workspace
uv.lockto the latest within-constraint dependency versions (notablydlthub-client0.28.0→0.28.1; plus transitive bumps tofastmcp,marimo,narwhals,uvicorn,typing-extensions, and others).
- Scaffold a committed
.python-version(pinned to3.13) into the minimal workspace so a new workspace gets a self-contained, reproducible venv — uv auto-provisions the interpreter onuv sync. Removed the matching.gitignoreentry so the pin is tracked; existing.python-versionfiles are left untouched.
- Anonymous usage telemetry:
dlthub-initnow emits a telemetry event on a command execution. Opt out with--no-telemetry,DLTHUB_INIT_TELEMETRY=0,DO_NOT_TRACK=1, or an existing dlt opt-out. See the README "Telemetry" section. - Scaffold a
__deployment__.pydeployment manifest into the minimal workspace — an empty stub (with guidance) where you import the pipelines and notebooks to deploy and list them in__all__.
- Refreshed the root and bundled minimal workspace
uv.lockfiles to the latest within-constraint dependency versions (notablydlthub-client0.27.9→0.28.0; dev toolingpytest9.1.0→9.1.1andruff0.15.17→0.15.20).
- Refreshed the bundled skills and the minimal workspace
uv.lock.
- Refreshed the bundled minimal workspace
uv.lock, bumpingdltto1.28.0along with its transitive dependencies.
- Initial release:
uvx dlthub-init [dir]scaffolds a dltHub workspace into a new or existing directory and optionally creates the virtual environment. - Non-destructive by default: safe to run in an existing directory. The run stops only if
.dlt/.workspacealready exists (the directory is already a workspace, exit code2); any other existing file is left untouched and reported as skipped.uv.lockis written only alongside a freshly createdpyproject.toml. Flags:--force,--merge,--no-pyproject,--no-gitignore,--no-sync,--yes. - Bundled minimal workspace with loosened dependency ranges and a committed
uv.lockfor reproducible installs. uv syncruns by default behind an interactive confirmation; a failed sync degrades to a warning so the scaffold still succeeds.make generate-skills/update-skills/check-skillspopulate the rootskills/directory from the dltHub AI workbench'sinittoolkit, pinned to aWORKBENCH_REFcommit (with a CI drift guard), mirroringdlthub-start's AI-generation flow.- Scaffolded workspaces receive the bundled skills: copied into
.agents/skills/(the canonical location most agents read) and linked into.claude/skills/via relative symlinks (copied on Windows or when symlinks are unavailable). The skills ship in the wheel from the single-sourceskills/directory. - After scaffolding, the next steps point you to open your coding agent in the workspace (the
cdanduv syncsteps drop out when not needed).