Skip to content

Commit ad601e5

Browse files
mnriemCopilot
andauthored
docs: add PyPI as second supported install route (#3425) (#3516)
* docs: add PyPI as second supported install route (#3425) The specify-cli package is now officially published to PyPI via the publish-pypi.yml trusted-publishing workflow. Document PyPI as a supported install route alongside the GitHub source install: - Revise the outdated "not affiliated" warning in installation.md to reflect that specify-cli on PyPI is an official, maintained channel. - Add an "Install from PyPI" section and list PyPI under alternative package managers. - Add a dedicated docs/install/pypi.md guide (install, pin version, verify, upgrade, uninstall). - Add the PyPI guide to the docs TOC. - Mention the PyPI route in the README quick start. Assisted-by: GitHub Copilot (model: Claude Opus 4.8, autonomous) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * docs: refine PyPI install guidance from review (#3516) Address review feedback for the PyPI install documentation: - Reword the verification guidance so `specify version` is described as a local version/runtime check rather than proof of package provenance. - Clarify that upgrading a pinned `uv tool` install to the newest PyPI release requires an unpinned reinstall command. - Note that `specify self upgrade` rebuilds `uv tool` and `pipx` installs from the GitHub source release URL rather than preserving a PyPI-based installation. Assisted-by: GitHub Copilot (model: Claude Opus 4.8, autonomous) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * docs: clarify PyPI verification and upgrade guidance Assisted-by: GitHub Copilot (model: MAI-Code-1-Flash, autonomous) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * docs: point PyPI provenance check to source metadata Address review feedback: version/list commands do not reveal install provenance. Direct readers to the source metadata their package manager records (pipx list --json, PEP 610 direct_url.json) to confirm whether an install came from PyPI or a Git URL, and note pip show cannot see uv/pipx-managed environments. Assisted-by: GitHub Copilot (model: Claude Opus 4.8, autonomous) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
1 parent 77ebd5f commit ad601e5

4 files changed

Lines changed: 118 additions & 4 deletions

File tree

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,12 @@ Requires **[uv](https://docs.astral.sh/uv/)** ([install uv](./docs/install/uv.md
5151
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git@vX.Y.Z
5252
```
5353

54+
Prefer installing from PyPI? The `specify-cli` package is also published there:
55+
56+
```bash
57+
uv tool install specify-cli
58+
```
59+
5460
See the [Installation Guide](./docs/installation.md) for alternative methods, verification, upgrade, and troubleshooting.
5561

5662
### 2. Initialize a project

docs/install/pypi.md

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# Installing from PyPI
2+
3+
Spec Kit is published to PyPI as [`specify-cli`](https://pypi.org/project/specify-cli/), maintained by the Spec Kit maintainers. Installing from PyPI is the second supported install route alongside installing from the [GitHub source](../installation.md#install-from-source--persistent-installation-recommended). Use whichever fits your workflow — both provide the same `specify` CLI.
4+
5+
> [!NOTE]
6+
> The PyPI release version tracks the GitHub release tags (for example, PyPI `0.12.11` corresponds to the `v0.12.11` tag). `specify version` is only a local version/runtime sanity check — it reports the installed version but not where the `specify` executable came from, so it cannot distinguish a PyPI install from a Git install. To confirm the install source, inspect the source metadata your package manager records: `pipx list --json` reports the exact install specification for each tool, and for uv/pip installs you can check the package's [PEP 610](https://peps.python.org/pep-0610/) `direct_url.json` inside its `*.dist-info` directory (a Git or URL install records the repository/archive URL there, while a plain PyPI index install does not create that file). Note that `pip show specify-cli` only prints package metadata and will not see uv/pipx-managed environments from the host interpreter.
7+
8+
## Install Specify CLI
9+
10+
Use whichever Python tool you already have:
11+
12+
```bash
13+
# Using uv (recommended)
14+
uv tool install specify-cli
15+
16+
# Or using pipx
17+
pipx install specify-cli
18+
19+
# Or using pip
20+
pip install specify-cli
21+
```
22+
23+
### Install a specific release
24+
25+
Pin an exact version for reproducible installs (check [PyPI](https://pypi.org/project/specify-cli/#history) or [Releases](https://github.com/github/spec-kit/releases) for available versions):
26+
27+
```bash
28+
# Using uv
29+
uv tool install specify-cli==0.12.11
30+
31+
# Or using pipx
32+
pipx install specify-cli==0.12.11
33+
34+
# Or using pip
35+
pip install specify-cli==0.12.11
36+
```
37+
38+
## Verify
39+
40+
```bash
41+
specify version
42+
```
43+
44+
## Initialize a project
45+
46+
```bash
47+
specify init <PROJECT_NAME> --integration copilot
48+
```
49+
50+
## Upgrade
51+
52+
Upgrade by reinstalling the package through the same tool you used for the original install. If you originally pinned a version, note that `uv tool upgrade` preserves that pin; to move to the newest PyPI release, use an unpinned install command so you do not keep the existing version pin:
53+
54+
```bash
55+
# Using uv
56+
uv tool install --force specify-cli
57+
58+
# Or using pipx
59+
pipx install --force specify-cli
60+
61+
# Or using pip
62+
pip install --upgrade specify-cli
63+
```
64+
65+
> [!NOTE]
66+
> `specify self upgrade` currently rebuilds `uv tool` and `pipx` installs from the GitHub source release URL rather than preserving a PyPI-based installation. If you want to stay on the PyPI route, use the package-manager commands above. A plain `pip install specify-cli` is treated as an unmanaged install — upgrade it with `pip install --upgrade specify-cli`. See the [Upgrade Guide](../upgrade.md) for details.
67+
68+
## Uninstall
69+
70+
```bash
71+
# Using uv
72+
uv tool uninstall specify-cli
73+
74+
# Or using pipx
75+
pipx uninstall specify-cli
76+
77+
# Or using pip
78+
pip uninstall specify-cli
79+
```
80+
81+
## Next steps
82+
83+
Head to the [Quick Start](../quickstart.md) to initialize your first project.

docs/installation.md

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,14 @@
1111
## Installation
1212

1313
> [!IMPORTANT]
14-
> The only official, maintained packages for Spec Kit come from the [github/spec-kit](https://github.com/github/spec-kit) GitHub repository. Any packages with the same name available on PyPI (e.g. `specify-cli` on pypi.org) are **not** affiliated with this project and are not maintained by the Spec Kit maintainers. For normal installs, use the GitHub-based commands shown below. For offline or air-gapped environments, locally built wheels created from this repository are also valid.
14+
> Spec Kit is distributed through two official channels, both published and maintained by the Spec Kit maintainers: the [github/spec-kit](https://github.com/github/spec-kit) GitHub repository (source installs) and the [`specify-cli`](https://pypi.org/project/specify-cli/) package on [PyPI](https://pypi.org/project/specify-cli/). Either route is supported for normal installs — use the commands shown below. After installing, run `specify version` as a local version/runtime sanity check. It confirms that the `specify` command is available and reports its version, but it does not prove whether the executable came from PyPI or GitHub. For offline or air-gapped environments, locally built wheels created from this repository are also valid.
1515
16-
### Persistent Installation (Recommended)
16+
Spec Kit supports two install routes:
17+
18+
1. **Install from source (GitHub)** — the recommended route, pinned to a release tag.
19+
2. **Install from PyPI** — install the published `specify-cli` package with your usual Python tooling.
20+
21+
### Install from Source — Persistent Installation (Recommended)
1722

1823
Install once and use everywhere. Replace `vX.Y.Z` with a release tag from [Releases](https://github.com/github/spec-kit/releases) — keep the leading `v` (for example, `v0.12.11`, not `0.12.11`):
1924

@@ -30,12 +35,30 @@ Then initialize a project:
3035
specify init <PROJECT_NAME> --integration copilot
3136
```
3237

38+
### Install from PyPI
39+
40+
Spec Kit is also published to PyPI as [`specify-cli`](https://pypi.org/project/specify-cli/), so you can install it with your preferred Python package manager without referencing the Git URL:
41+
42+
```bash
43+
# Using uv (recommended)
44+
uv tool install specify-cli
45+
46+
# Or using pipx
47+
pipx install specify-cli
48+
49+
# Or using pip
50+
pip install specify-cli
51+
```
52+
53+
To install a specific release, pin the version — for example `uv tool install specify-cli==0.12.11`. See the [PyPI installation guide](install/pypi.md) for details, including how to upgrade.
54+
3355
### One-time Usage
3456

3557
Run directly without installing — see the [One-time usage (uvx)](install/one-time.md) guide.
3658

3759
### Alternative Package Managers
3860

61+
- **PyPI** — see the [PyPI installation guide](install/pypi.md)
3962
- **pipx** — see the [pipx installation guide](install/pipx.md)
4063
- **Enterprise / Air-Gapped** — see the [air-gapped installation guide](install/air-gapped.md)
4164

@@ -81,13 +104,13 @@ specify init <project_name> --integration claude --ignore-agent-tools
81104

82105
## Verification
83106

84-
After installation, run the following command to confirm the correct version is installed:
107+
After installation, run the following command as a local version/runtime check:
85108

86109
```bash
87110
specify version
88111
```
89112

90-
This helps verify you are running the official Spec Kit build from GitHub, not an unrelated package with the same name.
113+
This confirms that the `specify` command is available and reporting the expected version. It does not prove whether that executable came from PyPI or GitHub.
91114

92115
**Stay current:** Run `specify self check` periodically to learn whether a newer release is available — it is read-only and never modifies your installation. When you are ready to upgrade, follow the [Upgrade Guide](./upgrade.md).
93116

docs/toc.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
href: upgrade.md
1414
- name: Install uv
1515
href: install/uv.md
16+
- name: Install from PyPI
17+
href: install/pypi.md
1618
- name: Install with pipx
1719
href: install/pipx.md
1820
- name: One-time Usage (uvx)

0 commit comments

Comments
 (0)