polyinit
An interactive project generator for the terminal. One command, six languages, sensible defaults.
pip install polyinit
polyinit create
Why
Language-native scaffolders are excellent at their own language and useless at
the other five. cargo new cannot make you a Go service, and npm create
cannot make you a Rust library. polyinit gives you a single interactive flow
that spans every language you are likely to touch, with the same questions and
the same layout each time.
Usage
polyinit create
Walks you through name, language, project type and features, shows a summary to confirm, then generates the project.
polyinit create # ask for everything
polyinit create my-project # skip the name prompt
The project type list is derived from the templates that actually ship, so every combination you can pick is one that will generate.
polyinit run
Runs the project in the current directory. It detects the language from the files present and picks the real entry point, rather than guessing.
polyinit run # detect language, ask for runner
polyinit run python uv # explicit language and runner
$ polyinit run
Running: python -m my_app.main
Hello world from my-app!
For a library, which has no entry point, it says so and points you at the tests instead of failing with a stack trace.
polyinit templates
Lists every language and project type that ships with the installed version.
polyinit doctor
Checks your toolchain and verifies the installation. Useful when a template needs something you have not installed.
polyinit version
Prints the installed version.
Templates
| Language | Project types |
|---|---|
| Python | CLI, Library, Web API |
| JavaScript | CLI, Library, Web API |
| TypeScript | CLI, Library, Web API |
| Rust | CLI, Library, Web API |
| Go | CLI, Library, Web API |
| Markdown | Document |
Python projects can optionally include a virtual environment, pytest and ruff.
Selecting a feature that was skipped removes the matching config from
pyproject.toml too, so you never get a [tool.pytest.ini_options] section
pointing at a tests/ directory that is not there.
Adding a template
Templates live in src/polyinit/templates/<language>/<project-type>/ and are
plain project directories. Drop one in and it appears in the prompts on the
next run, with no code change.
Files and directory names can use two placeholders:
| Placeholder | Example input | Result |
|---|---|---|
{{project_name}} |
my-app |
my-app |
{{package_name}} |
my-app |
my_app |
{{package_name}} is also substituted in directory names, so
src/{{package_name}}/ becomes src/my_app/.
Templates ship with every feature enabled and are valid projects on their own. Opting out of a feature removes it after rendering, which keeps templates usable by hand without running polyinit.
Development
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pytest # unit tests
ruff check .
To build every shipped template and confirm the set is coherent:
python -m tests.check_templates
This writes each template to generated/ so you can build or run it with the
real toolchain. CI does this across Python, Node, Rust and Go.
License
MIT. See LICENSE.
Metadata
Release files for polyinit 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| polyinit-0.3.0.tar.gz | 32.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| polyinit-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 77.4 kB
Release files / polyinit-0.3.0.tar.gz
| Download URL | polyinit-0.3.0.tar.gz |
|---|---|
| Size | 32.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
253f107991255059093242831a70c00475a3a3fcebc35e0a58292d59fd93f6b7
|
|
BLAKE2b-256 checksum How to use checksums |
8e0cbc853c11fcea3fb8d2feaaeef0c36fe401d636bcded964a2d3dbfa71368a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.
Transparency logRelease files / polyinit-0.3.0-py3-none-any.whl
| Download URL | polyinit-0.3.0-py3-none-any.whl |
|---|---|
| Size | 44.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ddf1674ad99e95cc3674c49352950a7e2a3e5961135e8f0b85474efb2b3814d5
|
|
BLAKE2b-256 checksum How to use checksums |
05cdc117ffb3099c6b12701d55015ff6028771a2ae2d3cbfc795effcf0fc1048
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.
Transparency log