Monorepo for Guardrails-AI-owned validators, published to public PyPI as
guardrails-ai-<name> and importable from the PEP 420 guardrails_ai namespace.
pip install guardrails-ai-detect-pii
from guardrails import Guard
from guardrails_ai.detect_pii import DetectPII
guard = Guard().use(DetectPII)
No account, API key, or hub login is needed — every validator is a plain PyPI package.
The full catalog is All Hub Validators below. It is generated from
each package's pyproject.toml by
scripts/generate_validators_index.py and is
consumed programmatically by the validator hub UI, so its
format is a contract — see the script's docstring before changing it. Regenerate after
adding a validator or editing its description/tags:
python scripts/generate_validators_index.py
65 validators. Each is a standalone PyPI package — install it with pip install <package>; no account, API key, or hub login is required.
rapidfuzz) to compare the LLM's response against a provided system prompt. CodeEach validator is a self-contained package at the repo root:
<name>/
└── py/
├── pyproject.toml # name = guardrails-ai-<name>, license = MIT
├── Makefile # install / lint / type / test / license-check
├── pyrightconfig.json, .coveragerc, LICENSE (MIT), README.md
├── src/guardrails_ai/<name>/ # importable as guardrails_ai.<name> (PEP 420, no __init__ at namespace root)
└── tests/
guardrails-ai-<name> (underscores → dashes).from guardrails_ai.<name> import <Export>.@register_validator(name="guardrails/<name>"),
so existing guards keep working.<name>-py-<version>.From <name>/py in a fresh virtual environment:
python -m venv .venv && . .venv/bin/activate
make install install-dev
make lint # ruff
make type # pyright
make test # pytest ./tests
make license-check # license sweep (MIT-only dependency trees)
Create a new <name>/py/ package following the layout above: an MIT-licensed
pyproject.toml named guardrails-ai-<name>, source under src/guardrails_ai/<name>/,
and tests. CI picks it up automatically via the */py/** path filters.
Each package pins its fully resolved dependency tree in py/requirements.lock
for reproducible installs — universal locks, valid across platforms and
Python 3.10-3.13. sensitive_topics has no lock yet: it depends on
guardrails-ai-restricttotopic, which is not yet on PyPI, so its lock will
generate once that package is published.
Regenerate them with uv:
./scripts/generate_locks.sh
Every validator package is MIT and must depend only on permissively licensed
packages. The merge-blocking license sweep (make license-check, wired into
validators_pr_qc.yml) reads the allowlist in
.licenses-allow.txt and the documented, manually
reviewed exceptions in .licenses-exceptions.txt.
.github/workflows/validators_pr_qc.yml — change-detected matrix
({changed validator} × {py 3.10–3.13}): install, lint, type, tests, license sweep..github/workflows/validators_publish.yml — change-detected trusted publishing
to public PyPI via OIDC (no tokens), with a version-bump guard and git tagging..github/workflows/bootstrap_publish.yml — one-time token-auth publish that
creates the PyPI projects, before per-project trusted publishers are bound..github/dependabot.yml — weekly pip (all /*/py) + github-actions updates.13 commits
Python
91.4%
Makefile
8.4%
Monorepo for Guardrails-AI-owned validators, published to public PyPI as
guardrails-ai-<name> and importable from the PEP 420 guardrails_ai namespace.
pip install guardrails-ai-detect-pii
from guardrails import Guard
from guardrails_ai.detect_pii import DetectPII
guard = Guard().use(DetectPII)
No account, API key, or hub login is needed — every validator is a plain PyPI package.
The full catalog is All Hub Validators below. It is generated from
each package's pyproject.toml by
scripts/generate_validators_index.py and is
consumed programmatically by the validator hub UI, so its
format is a contract — see the script's docstring before changing it. Regenerate after
adding a validator or editing its description/tags:
python scripts/generate_validators_index.py
65 validators. Each is a standalone PyPI package — install it with pip install <package>; no account, API key, or hub login is required.
rapidfuzz) to compare the LLM's response against a provided system prompt. CodeEach validator is a self-contained package at the repo root:
<name>/
└── py/
├── pyproject.toml # name = guardrails-ai-<name>, license = MIT
├── Makefile # install / lint / type / test / license-check
├── pyrightconfig.json, .coveragerc, LICENSE (MIT), README.md
├── src/guardrails_ai/<name>/ # importable as guardrails_ai.<name> (PEP 420, no __init__ at namespace root)
└── tests/
guardrails-ai-<name> (underscores → dashes).from guardrails_ai.<name> import <Export>.@register_validator(name="guardrails/<name>"),
so existing guards keep working.<name>-py-<version>.From <name>/py in a fresh virtual environment:
python -m venv .venv && . .venv/bin/activate
make install install-dev
make lint # ruff
make type # pyright
make test # pytest ./tests
make license-check # license sweep (MIT-only dependency trees)
Create a new <name>/py/ package following the layout above: an MIT-licensed
pyproject.toml named guardrails-ai-<name>, source under src/guardrails_ai/<name>/,
and tests. CI picks it up automatically via the */py/** path filters.
Each package pins its fully resolved dependency tree in py/requirements.lock
for reproducible installs — universal locks, valid across platforms and
Python 3.10-3.13. sensitive_topics has no lock yet: it depends on
guardrails-ai-restricttotopic, which is not yet on PyPI, so its lock will
generate once that package is published.
Regenerate them with uv:
./scripts/generate_locks.sh
Every validator package is MIT and must depend only on permissively licensed
packages. The merge-blocking license sweep (make license-check, wired into
validators_pr_qc.yml) reads the allowlist in
.licenses-allow.txt and the documented, manually
reviewed exceptions in .licenses-exceptions.txt.
.github/workflows/validators_pr_qc.yml — change-detected matrix
({changed validator} × {py 3.10–3.13}): install, lint, type, tests, license sweep..github/workflows/validators_publish.yml — change-detected trusted publishing
to public PyPI via OIDC (no tokens), with a version-bump guard and git tagging..github/workflows/bootstrap_publish.yml — one-time token-auth publish that
creates the PyPI projects, before per-project trusted publishers are bound..github/dependabot.yml — weekly pip (all /*/py) + github-actions updates.13 commits
Python
91.4%
Makefile
8.4%