Are we PEP 643 yet? 📦

Last refreshed: 2026-11-07

What is PEP 643?

PEP 643 lets source distributions record reliable package metadata in PKG-INFO. It introduced core metadata version 2.2 and the Dynamic field.

Fields not marked Dynamic must stay the same when a wheel is built from that source distribution. Installers can read those fields without running the build backend.

Legend

  • Dark green projects (261; 72.5%): PEP 643 metadata with static version and dependencies
  • Light green projects (47; 13.1%): PEP 643 metadata with dynamic version or dependency fields
  • Orange projects (48; 13.3%): older metadata, or no Metadata-Version in root PKG-INFO
  • Gray projects (4; 1.1%): no source distribution

Both shades of green count toward PEP 643 adoption: metadata version 2.2 or later. Dark green projects do not mark Version, Requires-Dist, Requires-Python, or Provides-Extra as Dynamic. Other fields, such as the description or license, may still be dynamic.

Each project is checked using its highest non-yanked stable release with a source distribution, or a prerelease if no stable source release exists. This may be older than its latest wheel. The status comes from the root PKG-INFO metadata version, rather than pyproject.toml. It does not verify that built wheels preserve the static fields. Project links open the source metadata in PyPI Inspector.

The package ranking comes from Hugo van Kemenade. The complete dataset is available as csv.

Are we PEP 517 yet?

packaging typing-extensions certifi idna urllib3 charset-normalizer requests cryptography cffi pluggy pyyaml pycparser pygments python-dateutil setuptools pydantic pydantic-core click numpy anyio annotated-types pytest iniconfig typing-inspection h11 attrs markupsafe httpx httpcore protobuf python-dotenv pyjwt jinja2 pandas aiobotocore starlette opentelemetry-api platformdirs pillow uvicorn pathspec rpds-py fsspec jsonschema filelock tzdata referencing tomlkit jsonschema-specifications multidict markdown-it-py rich aiohttp yarl propcache pip annotated-doc websockets fastapi googleapis-common-protos frozenlist tqdm pyasn1 aiosignal aiohappyeyeballs pydantic-settings wrapt python-multipart google-auth pyarrow trove-classifiers zipp lxml tenacity importlib-metadata pyasn1-modules ruff sqlalchemy jiter greenlet hatchling wheel pyparsing grpcio regex truststore grpcio-status openai httpx2 watchfiles httpcore2 psutil google-api-core soupsieve opentelemetry-semantic-conventions coverage opentelemetry-sdk beautifulsoup4 sse-starlette s3fs mypy-extensions typer mcp proto-plus wcwidth uvloop huggingface-hub dnspython httptools tomli pytest-asyncio cachetools opentelemetry-proto docstring-parser editables oauthlib werkzeug more-itertools virtualenv opentelemetry-exporter-otlp-proto-common networkx pytest-cov redis distlib exceptiongroup hf-xet fonttools msgpack opentelemetry-exporter-otlp-proto-http mako alembic orjson prompt-toolkit tiktoken scikit-learn tokenizers rsa cloudpickle threadpoolctl mypy flask email-validator anthropic nodeenv pyopenssl python-discovery httpx-sse joblib psycopg blinker zstandard tzlocal execnet pytest-xdist h2 google-cloud-core hpack websocket-client psycopg-binary hyperframe tabulate pynacl azure-core kiwisolver pypdf bcrypt opentelemetry-instrumentation google-cloud-storage google-cloud-bigquery chardet google-crc32c contourpy langchain prometheus-client librt google-resumable-media google-genai xxhash keyring xlsxwriter langchain-core decorator identify grpcio-tools pre-commit jaraco-classes jaraco-functools uv jsonpointer sentry-sdk sympy jeepney gitpython mpmath secretstorage jaraco-context asgiref docutils deprecated docker uritemplate smmap webencodings narwhals traitlets google-api-python-client azure-identity asyncpg aiofiles google-auth-httplib2 rapidfuzz httplib2 opentelemetry-util-http msal-extensions authlib pytest-json-ctrf fastjsonschema jsonpatch black playwright executing google-auth-oauthlib opentelemetry-exporter-otlp-proto-grpc sqlparse python-docx babel pyee gunicorn tornado markdown grpc-google-iam-v1 joserfc transformers tinycss2 paramiko structlog snowflake-connector-python ipython asttokens xmltodict mcp-types pyzmq pytest-timeout brotli pyproject-hooks onnxruntime matplotlib-inline pure-eval azure-storage-blob watchdog build ast-serialize python-json-logger aioitertools litellm isort cachecontrol griffelib google-cloud-aiplatform jupyter-core typedload nbformat croniter pytest-mock debugpy marshmallow types-pyyaml langsmith poetry-core cython safetensors pypdfium2 slack-sdk databricks-sdk sqlglot lz4 awswrangler lark kubernetes jupyter-client beartype pytokens uuid-utils tomli-w setuptools-scm opentelemetry-instrumentation-asgi pycryptodome pymysql opentelemetry-instrumentation-fastapi types-requests fastuuid reportlab termcolor loguru argon2-cffi-bindings cyclopts pyperclip argon2-cffi vcs-versioning python-slugify pathable mdit-py-plugins jsonschema-path shapely faker semver cbor2 graphql-core opentelemetry-instrumentation-requests mistune wsproto rich-rst