Skip to main content

PyPI version Python versions CI codecov License: MIT Ruff uv Conventional Commits

template-press

Press a new identity onto an existing repository. template-press is a standalone command-line utility: you point it at a target repo, it discovers and validates that repo's current identity, rewrites every occurrence to a new identity, and — only after verifying that none of the old identity survives — writes a receipt. A wrong or partial run fails loudly instead of silently corrupting the target.

It is not a project template you fork; it is a tool you run against other repos, one at a time. The rebrand engine is pure standard library, so the installed package has zero runtime dependencies.

Install

uvx --from template-press press --help   # run without installing
# or
pip install template-press

Usage

# preview the plan (writes nothing)
press rebrand --target ../my-repo --config press-answers.toml --dry-run

# apply, verify, and write a receipt
press rebrand --target ../my-repo --config press-answers.toml

press-answers.toml describes the destination identity:

[answers]
package_name = "new_pkg"
repo_name    = "new-repo"
app_name     = "newcli"
author       = "Jane Dev"
email        = "jane@example.com"
owner        = "janedev"

Keep your filled-in press-answers.toml out of the target (it is transient operator input, not committed state). A repo may commit a press/press-answers.example.toml placeholder to advertise the field shape — copy it, fill it, and pass it via --config. It has the same [answers] fields shown above.

The target's current identity is read from a committed <target>/press/press-source.toml. On a first run, --dry-run prints a proposed source-config from discovery; review it and re-run with --accept-discovery to write and use it.

How it stays safe

  • Config-first identity, discovery as a guard. The committed source-config is authoritative; discovery cross-checks it against the target and refuses to run on a mismatch, so the press never rewrites the wrong repo.
  • Verify-then-mark. After rewriting, a no-leak scan confirms no source identity remains. Any leftover ⇒ exit 1 and no receipt — a partial rebrand is a loud failure, not a false success.
  • Boundary-safe replacement. Short tokens (press, an owner like go) match only at word boundaries, so ordinary prose (compress, ongoing) is never touched.

Exit codes

The exit code is the contract:

Code Meaning
0 Verified — rebrand complete, no source identity remains, receipt written.
1 Leaks found after applying. No receipt; restore with git -C <target> checkout . && git clean -fd.
2 Precondition/config error (missing target, dirty tree, identity mismatch, existing receipt without --force, or unavailable atomic rename without --force). Nothing written.

--dry-run exits 0 after printing the plan without touching the target (no receipt). It warns on a statically unsupported host; target-filesystem capability is probed only during real apply. Forced apply uses a guarded non-atomic fallback and warns about its destination-overwrite race.

Documentation

Contributing

See AGENTS.md for the canonical toolchain and verification flow (just setup → just check → commit) and .github/CONTRIBUTING.md for the human contributor guide.

License

MIT — see LICENSE.

Metadata

Release files for template_press 4.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 template_press 4.1.0
File Size Uploaded
template_press-4.1.0.tar.gz 192.9 kB Details

Built distribution (wheel)

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

Total release size: 402.0 kB

Release files / template_press-4.1.0.tar.gz

Download URL template_press-4.1.0.tar.gz
Size 192.9 kB
Tags Source
SHA-256 checksum
How to use checksums
eb46e4115c369048e9afb68f107f5a4851c3822b578d3e78003261aba5ef0e84
BLAKE2b-256 checksum
How to use checksums
f9530f63e3eee06f09616192c49117cc901ab73b4398fb958f7bb5502f2e22ed
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","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":true}

Release files / template_press-4.1.0-py3-none-any.whl

Download URL template_press-4.1.0-py3-none-any.whl
Size 209.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cff924822d685811937708ca58a77b0301263b5f6d6aed6873445827b8221c62
BLAKE2b-256 checksum
How to use checksums
58de225b53ed543eaf0f17a9571232e5f233b058026e640ce8c9ad081610a792
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","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":true}

Release history Release notifications | RSS feed

This release

4.1.0 This release

2 release files

4.0.1

2 release files

4.0.0

2 release files

3.6.0

2 release files

3.5.0

2 release files

3.4.0

2 release files

3.3.0

2 release files

3.2.0

2 release files

3.1.0

2 release files

3.0.0

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