Skip to main content

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)

Source distribution for polyinit 0.3.0
File Size Uploaded
polyinit-0.3.0.tar.gz 32.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for polyinit 0.3.0
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

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