Skip to main content

newstack

CI python dependencies license

Scaffold a new project on any popular stack — and every starter it emits is proven green in CI.

$ newstack new python-lib ~/code/mylib
newstack 0.1.0  ·  python-lib  →  /home/you/code/mylib

  created       8 files
  git           initialised on main, first commit made

  next:
    cd /home/you/code/mylib
    uv sync
    uv run pytest

Why this exists

cookiecutter, copier, yeoman, degit, npm create … and gh repo create --template all solve part of the problem. Two things are still missing in practice:

  1. One tool for every stack. Python templates are Python-only, JS templates are JS-only, and gh repo create --template clones a whole repository with no variables.
  2. A guarantee that the template still works. Templates rot silently. You find out the starter is broken after you have already started building on top of it.

newstack fixes both. It is one zero-dependency CLI that carries a curated stack registry, and every stack in that registry is generated and checked on every push (newstack check --all in CI). If a starter breaks, the badge goes red — not your first day of work.

Install

Not on PyPI yet — install straight from the repository:

uv tool install git+https://github.com/DawnofGenX/newstack
# or, without installing:
uvx --from git+https://github.com/DawnofGenX/newstack newstack list

From a clone:

git clone https://github.com/DawnofGenX/newstack && cd newstack
uv sync && uv run newstack list

Use

newstack list                       # what is available, and what each stack needs
newstack new react-vite-ts ~/code/app
newstack new fastapi ~/code/api -d "Billing service" --author "Your Name"
newstack new python-lib ~/code/lib --dry-run     # preview, write nothing
newstack new python-cli ~/code/tool --github     # create the repo and push it too
newstack check --all                # prove every stack on this machine
newstack doctor                     # which toolchains do I have?

Every command takes --json where it makes sense, so the tool is scriptable.

newstack new renders variables, initialises git with a first commit, and (with --github) creates the remote repository and pushes — one command from empty directory to CI-ready project.

Stacks

Stack What you get Toolchain
python-lib src layout, hatchling build, pytest, ruff, 4-version CI matrix uv
python-cli console entry point on argparse, zero runtime deps, tested CLI uv
fastapi typed JSON API, pydantic models, TestClient tests, Dockerfile uv
react-vite-ts React 19 + Vite + TS, Vitest + Testing Library, typecheck + build node, npm
node-express-ts Express 5 API, typed handlers, supertest tests node, npm
static-site HTML/CSS/JS page with a GitHub Pages deploy workflow node

Each generated project ships its own .github/workflows/ that is ready to run, plus a README, an MIT licence and a .gitignore.

The green guarantee

A template is only as good as its last successful run, so newstack treats verification as a first-class command:

$ newstack check --all
  fastapi          PASS    1.0s  3 step(s)
  node-express-ts  PASS    2.2s  3 step(s)
  python-cli       PASS    0.5s  4 step(s)
  python-lib       PASS    0.4s  3 step(s)
  react-vite-ts    PASS    3.2s  4 step(s)
  static-site      PASS    0.1s  3 step(s)

(Real timings from a warm package cache — a cold run takes about a minute because npm install and uv pip install have to fetch packages.)

check generates the stack into a throwaway directory, runs the commands listed in its manifest (install → lint → test → build), reports per-step timings, and deletes the directory unless you pass --keep. The same command runs in this repository's CI, once per stack, on every push.

How it compares

newstack cookiecutter copier yeoman degit / npm create gh repo create --template
Cross-language stacks in one tool yes no no partial no n/a
Runtime dependencies 0 Python Python + git Node Node gh
Generated starter verified in CI yes, per stack no no no no no
Template updates after generation no (roadmap) no yes (copier update) no no no
Creates the git repo + remote yes (--github) no via hooks no no yes

Pick copier if you need copier update three-way merges against a single template you own. Pick newstack when you want the same standard applied across several languages without maintaining one template per stack.

Adding a stack

A stack is a directory with a manifest and a template tree:

src/newstack/data/stacks/my-stack/
├── stack.json
└── template/
    ├── README.md
    └── ...                      # {{ project_name }}, {{ package_name }}, {{ npm_name }},
                                 # {{ title }}, {{ description }}, {{ author }}, {{ email }},
                                 # {{ year }}, {{ date }}
{
  "name": "my-stack",
  "title": "My stack",
  "language": "python",
  "blurb": "One line shown by `newstack list`",
  "requires": ["uv"],
  "next_steps": ["cd {path}", "uv run pytest"],
  "verify": [
    {"name": "test", "cmd": "uv run pytest", "tools": ["uv"], "timeout": 600}
  ]
}

{{! escapes a literal {{, and ${{ ... }} (GitHub Actions) is left untouched. Point NEWSTACK_STACKS at a directory of your own stacks to use private ones — same manifest format, no fork required.

Design

  • Zero runtime dependencies. argparse and the standard library only, so uvx newstack starts instantly and works offline.
  • Templates are plain files. No Jinja, no DSL — a reviewer can read a template and know exactly what gets written.
  • Verification is a product feature, not an afterthought. check is the same code path CI uses.

Roadmap

  • newstack update — re-apply upstream template changes to an existing project.
  • More stacks: Go service, Rust CLI, Django, Vue, SvelteKit.
  • --license apache-2.0|bsd-3 and other variable choices beyond the current defaults.

Licence

MIT — see LICENSE.

Metadata

Release files for newstack 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 newstack 0.1.0
File Size Uploaded Provenance Actions
newstack-0.1.0.tar.gz 28.3 kB Without provenance Details for newstack-0.1.0.tar.gz

Built distribution (wheel)

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

Total release size: 76.7 kB

Release files / newstack-0.1.0.tar.gz

Download URL newstack-0.1.0.tar.gz
Size 28.3 kB
Tags Source
SHA-256 checksum
How to use checksums
39770c5f9b9965f24a069c8fd9dc18b185180b37c306756c696e38efa7d3e727
BLAKE2b-256 checksum
How to use checksums
6b4a775d9e0a00642dfd4ff4ec7114a1906f8ac1d6067c28c53c291202dfe409
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.31 {"installer":{"name":"uv","version":"0.11.31","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":null}

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

Download URL newstack-0.1.0-py3-none-any.whl
Size 48.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ecb2f3a6de9e3e0b0013b57b34786bc2fb1abfb6162909f6d3ac6090c2b5b26a
BLAKE2b-256 checksum
How to use checksums
3e37b47d3e779c6ade0d898442ea3f41b162f0ecf91381635ec36d6bf1da3d32
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.31 {"installer":{"name":"uv","version":"0.11.31","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":null}

Security for newstack 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.

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