{
  "id": "pypi",
  "version": "1.0.0",
  "name": "PyPI (Python Package Index)",
  "description": "PyPI — the Python Package Index — is the official third-party software repository for the Python language and the default source from which `pip install <name>` resolves packages. PyPI is operated under the Python Software Foundation (PSF) and has its own USPTO-registered trademarks (\"PyPI\" and \"Python Package Index\") and a distinct \"blocks logo\" mark that is separate from the two-snake PSF / Python language identity. The voice is institutional and registry-direct: package pages, version histories, advisories, and the trust metadata that pip and other installers consume. Visually, PyPI shares the Python-family blue (#3775A9) and yellow (#FFD43B) anchors but expresses them through its own blocks-logo mark.\n",
  "provenance": {
    "source": "https://pypi.org/trademarks/",
    "license": "Proprietary — All Rights Reserved",
    "attribution": "\"PyPI\", \"Python Package Index\", and the blocks logos are registered trademarks of the Python Software Foundation (USPTO #5608450; International #1384149 for \"PyPI\"; USPTO #5764496; International #1382296 for \"Python Package Index\"). Brand-atoms' encoding draws from the PyPI trademarks page (pypi.org/trademarks/), the PSF Trademark Usage Policy that governs the Python language mark, and the canonical PyPI Blue value (#3775A9) carried by the simple-icons project's \"PyPI\" entry.\n",
    "importedDate": "2026-05-19",
    "notes": "PyPI's trademarks page states verbatim: \"'PyPI', 'Python Package Index', and the blocks logos are registered trademarks of the Python Software Foundation referring to products and services associated with pypi.org. Any other use by any other party is prohibited.\" Although PyPI inherits the Python-family blue/yellow palette, the PyPI blocks-logo mark is distinct from the PSF two-snake mark and has its own registration — substituting one for the other crosses the boundary between two distinct registered marks of the Foundation. The Python language brand is encoded separately in the sibling `python@1` atom.\n"
  },
  "tags": [
    "pypi",
    "python",
    "package-manager",
    "psf",
    "registry",
    "brand",
    "blue",
    "yellow"
  ],
  "palette": {
    "ref": "pypi@1.0.0",
    "swatches": [
      {
        "id": "pypi-blue",
        "name": "PyPI Blue",
        "value": "#3775A9",
        "description": "Primary brand color — the canonical PyPI/Python-family blue. Source: simple-icons \"PyPI\" entry, matching the PSF logo's upper-snake blue.\n",
        "aliases": []
      },
      {
        "id": "pypi-blue-dark",
        "name": "PyPI Blue Dark",
        "value": "#1E415E",
        "description": "Deeper navy for hover states; dark-mode tertiary surface.",
        "aliases": []
      },
      {
        "id": "pypi-yellow",
        "name": "PyPI Yellow",
        "value": "#FFD43B",
        "description": "Secondary brand color — the Python-family yellow inherited from the PSF logo's lower-snake fill.\n",
        "aliases": []
      },
      {
        "id": "pypi-yellow-dark",
        "name": "PyPI Yellow Dark",
        "value": "#FFC331",
        "description": "Deeper amber used for hover states on the yellow accent.",
        "aliases": []
      },
      {
        "id": "pypi-black",
        "name": "PyPI Black",
        "value": "#0E1217",
        "description": "Dark-mode page canvas.",
        "aliases": []
      },
      {
        "id": "pypi-charcoal",
        "name": "PyPI Charcoal",
        "value": "#1C232C",
        "description": "Elevated dark surface for cards and panels.",
        "aliases": []
      },
      {
        "id": "pypi-slate",
        "name": "PyPI Slate",
        "value": "#3D4554",
        "description": "Body text on light canvas; secondary copy.",
        "aliases": []
      },
      {
        "id": "pypi-gray",
        "name": "PyPI Gray",
        "value": "#6B7280",
        "description": "Tertiary text and quiet UI.",
        "aliases": []
      },
      {
        "id": "pypi-light-gray",
        "name": "PyPI Light Gray",
        "value": "#D5D9DE",
        "description": "Hairline borders on light canvas.",
        "aliases": []
      },
      {
        "id": "pypi-off-white",
        "name": "PyPI Off-White",
        "value": "#F4F5F7",
        "description": "Subtle layered surface on light canvas.",
        "aliases": []
      },
      {
        "id": "pypi-white",
        "name": "PyPI White",
        "value": "#FFFFFF",
        "description": "Page canvas in light mode.",
        "aliases": []
      },
      {
        "id": "pypi-error",
        "name": "PyPI Error Red",
        "value": "#BD4147",
        "description": "Status error color used in advisory and yanked-release callouts.",
        "aliases": []
      }
    ],
    "modes": {
      "light": {
        "roles": {
          "background": "pypi-white",
          "surface": "pypi-off-white",
          "surface-elevated": "pypi-white",
          "text-primary": "pypi-blue-dark",
          "text-secondary": "pypi-slate",
          "text-tertiary": "pypi-gray",
          "primary": "pypi-blue",
          "primary-hover": "pypi-blue-dark",
          "accent": "pypi-yellow",
          "accent-hover": "pypi-yellow-dark",
          "warning": "pypi-yellow-dark",
          "warning-hover": "pypi-yellow",
          "error": "pypi-error",
          "success": "pypi-blue",
          "border": "pypi-light-gray"
        }
      },
      "dark": {
        "roles": {
          "background": "pypi-black",
          "surface": "pypi-charcoal",
          "surface-elevated": "pypi-charcoal",
          "text-primary": "pypi-white",
          "text-secondary": "pypi-light-gray",
          "text-tertiary": "pypi-yellow",
          "primary": "pypi-yellow",
          "primary-hover": "pypi-yellow-dark",
          "accent": "pypi-blue",
          "accent-hover": "pypi-blue-dark",
          "warning": "pypi-yellow",
          "warning-hover": "pypi-yellow-dark",
          "error": "pypi-error",
          "success": "pypi-blue",
          "border": "pypi-slate"
        }
      }
    }
  },
  "fonts": [
    {
      "role": "heading",
      "ref": "inter@1.0.0",
      "family": "Inter",
      "classification": "sans-serif",
      "source": {
        "kind": "google-fonts",
        "family": "Inter",
        "url": "https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap"
      },
      "fallbackStack": [
        "-apple-system",
        "BlinkMacSystemFont",
        "Segoe UI",
        "Roboto",
        "Helvetica Neue",
        "Arial",
        "sans-serif"
      ],
      "availableStyles": [
        {
          "weight": 100,
          "style": "normal"
        },
        {
          "weight": 100,
          "style": "italic"
        },
        {
          "weight": 200,
          "style": "normal"
        },
        {
          "weight": 200,
          "style": "italic"
        },
        {
          "weight": 300,
          "style": "normal"
        },
        {
          "weight": 300,
          "style": "italic"
        },
        {
          "weight": 400,
          "style": "normal"
        },
        {
          "weight": 400,
          "style": "italic"
        },
        {
          "weight": 500,
          "style": "normal"
        },
        {
          "weight": 500,
          "style": "italic"
        },
        {
          "weight": 600,
          "style": "normal"
        },
        {
          "weight": 600,
          "style": "italic"
        },
        {
          "weight": 700,
          "style": "normal"
        },
        {
          "weight": 700,
          "style": "italic"
        },
        {
          "weight": 800,
          "style": "normal"
        },
        {
          "weight": 800,
          "style": "italic"
        },
        {
          "weight": 900,
          "style": "normal"
        },
        {
          "weight": 900,
          "style": "italic"
        }
      ]
    },
    {
      "role": "body",
      "ref": "inter@1.0.0",
      "family": "Inter",
      "classification": "sans-serif",
      "source": {
        "kind": "google-fonts",
        "family": "Inter",
        "url": "https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap"
      },
      "fallbackStack": [
        "-apple-system",
        "BlinkMacSystemFont",
        "Segoe UI",
        "Roboto",
        "Helvetica Neue",
        "Arial",
        "sans-serif"
      ],
      "availableStyles": [
        {
          "weight": 100,
          "style": "normal"
        },
        {
          "weight": 100,
          "style": "italic"
        },
        {
          "weight": 200,
          "style": "normal"
        },
        {
          "weight": 200,
          "style": "italic"
        },
        {
          "weight": 300,
          "style": "normal"
        },
        {
          "weight": 300,
          "style": "italic"
        },
        {
          "weight": 400,
          "style": "normal"
        },
        {
          "weight": 400,
          "style": "italic"
        },
        {
          "weight": 500,
          "style": "normal"
        },
        {
          "weight": 500,
          "style": "italic"
        },
        {
          "weight": 600,
          "style": "normal"
        },
        {
          "weight": 600,
          "style": "italic"
        },
        {
          "weight": 700,
          "style": "normal"
        },
        {
          "weight": 700,
          "style": "italic"
        },
        {
          "weight": 800,
          "style": "normal"
        },
        {
          "weight": 800,
          "style": "italic"
        },
        {
          "weight": 900,
          "style": "normal"
        },
        {
          "weight": 900,
          "style": "italic"
        }
      ]
    },
    {
      "role": "mono",
      "ref": "source-code-pro@1.0.0",
      "family": "Source Code Pro",
      "classification": "monospace",
      "source": {
        "kind": "google-fonts",
        "family": "Source Code Pro",
        "url": "https://fonts.googleapis.com/css2?family=Source+Code+Pro:ital,wght@0,200..900;1,200..900&display=swap"
      },
      "fallbackStack": [
        "ui-monospace",
        "SFMono-Regular",
        "Menlo",
        "Consolas",
        "Liberation Mono",
        "monospace"
      ],
      "availableStyles": [
        {
          "weight": 200,
          "style": "normal"
        },
        {
          "weight": 200,
          "style": "italic"
        },
        {
          "weight": 300,
          "style": "normal"
        },
        {
          "weight": 300,
          "style": "italic"
        },
        {
          "weight": 400,
          "style": "normal"
        },
        {
          "weight": 400,
          "style": "italic"
        },
        {
          "weight": 500,
          "style": "normal"
        },
        {
          "weight": 500,
          "style": "italic"
        },
        {
          "weight": 600,
          "style": "normal"
        },
        {
          "weight": 600,
          "style": "italic"
        },
        {
          "weight": 700,
          "style": "normal"
        },
        {
          "weight": 700,
          "style": "italic"
        },
        {
          "weight": 800,
          "style": "normal"
        },
        {
          "weight": 800,
          "style": "italic"
        },
        {
          "weight": 900,
          "style": "normal"
        },
        {
          "weight": 900,
          "style": "italic"
        }
      ]
    }
  ],
  "roles": {
    "colors": {
      "identity": "pypi-blue",
      "on-identity": "pypi-white",
      "primary": "pypi-blue",
      "primary-hover": "pypi-blue-dark",
      "accent": "pypi-yellow",
      "accent-hover": "pypi-yellow-dark",
      "mark": "pypi-blue",
      "background": "pypi-white",
      "surface": "pypi-off-white",
      "text-primary": "pypi-blue-dark",
      "text-secondary": "pypi-slate",
      "error": "pypi-error",
      "success": "pypi-blue",
      "border": "pypi-light-gray"
    },
    "typography": {
      "display": "heading",
      "prose": "body",
      "code": "mono"
    }
  },
  "assets": [],
  "rules": [
    {
      "type": "colorChoice",
      "target": "roles.colors.identity",
      "severity": "error",
      "rationale": "The PyPI blocks-logo mark and the Python-family identity it inherits are anchored on the blue + yellow pairing. Substituting slate, gray, or red for the identity color breaks the registered-mark expression and conflicts with the PSF Trademark Usage Policy's reproduction requirements.\n",
      "allowed": [
        "pypi-blue",
        "pypi-yellow"
      ],
      "forbidden": [
        "pypi-slate",
        "pypi-gray",
        "pypi-error"
      ]
    },
    {
      "type": "contextRestriction",
      "target": "trademark.use",
      "severity": "error",
      "rationale": "Per pypi.org/trademarks/: \"Any other use by any other party is prohibited.\" Use of \"PyPI\" as a generic synonym for a package registry, as a product-name prefix without PSF approval, on paid merchandise without PSF approval, or substituting the PSF two-snake logo for the PyPI blocks logo (or vice versa) all cross policy lines — the two marks have separate registrations and signify different things.\n",
      "forbiddenContexts": [
        "implied-endorsement",
        "generic-name-for-any-package-registry",
        "product-name-prefix-without-approval",
        "paid-merchandise-without-approval",
        "blocks-logo-substituted-for-snakes-logo",
        "snakes-logo-substituted-for-blocks-logo"
      ]
    },
    {
      "type": "forbiddenTreatment",
      "target": "logo",
      "severity": "error",
      "rationale": "The PSF Trademark Usage Policy requires that Foundation logos be reproduced \"with the right colors and fonts\" and that derived versions require PSF approval before use. The PyPI blocks logo is defined by the specific arrangement and color assignment of its blocks; recombining the blocks, mixing the colors across blocks, recoloring, or rotation violates the policy.\n",
      "treatments": [
        "recolored",
        "rotated",
        "skewed",
        "stretched",
        "derived-without-approval",
        "drop-shadow",
        "blocks-recombined",
        "blocks-color-mixed"
      ]
    },
    {
      "type": "contrastRatio",
      "target": "text-primary",
      "severity": "error",
      "rationale": "PyPI Blue Dark (#1E415E) on PyPI White exceeds 9:1 — well above the WCAG AA threshold for body text on the registry's package pages and version histories.\n",
      "against": "background",
      "minRatio": 4.5,
      "standard": "WCAG-AA"
    },
    {
      "type": "contrastRatio",
      "target": "roles.colors.accent",
      "severity": "warning",
      "rationale": "PyPI Yellow (#FFD43B) on White sits around 1.5:1 — does NOT clear WCAG AA or AA-large for text. Reserve the yellow for large surfaces, callout backgrounds with dark text on top, the mark itself, and accent illustration; use PyPI Blue or PyPI Blue Dark for any interactive or text-bearing foreground.\n",
      "against": "background",
      "minRatio": 3,
      "standard": "WCAG-AA-large"
    },
    {
      "type": "fontPairing",
      "target": "typography.heading",
      "severity": "recommendation",
      "rationale": "pypi.org uses a single humanist sans across heading and body. Maintain at least a 1.5× heading-to-body ratio on package detail pages, search results, and release history listings.\n",
      "requires": "body",
      "minSizeRatio": 1.5
    },
    {
      "type": "accessibilityRequirement",
      "target": "*",
      "severity": "error",
      "rationale": "WCAG 2.1 Success Criterion 1.4.3 (Contrast Minimum) — Level AA. PyPI is the registry of record for the Python ecosystem; broad legibility is a load-bearing requirement.\n",
      "standard": "WCAG-AA",
      "criterion": "1.4.3"
    },
    {
      "type": "compositionConstraint",
      "target": "roles.colors.identity",
      "severity": "recommendation",
      "rationale": "PyPI Blue pairs cleanly with the white canvas, the Python-family yellow, and its own deeper navy. Placing it directly adjacent to PyPI Error Red mixes registered-mark identity with status semantics and flattens the brand's institutional voice — reserve error red for advisories and yanked-release callouts.\n",
      "pairsWith": [
        "pypi-white",
        "pypi-off-white",
        "pypi-yellow",
        "pypi-blue-dark"
      ],
      "doesNotPairWith": [
        "pypi-error"
      ]
    }
  ]
}
