Project Initialisation
scaldys-project init scaffolds a new project from the
scaldys-template repository.
It downloads the template, collects project metadata through an interactive
wizard, and performs all file renaming and string substitution in one step —
producing a ready-to-use project directory with a working virtual environment
and (optionally) an initial git commit.
This is the recommended starting point for any new scaldys-compliant project.
What the command does
At a high level, scaldys-project init performs these operations in order:
Collects parameters — an interactive wizard prompts for project name, package name, author, description, and other metadata.
Acquires the template — downloads the
scaldys-templateZIP archive from GitHub, or copies a local directory if--localis supplied.Copies a filtered tree — excludes runtime and IDE artefacts that should not be part of a new project (see What is excluded).
Replaces placeholder strings — substitutes every occurrence of the template’s placeholder names in all text files (see Placeholder substitution).
Renames files and directories — renames every path component that still contains a placeholder string.
Applies targeted post-processing — corrects the copyright year in Sphinx
conf.pyfiles, the description and version inpyproject.toml, and the deployment mode inscaldys-project.toml.Runs post-init actions (optional) —
git initwith an initial commit anduv syncto create the virtual environment.
The interactive wizard
Running scaldys-project init with no flags launches a four-section wizard.
Each prompt shows a default value in brackets; press Enter to accept it.
Project identity
Prompt |
Notes |
|---|---|
Project name |
The human-readable display name used in README and documentation titles.
Prefer a single word. Multi-word names: use all lowercase with dashes
(e.g. |
Package name |
The Python import name. Underscores only — dashes are forbidden
(e.g. |
Project slug |
The repository / directory identifier and CLI entry-point name.
Lowercase with dashes only — underscores are forbidden
(e.g. |
Organization name |
Used as the top-level folder inside the OS app-data directory
(e.g. |
Build configuration
Prompt |
Notes |
|---|---|
Deployment mode |
Selects the Windows packaging strategy written to
|
Output & post-init actions
Prompt |
Notes |
|---|---|
Target directory |
Where to create the new project. Relative paths are resolved from the
current working directory. Default: |
Initialise git repository? |
When |
Run uv sync? |
When |
After all values are collected a summary panel is shown. Confirm with Y to proceed; press N to abort without creating any files.
Placeholder substitution
The template uses four distinct placeholder strings. They are substituted in a fixed order so that no partial match can corrupt another replacement:
Find |
Replace with |
Where it appears |
|---|---|---|
|
project name |
CLI help text, Sphinx doc titles, installer display name |
|
package name |
Python import paths, |
|
project slug |
CLI entry-point name, file names, Inno Setup script |
|
author email |
|
|
organization name |
|
|
|
README badge URLs (only when GitHub username is provided) |
Binary files (identified by extension or failed UTF-8 decoding) are skipped for content replacement. Only their names are updated where applicable.
What is excluded
The following items from the template are not copied into the new project:
Item |
Reason |
|---|---|
|
Git history is not transferred; a fresh repo is created instead. |
|
IDE-specific files; each developer generates their own. |
|
Compiled artefacts; rebuilt on first run. |
|
Runtime state (settings file, log); created at first application run. |
|
Distribution artefacts; generated by |
|
Regenerated fresh by |
|
Python byte-code caches and package metadata; rebuilt automatically. |
Using a local template copy
If you have a local clone of scaldys-template (for example a fork or a
version not yet pushed to GitHub), pass it with --local:
scaldys-project init --local ../scaldys-template
The command uses that directory as the template source instead of downloading from GitHub. The same exclusion list and substitution logic applies.
To pin to a specific GitHub branch or tag without using a local copy, pass
--template-ref:
scaldys-project init --template-ref v1.2.0
Overwriting an existing directory
If the target directory already exists the command aborts with an error. To
overwrite it add --force:
scaldys-project init --force
Note
--force permanently deletes the existing directory before creating the
new project. There is no undo. Use it only when you intentionally want
to re-scaffold the directory.
Running commands in the new project
After cd-ing into the new project directory, use uv run to invoke
scaldys-project commands. This ensures the project-local .venv is
used regardless of any other virtual environment that may be activated in the
shell:
cd my-cool-app
uv run scaldys-project check
uv run scaldys-project ci all
Alternatively, activate the project’s own virtual environment first and then run commands directly:
.\.venv\Scripts\Activate.ps1 # Windows PowerShell
scaldys-project check
Tip
If scaldys-project check reports that the package is not installed in
the active virtual environment, you are running it with a different venv
than the one uv sync created inside the new project. Use uv run
or activate .venv first.
CLI options reference
Option |
Description |
|---|---|
|
Use a local directory as the template source instead of downloading from GitHub. |
|
Branch or tag of |
|
Overwrite the target directory if it already exists. |
|
Skip |
|
Skip running |
|
Show command help and exit. |
For the complete init command entry in the CLI reference see
init.