Objectively infer PyPI Development Status classifiers from code and release artifacts.
Project description
troml_dev_status
Project inspired by troml to suggest a Development Status based solely on objective criteria.
A tool to objectively infer PyPI "Development Status" classifiers from code and release artifacts, based on the draft PEP ∞.
As far as I know, no python authority has given objective criteria for development status and the meaning is private to each user. Development status gets brief mention in PEP301.
Meanings
- Development Status :: 1 - Planning - Minimum score. All projects get at least Planning.
- Development Status :: 2 - Pre-Alpha - Few points awarded by grading rubric.
- Development Status :: 3 - Alpha - Many points awarded
- Development Status :: 4 - Beta - Even more points awarded
- Development Status :: 5 - Production/Stable - Perfect score
- Development Status :: 6 - Mature - Production and signs of upgrade help, e.g. Deprecation
- Development Status :: 7 - Inactive - Impossible to award. If you publish now, you are active.
In scope - easily graded metrics.
Out of scope - vibes, intentions, promises, support contracts, budget, staffing.
Also out of scope - linting, type annotations, code coverage in the sense of running third party tools at eval time.
Surprisingly out of scope - interface and API stability. Impossible to evaluate in Python (several noble attempts!), depends on developer wishes, hopes, aspirations, vibes which require psychology tests, not build tools.
Installation
Should be safe to pipx install so as to not mix your dependencies with the tool's
pipx install troml-dev-status
Usage
Run the tool against a local Git repository that has a pyproject.toml file.
# just display info
troml-dev-status analyze /path/to/your/project
# fails if tool disagrees with your current development status
troml-dev-status verify /path/to/your/project
# updates pyproject.toml with current status
troml-dev-status update /path/to/your/project
The tool will analyze the project's PyPI releases, Git history, and source code to produce an evidence-based " Development Status" classifier.
README Rating and Completion Checking
These two features require LLMs. If no API key is found (see .env.example) these will be skipped.
Output
The tool outputs a human-readable summary table and a machine-readable JSON report.
Example Human-Readable Output
Development Status Analysis for troml-dev-status
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ID ┃ Description ┃ Status ┃ Evidence ┃
┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ C1 │ SECURITY.md Present │ OK │ Checked for security files │
├──────────────┼─────────────────────────────┼────────┼────────────────────────────────────────────────────┤
│ C2 │ Trusted Publisher │ OK │ All files in most recent package are attested. │
├──────────────┼─────────────────────────────┼────────┼────────────────────────────────────────────────────┤
│ C3 │ Dependencies Pinned │ X │ Found 3 not strictly pinned somehow: textstat, │
│ │ │ │ llvm-diagnostics, semantic-version. │
├──────────────┼─────────────────────────────┼────────┼────────────────────────────────────────────────────┤
│ C4 │ Reproducible Dev Env │ OK │ Found uv lockfile ('uv.lock'). │
...
Final Inferred Classifier: Development Status :: 4 - Beta
Reason: EPS=13/18; version 0.2.0 < 1.0.0; recent release; S3 holds.
Example JSON Output
The tool also prints a detailed JSON object containing the results of every check.
{
"inferred_classifier": "Development Status :: 4 - Beta",
"evaluated_at": "2025-09-14T20:00:00.123456Z",
"checks": {
"R1": {
"passed": true,
"evidence": "Found 15 releases on PyPI for 'my-package'"
},
"...": {}
},
"metrics": {
"eps_score": 16,
"eps_total": 19
}
}
Project Health
| Metric | Status |
|---|---|
| Coverage | |
| Docs | |
| PyPI | |
| Downloads | |
| License | |
| Last Commit |
Library info pages
Snyk Security Pages
Prior Art
Autofill/Suggest
Validate
- classifier-checker
- pyroma - Metadata completeness + 3 maintainers
Raw Data
UI/Initialization
License Tracking
Similar hosted services
- OpenSSF Best Practices - some machine validated criteria and many self asserted.
- Libraries.io SourceRank - 1/2 things you can control, 1/2 "popularity contest" metrics
Contributing
See the contributing file for how to contribute
See the development_setup file for how to set up and to run a local build.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file troml_dev_status-0.6.1.tar.gz.
File metadata
- Download URL: troml_dev_status-0.6.1.tar.gz
- Upload date:
- Size: 62.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7fded248064bb4741bb11a25c4e016899fae99421c5c3975c5353df805f76ea3
|
|
| MD5 |
5fdaa5f600226656b8d9b0dab27d97f1
|
|
| BLAKE2b-256 |
dae46a4b4430fb78663d0b5159674789c55e3aca629d8a24fb303797e6eec402
|
Provenance
The following attestation bundles were made for troml_dev_status-0.6.1.tar.gz:
Publisher:
publish_to_pypi.yml on matthewdeanmartin/troml_dev_status
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
troml_dev_status-0.6.1.tar.gz -
Subject digest:
7fded248064bb4741bb11a25c4e016899fae99421c5c3975c5353df805f76ea3 - Sigstore transparency entry: 1187331484
- Sigstore integration time:
-
Permalink:
matthewdeanmartin/troml_dev_status@0ca52d967c37219161bf5230ca0afb97b512e9be -
Branch / Tag:
refs/heads/main - Owner: https://github.com/matthewdeanmartin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish_to_pypi.yml@0ca52d967c37219161bf5230ca0afb97b512e9be -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file troml_dev_status-0.6.1-py3-none-any.whl.
File metadata
- Download URL: troml_dev_status-0.6.1-py3-none-any.whl
- Upload date:
- Size: 76.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6a5b8dde00515823137f5a604bb79c9d19cb233c6d02fa2de5999905133743ac
|
|
| MD5 |
9fcf0cc9c452aa44de73b5deadf05f0a
|
|
| BLAKE2b-256 |
4a99b45ca5560050540486133c238000d61436f14b8759c29f76b8ce3b1b9153
|
Provenance
The following attestation bundles were made for troml_dev_status-0.6.1-py3-none-any.whl:
Publisher:
publish_to_pypi.yml on matthewdeanmartin/troml_dev_status
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
troml_dev_status-0.6.1-py3-none-any.whl -
Subject digest:
6a5b8dde00515823137f5a604bb79c9d19cb233c6d02fa2de5999905133743ac - Sigstore transparency entry: 1187331729
- Sigstore integration time:
-
Permalink:
matthewdeanmartin/troml_dev_status@0ca52d967c37219161bf5230ca0afb97b512e9be -
Branch / Tag:
refs/heads/main - Owner: https://github.com/matthewdeanmartin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish_to_pypi.yml@0ca52d967c37219161bf5230ca0afb97b512e9be -
Trigger Event:
workflow_dispatch
-
Statement type: