navi-bootstrap
navi-bootstrap generates operational infrastructure for Python projects — CI, security scanning, code review, release pipelines, quality gates, and the project skeleton itself — from declarative template packs.
Quick start
pip install navi-bootstrap
nboot new my-project
One command, complete project:
my-project/
├── pyproject.toml
├── src/my_project/__init__.py
├── src/my_project/py.typed
├── tests/conftest.py
├── tests/test_my_project.py
├── README.md
├── LICENSE
├── .gitignore
├── .github/workflows/tests.yml
├── .github/dependabot.yml
├── .pre-commit-config.yaml
├── AGENTS.md
├── DEBT.md
└── nboot-spec.json
How it works
spec (what your project is) + pack (what to generate) → rendered output
The spec describes your project: name, owner, Python version, license. The pack is a set of Jinja2 templates with a manifest declaring conditions and loops. The engine connects them deterministically — same spec + same pack = same output, every time.
Packs
Eight template packs, layered with explicit dependencies:
| Pack | What it generates |
|---|---|
| scaffold | Project skeleton — pyproject.toml, src layout, tests, README, LICENSE, .gitignore |
| base | CI workflows, pre-commit config, dependabot, tool config, AGENTS.md, DEBT.md |
| security-scanning | CodeQL analysis, OpenSSF Scorecard |
| github-templates | Bug report, feature request, issue config, PR template |
| review-system | Code review and security review workflows |
| quality-gates | Quality metrics baseline, test parity map |
| code-hygiene | CONTRIBUTING.md |
| release-pipeline | SLSA L3 build workflow, release dispatcher, changelog config |
nboot new applies scaffold + base. All other packs are elective and can be layered on afterward with nboot apply.
CLI reference
| Command | Description |
|---|---|
nboot new <name> |
Create a new project with scaffold + base packs |
nboot render --spec --pack --out |
Render a single pack to a new directory |
nboot apply --spec --pack --target |
Apply a pack to an existing project |
nboot diff --spec --pack --target |
Preview changes without writing |
nboot init --target |
Generate spec by inspecting an existing project |
nboot validate --spec |
Validate spec and manifest |
nboot list-packs |
List available packs |
Architecture
Six-stage pipeline. Stateless and deterministic through stage 3.
spec.json + pack/
-> [Stage 0: Resolve] action SHAs via gh api
-> [Stage 1: Validate] spec + manifest against schemas
-> [Stage 2: Plan] evaluate conditions, expand loops, build render list
-> [Stage 3: Render] Jinja2 render to memory
-> [Stage 4: Validate] run post-render checks
-> [Stage 5: Hooks] post-render shell commands
-> output/
Stages 0-3 are pure functions — spec and pack in, rendered files out, no side effects. All project-specific opinions live in the spec and the template pack, never in the engine.
src/navi_bootstrap/
├── cli.py # Click CLI: new, init, render, apply, diff, validate, list-packs
├── engine.py # Plan + Render (stages 2-3), sandboxed dest paths
├── manifest.py # Manifest loading + validation
├── spec.py # Spec loading + JSON Schema validation
├── resolve.py # Stage 0: action SHA resolution
├── validate.py # Stage 4: post-render validation
├── hooks.py # Stage 5: hook runner
├── sanitize.py # Input sanitization (homoglyphs, traversal, injection)
├── init.py # Project inspection -> spec generation
├── diff.py # Drift detection (render-to-memory + unified diff)
└── packs.py # Pack discovery, resolution, and ordering
Development
uv sync # Install dependencies
uv run pytest tests/ -v # Run all tests
uv run ruff check src/navi_bootstrap/ tests/ # Lint
uv run ruff format src/navi_bootstrap/ tests/ # Format
uv run mypy src/navi_bootstrap/ # Type check
uv run bandit -r src/navi_bootstrap -ll # Security scan
pre-commit run --all-files # All hooks
Conventional commits: feat:, fix:, chore:, docs:, test:, refactor:.
Full documentation: Wiki — architecture, pack reference, spec schema, CLI reference, custom pack authoring.
License
MIT -- Copyright (c) 2026 Project Navi
Metadata
Release files for navi-bootstrap 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| navi_bootstrap-0.1.2.tar.gz | 194.9 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| navi_bootstrap-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 254.6 kB
Security for navi-bootstrap 0.1.2
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for navi_bootstrap-0.1.2.tar.gz
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 Mar 3, 2026.
Transparency logA 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.