The missing PyPI(tm) profile page — pipx-installable, plugin-extensible. Not associated with PSF.
Project description
pypi-profile
pypi-profile is a CLI and small FastAPI app for publishing a maintainer profile from a pypi_profile.toml
file.
It is aimed at package publishers who want one place to describe who maintains a project, what packages and projects they work on, how to contact them, and how to prove control over related external accounts.
What the package does
pypi-profile currently ships:
- a CLI for
init,validate,inspect,serve,dump,doctor,fetch,keygen,sign,verify,update-proofs,build,find-profiles, andgui - a TOML-first profile format for identity, packages, projects, hiring, contact, succession, and verification data
- a FastAPI + Jinja2 site renderer with matching JSON endpoints
- a minisign-based proof-of-control flow for external profile URLs
This README documents the usable core that ships today. It is intentionally not a roadmap for unfinished extension work.
Install
Recommended: pipx
pipx install pypi-profile
Alternative: pip
pip install pypi-profile
Optional extras
The standard install already includes the web server and signing support.
Install extras if you also want:
fetchforhttpx-powered live metadata fetchesvalidatefor JSON Resume schema validationallfor both
pipx install "pypi-profile[all]"
Or with pip:
pip install "pypi-profile[all]"
From source
This repository is a uv workspace. Run commands from the repo root:
git clone https://github.com/matthewdeanmartin/matthewdeanmartin_pypi.git
cd matthewdeanmartin_pypi
uv sync --all-extras
uv run pypi-profile --help
Use the CLI entry point pypi-profile, not python -m pypi_profile.
Usage
The shortest path from zero to a local profile site is:
pypi-profile init --username your-pypi-name
pypi-profile validate pypi_profile.toml
pypi-profile serve pypi_profile.toml
That gives you a starter TOML file and serves the profile locally at http://127.0.0.1:8000.
Useful follow-up commands:
pypi-profile inspect pypi_profile.toml
pypi-profile dump pypi_profile.toml
pypi-profile doctor
If you already have source data, you can bootstrap from it:
pypi-profile init --from-json-resume resume.json --output pypi_profile.toml
pypi-profile init --username your-pypi-name --fetch
Security notes
- Proof-of-control signing is built around a local secret key. Keep that key out of version control.
serve --allow-codeis opt-in. Do not enable it for untrusted code.- Verification proves account co-control, not legal identity or the truth of every profile claim.
For the fuller package docs, see docs/installation.md, docs/usage/quickstart.md, and docs/security.md in
this package directory.
Legal
Apache license to match the Warehouse license for theme assets.
Not associated with the PSF. Trademarked logos are removed from the profile UI.
PyPI is a trademark of the Python Software Foundation.
PyPI's template and theme are Apache-licensed via Warehouse.
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 pypi_profile-0.1.0.tar.gz.
File metadata
- Download URL: pypi_profile-0.1.0.tar.gz
- Upload date:
- Size: 108.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2de45d9b38197b73f08a16107c2b2d60fc4065e331b0be8d09c52adce00ba8be
|
|
| MD5 |
d54562236c1286f6a7fd33a4e61a89a7
|
|
| BLAKE2b-256 |
d13001f19909eb608216963acf36e9c426d00c1438b3be12550d437475586514
|
Provenance
The following attestation bundles were made for pypi_profile-0.1.0.tar.gz:
Publisher:
publish_pypi_profile.yml on matthewdeanmartin/matthewdeanmartin_pypi
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pypi_profile-0.1.0.tar.gz -
Subject digest:
2de45d9b38197b73f08a16107c2b2d60fc4065e331b0be8d09c52adce00ba8be - Sigstore transparency entry: 1551837641
- Sigstore integration time:
-
Permalink:
matthewdeanmartin/matthewdeanmartin_pypi@d71ab7bb2070d84b21bd8dc5d7e1c09c638e0474 -
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_pypi_profile.yml@d71ab7bb2070d84b21bd8dc5d7e1c09c638e0474 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file pypi_profile-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pypi_profile-0.1.0-py3-none-any.whl
- Upload date:
- Size: 116.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
89dc8d05df2b7875ffb7e8669b95a235066787a336c2cde19f8b8587a9b59357
|
|
| MD5 |
5f885772147e508c885d3adec2cfb8e4
|
|
| BLAKE2b-256 |
ceaf1b9276fd22013c0a1d19a84dd70d45c4f1d13e47df0b89759eeb6eb62832
|
Provenance
The following attestation bundles were made for pypi_profile-0.1.0-py3-none-any.whl:
Publisher:
publish_pypi_profile.yml on matthewdeanmartin/matthewdeanmartin_pypi
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pypi_profile-0.1.0-py3-none-any.whl -
Subject digest:
89dc8d05df2b7875ffb7e8669b95a235066787a336c2cde19f8b8587a9b59357 - Sigstore transparency entry: 1551837644
- Sigstore integration time:
-
Permalink:
matthewdeanmartin/matthewdeanmartin_pypi@d71ab7bb2070d84b21bd8dc5d7e1c09c638e0474 -
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_pypi_profile.yml@d71ab7bb2070d84b21bd8dc5d7e1c09c638e0474 -
Trigger Event:
workflow_dispatch
-
Statement type: