# PyPI (Python Package Index)

> `pypi@1.0.0`

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.


**Tags:** `pypi`, `python`, `package-manager`, `psf`, `registry`, `brand`, `blue`, `yellow`

## Atoms

### Palette

**PyPI (Python Package Index)** · `pypi@1.0.0` · Proprietary — All Rights Reserved

> PyPI brand palette anchored on PyPI Blue (#3775A9) — the Python-family blue inherited from the PSF logo, paired with Python Yellow (#FFD43B) as the secondary accent and a clean light-grey UI scale. PyPI is a registered trademark of the Python Software Foundation and the "blocks logo" is its distinguishing mark, separate from the two-snake PSF / Python language identity even though both share the blue+yellow color anchor. 

### Fonts

| Role | Font | License | Classification |
|------|------|---------|----------------|
| `heading` | **Inter** `(inter@1.0.0)` | OFL-1.1 | sans-serif |
| `body` | **Inter** `(inter@1.0.0)` | OFL-1.1 | sans-serif |
| `mono` | **Source Code Pro** `(source-code-pro@1.0.0)` | OFL-1.1 | monospace |

## Swatches

| ID | Name | Value |
|----|------|-------|
| `pypi-blue` | PyPI Blue | `#3775A9` |
| `pypi-blue-dark` | PyPI Blue Dark | `#1E415E` |
| `pypi-yellow` | PyPI Yellow | `#FFD43B` |
| `pypi-yellow-dark` | PyPI Yellow Dark | `#FFC331` |
| `pypi-black` | PyPI Black | `#0E1217` |
| `pypi-charcoal` | PyPI Charcoal | `#1C232C` |
| `pypi-slate` | PyPI Slate | `#3D4554` |
| `pypi-gray` | PyPI Gray | `#6B7280` |
| `pypi-light-gray` | PyPI Light Gray | `#D5D9DE` |
| `pypi-off-white` | PyPI Off-White | `#F4F5F7` |
| `pypi-white` | PyPI White | `#FFFFFF` |
| `pypi-error` | PyPI Error Red | `#BD4147` |

## Mode role mappings

### Light mode

| Role | Swatch | Hex |
|------|--------|-----|
| `background` | `pypi-white` | `#FFFFFF` |
| `surface` | `pypi-off-white` | `#F4F5F7` |
| `surface-elevated` | `pypi-white` | `#FFFFFF` |
| `text-primary` | `pypi-blue-dark` | `#1E415E` |
| `text-secondary` | `pypi-slate` | `#3D4554` |
| `text-tertiary` | `pypi-gray` | `#6B7280` |
| `primary` | `pypi-blue` | `#3775A9` |
| `primary-hover` | `pypi-blue-dark` | `#1E415E` |
| `accent` | `pypi-yellow` | `#FFD43B` |
| `accent-hover` | `pypi-yellow-dark` | `#FFC331` |
| `warning` | `pypi-yellow-dark` | `#FFC331` |
| `warning-hover` | `pypi-yellow` | `#FFD43B` |
| `error` | `pypi-error` | `#BD4147` |
| `success` | `pypi-blue` | `#3775A9` |
| `border` | `pypi-light-gray` | `#D5D9DE` |

### Dark mode

| Role | Swatch | Hex |
|------|--------|-----|
| `background` | `pypi-black` | `#0E1217` |
| `surface` | `pypi-charcoal` | `#1C232C` |
| `surface-elevated` | `pypi-charcoal` | `#1C232C` |
| `text-primary` | `pypi-white` | `#FFFFFF` |
| `text-secondary` | `pypi-light-gray` | `#D5D9DE` |
| `text-tertiary` | `pypi-yellow` | `#FFD43B` |
| `primary` | `pypi-yellow` | `#FFD43B` |
| `primary-hover` | `pypi-yellow-dark` | `#FFC331` |
| `accent` | `pypi-blue` | `#3775A9` |
| `accent-hover` | `pypi-blue-dark` | `#1E415E` |
| `warning` | `pypi-yellow` | `#FFD43B` |
| `warning-hover` | `pypi-yellow-dark` | `#FFC331` |
| `error` | `pypi-error` | `#BD4147` |
| `success` | `pypi-blue` | `#3775A9` |
| `border` | `pypi-slate` | `#3D4554` |

## Brand semantic roles

### Colors

| Role | Swatch | Hex |
|------|--------|-----|
| `identity` | `pypi-blue` | `#3775A9` |
| `on-identity` | `pypi-white` | `#FFFFFF` |
| `primary` | `pypi-blue` | `#3775A9` |
| `primary-hover` | `pypi-blue-dark` | `#1E415E` |
| `accent` | `pypi-yellow` | `#FFD43B` |
| `accent-hover` | `pypi-yellow-dark` | `#FFC331` |
| `mark` | `pypi-blue` | `#3775A9` |
| `background` | `pypi-white` | `#FFFFFF` |
| `surface` | `pypi-off-white` | `#F4F5F7` |
| `text-primary` | `pypi-blue-dark` | `#1E415E` |
| `text-secondary` | `pypi-slate` | `#3D4554` |
| `error` | `pypi-error` | `#BD4147` |
| `success` | `pypi-blue` | `#3775A9` |
| `border` | `pypi-light-gray` | `#D5D9DE` |

### Typography

| Role | Font role key |
|------|---------------|
| `display` | `heading` |
| `prose` | `body` |
| `code` | `mono` |

## Rules

### 🛑 error (5)

#### `colorChoice` → `roles.colors.identity`

- **allowed:** pypi-blue, pypi-yellow
- **forbidden:** pypi-slate, pypi-gray, pypi-error

> 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. 

#### `contextRestriction` → `trademark.use`

- **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

> 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. 

#### `forbiddenTreatment` → `logo`

- **treatments:** recolored, rotated, skewed, stretched, derived-without-approval, drop-shadow, blocks-recombined, blocks-color-mixed

> 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. 

#### `contrastRatio` → `text-primary`

- **against:** `background`
- **minRatio:** `4.5`
- **standard:** `WCAG-AA`

> 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. 

#### `accessibilityRequirement` → `*`

- **standard:** `WCAG-AA`
- **criterion:** `1.4.3`

> 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. 

### ⚠️ warning (1)

#### `contrastRatio` → `roles.colors.accent`

- **against:** `background`
- **minRatio:** `3`
- **standard:** `WCAG-AA-large`

> 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. 

### 💡 recommendation (2)

#### `fontPairing` → `typography.heading`

- **requires:** `body`
- **minSizeRatio:** `1.5`

> 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. 

#### `compositionConstraint` → `roles.colors.identity`

- **pairsWith:** pypi-white, pypi-off-white, pypi-yellow, pypi-blue-dark
- **doesNotPairWith:** pypi-error

> 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. 

## 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. 
- **Imported:** `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. 

---

*Generated by the brand-atoms converter. Source: `pypi@1.0.0` from the encyclopedia.*
