Skip to main content

Color Contrast Linter - Automated Accessibility Testing

License Python Version

Color Contrast Linter is a powerful CLI tool designed to automate WCAG 2.1 color contrast compliance checks. It helps developers and designers ensure their color palettes meet AA and AAA accessibility standards directly within their workflow or CI/CD pipeline.

Built on top of cm-colors, this tool prevents accessibility regressions by linting your design tokens and color pairs against strict contrast ratio requirements.

Key Features

  • Automated WCAG Compliance: Instantly verify if your color pairs meet WCAG AA (4.5:1) or AAA (7.0:1) standards.
  • CI/CD Integration: Seamlessly integrate with GitHub Actions, GitLab CI, and other pipelines to block inaccessible code.
  • Design System Friendly: Perfect for linting design tokens, themes, and CSS variables.
  • Flexible Configuration: Define custom color pairs and contrast thresholds in a simple YAML file.
  • Rich Reporting: Get clear, color-coded output in your terminal identifying passing and failing pairs.

Installation

Install the package via pip:

pip install color-contrast-linter

Usage

1. Initialize Configuration

Start by creating a configuration file. Run the init command to generate a .color_pairs.yml file in your project root:

cc-lint init

This file allows you to define the minimum contrast standard (AA or AAA) and list the color pairs you want to test.

Example .color_pairs.yml:

min_contrast: AA
pairs:
  - foreground: "#000000"
    background: "#ffffff"
  - foreground: "#767676" # Might fail AA for normal text
    background: "#ffffff"

2. Run the Linter

Execute the lint command to check your configured color pairs for accessibility issues:

cc-lint lint

The tool will analyze each pair and report:

  • Pass/Fail status based on your min_contrast setting.
  • Actual contrast ratio (e.g., 21.0:1).
  • WCAG Level achieved (AA, AAA, or Fail).

CI/CD Integration for Accessibility

Automate your accessibility testing by adding color-contrast-linter to your CI/CD workflow. This ensures that no new color combinations violate accessibility standards.

GitHub Actions Example

Add the following step to your .github/workflows/ci.yml:

steps:
  - uses: actions/checkout@v4
  
  - name: Set up Python
    uses: actions/setup-python@v5
    with:
      python-version: '3.x'
      
  - name: Install Color Contrast Linter
    run: pip install color-contrast-linter
    
  - name: Run Accessibility Lint
    run: cc-lint lint

Contributing

We welcome contributions! Please see our Contributing Guide for details on how to submit pull requests, report bugs, and suggest features.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Metadata

Release files for color-contrast-linter 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for color-contrast-linter 0.1.1
File Size Uploaded
color_contrast_linter-0.1.1.tar.gz 42.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for color-contrast-linter 0.1.1
File Interpreter ABI Platform
color_contrast_linter-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 72.2 kB

Release files / color_contrast_linter-0.1.1.tar.gz

Download URL color_contrast_linter-0.1.1.tar.gz
Size 42.4 kB
Tags Source
SHA-256 checksum
How to use checksums
282a01d507e474878ac271997309674e4a00426d70163cfb5d846c9824503ea3
BLAKE2b-256 checksum
How to use checksums
a3af643187ae7485573ddf9dff4ea3b08933a7be129030902d3d9f7154411362
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 30, 2025.

Transparency log

Release files / color_contrast_linter-0.1.1-py3-none-any.whl

Download URL color_contrast_linter-0.1.1-py3-none-any.whl
Size 29.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
050dbc24b5004074be41f1687dcc16ab1d092077b20bc78f9b4ab516d8d20938
BLAKE2b-256 checksum
How to use checksums
331ff6cb932e98f41498499432dd7d50661407b2beacaca57578ff2ab7256755
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 30, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page