Skip to main content
▀▀██▀▀         ██                ▀██     ▀██             ▄██
  ██    ▀▀▀▀█▄ ██▀▀▀█▄ ▄█▀▀▀█▄    ██      ██   ▄█▀▀▀█▄    ██
  ██   ▄█▀▀▀██ ██   ██ ██▀▀▀▀▀    ██      ██   ██▀▀▀▀▀    ██
  ▀▀    ▀▀▀▀▀▀  ▀▀▀▀▀   ▀▀▀▀▀   ▀▀▀▀▀▀  ▀▀▀▀▀▀  ▀▀▀▀▀   ▀▀▀▀▀▀
                                                       ▀▀▀▀▀▀▀▀

t1 bootstrap — start a Python project without thinking about the boilerplate.

PyPI Python CI License: MIT

uv init gives you a folder. This gives you the folder you actually wanted: a venv on the Python you picked, a src/ layout, the directories you always end up creating by hand, and a pyproject.toml with your project name and lint config already filled in.

A start screen, then one screen with a live preview — keyboard or mouse. A full project lands in less than a second.

The t1 wizard: the form on the left, a live preview of the project tree on the right

Install

Runs on macOS, Linux and Windows (Windows Terminal with PowerShell 5.1 or 7). Needs Python 3.13 or newer — uv fetches one if the machine has none.

uvx t1-bootstrap                  # try it without installing anything
uv tool install t1-bootstrap      # keep it: `t1` on your PATH
pipx install t1-bootstrap         # the same, without uv

Use it

t1                                # start screen, then the wizard

⏎ on the start screen opens the form.

Key
↑ ↓ move between fields
← → move across a row of toggles, or pick a layout
⇥ next field, in reading order
space toggle a directory or extra
⏎ open the Python menu, next field, or create from the last one
^n create the project
^p command palette
^r reset the form
^q quit

The arrows walk the form the way it looks: ↓ from a toggle lands on the one below it, not the one beside it, and the pane scrolls to follow rather than scrolling out from under you. A rail in the accent colour marks the field you are in.

Mouse works everywhere too — click a field, click a toggle, scroll either pane.

The right-hand pane previews the exact tree you are about to get, and updates as you type.

Landing in the project

The build screen ends with two ways out:

Button Key
Open a shell here ⏎ quits into a shell inside the new project, .venv active
Done d quits and leaves your terminal where it was

Out of the box the first one starts a shell in the project — exit returns you to where you were. Install the wrapper once and your own shell follows along instead, so there is no nested shell and deactivate works as usual:

eval "$(t1 shell-init)"                                    # ~/.zshrc or ~/.bashrc
t1 shell-init fish | source                                # ~/.config/fish/config.fish
Invoke-Expression (t1 shell-init powershell | Out-String)  # $PROFILE

Without the TUI

t1 new "sales pipeline"                          # sensible defaults
t1 new etl -p 3.13 --dirs data,logs,sql          # pick the Python and the directories
t1 new lib --flat --extras none                  # just the package
t1 new api -C ~/projects --no-venv --no-git      # elsewhere, and without the slow parts
t1 new thing --dry-run                           # print the plan, write nothing
t1 options                                       # list directories and extras
t1 pythons                                       # list interpreters you can build on
t1 shell-init                                    # the shell function, for your rc file
t1 install-uv                                    # install uv, if you don't have it
t1 --version

--dirs and --extras take a comma list, or all / none. -p takes a version series such as 3.13; anything else is refused before a file is written.

If you don't have uv

uv builds the venv and installs dependencies. Without it you still get a project — just python -m venv on the interpreter you asked for, and no install. If uv isn't on your PATH, t1 offers to fetch it from Astral's official installer and shows you the exact command first. It only asks when there's someone there to answer, never installs on a --dry-run, and taking the offer is always optional:

curl -LsSf https://astral.sh/uv/install.sh | sh                                # macOS, Linux
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"   # Windows

What you get

sales-pipeline/
├── data/{raw,interim,processed}/   # each with .gitkeep, contents git-ignored
├── logs/
├── src/sales_pipeline/
│   ├── __init__.py
│   └── py.typed
├── tests/test_smoke.py
├── pyproject.toml                  # name, ruff, pytest, uv_build — all filled in
├── README.md
├── .python-version
├── .gitignore
├── .env + .env.example
└── .venv/

Directories — tests data logs scripts notebooks sql config docs assets output

Extras — .venv · git init · ruff + pytest · README.md · .env · .editorconfig · logging setup · console script

Extras pull in what they need: choosing logging setup turns on logs/ for you.

Why it's quick

The generated pyproject.toml uses uv_build rather than hatchling. Measured on a cold cache, first uv sync:

backend first sync
hatchling 3456 ms
uv_build 323 ms

Apple Silicon Mac, uv 0.9.30. Your numbers will differ; the ratio shouldn't.

uv sync also creates .venv on the pinned interpreter by itself, so there is no separate uv venv call. Writing every file costs about 6 ms; the rest is git and uv.

Development

git clone https://github.com/tabelle1/t1-bootstrap && cd t1-bootstrap
uv sync
uv run pytest
uv run ruff check . && uv run ruff format .
uv run ty check src
uv run t1                                                 # the wizard, from the checkout
uv run textual run --dev t1_bootstrap.app:BootstrapApp   # with the Textual devtools
uv run python scripts/screenshot.py                       # refresh docs/wizard.svg

CI runs the same checks on macOS, Linux and Windows, plus a leg on the oldest dependency versions the package claims to support. User-visible changes are recorded in CHANGELOG.md as they land. Bugs and ideas: open an issue. Security concerns: see SECURITY.md.

License

MIT © Philipp Formanek.


Built with Textual. A Tabelle1 tool.

Metadata

Release files for t1-bootstrap 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for t1-bootstrap 0.1.0
File Size Uploaded Provenance
t1_bootstrap-0.1.0.tar.gz 49.5 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for t1-bootstrap 0.1.0
File Interpreter ABI Platform
t1_bootstrap-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 89.1 kB

Release files / t1_bootstrap-0.1.0.tar.gz

Download URL t1_bootstrap-0.1.0.tar.gz
Size 49.5 kB
Tags Source
SHA-256 checksum
How to use checksums
4eff75161c3b075afb00ba63746d28146250e351b31eae13200eef0ed489b723
BLAKE2b-256 checksum
How to use checksums
d7ee6033d40511fc5af4409cf543d4e2e24b9cb01fe7fc480ad66435b786987f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / t1_bootstrap-0.1.0-py3-none-any.whl

Download URL t1_bootstrap-0.1.0-py3-none-any.whl
Size 39.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6f758980f00bd03d92b5b60a57010dc025a3d0fcc8ca91be7dfb479ee509a8c1
BLAKE2b-256 checksum
How to use checksums
935c65c5a2a956909b2f49c82b2c9252af45e6f0e29d7bb3310851cf0db8d284
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for t1-bootstrap 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page