Scaffold a new dltHub workspace.
Project description
dlthub-start (beta)
Create a ready-to-run dltHub workspace with example pipelines, local uv
dependency setup, and bundled dltHub AI workbench files.
Quickstart
uvx is the recommended way to run the CLI. Run it from inside an empty
project directory so the AI workbench files (skills + MCP server) land at the
project root, where your coding agent runs:
mkdir my-workspace && cd my-workspace
uvx dlthub-start@latest
No uv? Install the CLI with pip (into your current Python environment) and
run it directly:
pip install dlthub-start
dlthub-start
The CLI scaffolds the workspace, checks for uv (offering to install it if
missing), installs dependencies with uv sync, runs your first pipeline on
dltHub, then prompts for your coding agent and sets up its files. Finally it
launches that agent in the workspace, seeded with a starter prompt — or, if the
agent has no command-line launcher, prints the prompt and copies it to your
clipboard so you can paste it in.
The full setup runs through the interactive prompts:
mkdir my-workspace && cd my-workspace
uvx dlthub-start@latest
You can also pass a target directory (uvx dlthub-start@latest my-workspace),
but then the AI files live one level down — so launch your coding agent from
inside that directory. If the generated workspace needs uv and it is not
installed yet, the CLI offers to install it; or install it yourself via the
official uv installation guide.
What You Get
- A Python dltHub workspace with project metadata customized to your directory name.
- A bundled scaffold copied from this package, not downloaded at create time.
- dltHub AI workbench files for your chosen coding agent (Claude, Cursor, or Codex).
- Shared dltHub AI toolkit files for data exploration, dltHub platform deployment, and REST API pipeline work.
- A local DuckDB-backed warehouse configuration for quick first runs.
Usage
uvx dlthub-start@latest [project-dir] [options]
Initializes a workspace in place when the target is empty: the current
directory by default, or project-dir if given. A non-empty target never
fails — the CLI scaffolds into a free directory instead and tells you where it
landed. With no argument it nests a playground subdirectory (then
playground-1, playground-2, …); an explicit project-dir that's occupied
falls back to <project-dir>-1, <project-dir>-2, …. Existing contents are
left untouched. A directory holding only benign cruft — editor/OS files
(.idea, .vscode, .DS_Store), tool caches, and a bare .git — still counts
as empty and initializes in place; anything the scaffold ships (.gitignore,
.dlt, …) counts as content and triggers the fallback.
Common options:
| Option | Description |
|---|---|
--agent claude |
Use the Claude workbench files. Choose exactly one agent (claude, cursor, or codex); if omitted you're prompted (defaults to claude). |
--agent cursor |
Use the Cursor workbench files. |
--agent codex |
Use the Codex workbench files. |
--verbose, -v |
Stream output from underlying subprocesses. |
Examples:
uvx dlthub-start@latest # interactive setup in the current (empty) directory — recommended
uvx dlthub-start@latest --agent codex # skip the agent prompt
uvx dlthub-start@latest my-workspace # alternative: create + initialize a subdirectory
Workspace contents
The bundled workspace is a quick, runnable first look: a sample online-shop pipeline, local warehouse config, and a generated deployment module.
Generated Workspace
The workspace is initialized at the project root, shaped roughly like this:
.
|-- pyproject.toml
|-- pipeline.py
|-- __deployment__.py
|-- README.md
|-- .dlt/
|-- .mcp.json
`-- .claude/ # your selected agent (or .cursor/ / .codex/)
Next Steps
From the workspace root:
uv run dlthub run load_sample_shop
uv run dlthub show
If you created the workspace with --skip-uv-sync, finish setup first with
uv sync. (If you scaffolded into a subdirectory, cd into it first.)
Troubleshooting
uvx: command not found
Install the CLI with pip install dlthub-start (into your current Python
environment) and run dlthub-start instead. The CLI will still offer to
install uv before syncing the generated workspace dependencies.
My workspace landed in a playground/-1 subdirectory
That's expected when the target wasn't empty: rather than refuse, the CLI
scaffolds into a free directory and prints where it went. To control the
location, pass an explicit empty target — uvx dlthub-start@latest my-workspace
— or run from an empty directory. The CLI never writes into a non-empty
directory; it picks a fresh one alongside it.
uv sync fails
Re-run with --verbose to see subprocess output:
uvx dlthub-start@latest my-workspace --verbose
If the scaffold was created successfully, you can also enter the workspace and
run uv sync directly after fixing the underlying dependency or network issue.
Development
For local setup, tests, build commands, make workspace, and AI workbench
scaffold regeneration, see CONTRIBUTING.md.
Publishing
To build and publish a release to PyPI:
make publish
This removes any previous dist/ artifacts, builds the package with
uv build, lists the artifacts, and prompts for a PyPI API token before
uploading with uv publish. Before publishing, run the release checklist in
CONTRIBUTING.md and make sure the version in
pyproject.toml has been bumped.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dlthub_start-0.8.0.tar.gz.
File metadata
- Download URL: dlthub_start-0.8.0.tar.gz
- Upload date:
- Size: 234.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.14 {"installer":{"name":"uv","version":"0.9.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cfdfa80152b3067c53e6183a717073a02b905e49f1740aae7b171f041d8014c3
|
|
| MD5 |
310d08543e62886ce19019a1d2eaa678
|
|
| BLAKE2b-256 |
c9201ee02dbecc4e63937b6b1f2e4a2ffaadb39cf274cc7026f5f230426e0fc7
|
File details
Details for the file dlthub_start-0.8.0-py3-none-any.whl.
File metadata
- Download URL: dlthub_start-0.8.0-py3-none-any.whl
- Upload date:
- Size: 204.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.14 {"installer":{"name":"uv","version":"0.9.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c115416f6029e61249e2839f0d6a1a17cdbf9fb35f41d549e2df06516bcfdd0
|
|
| MD5 |
8b95ed96d839096f292b1c9a5939667b
|
|
| BLAKE2b-256 |
fb9cc077d3f1ce3bcbf642e0c88a864e1aa0bc277680f36883e5a824d468aa0a
|