guardrail-rs
A zero-Python, production-grade LLM security layer written in Rust.
guardrail-rs is a reverse-proxy that sits between your application and an
LLM provider (OpenAI, Anthropic, Azure OpenAI, or any OpenAI-compatible
endpoint). It inspects every chat-completion request before it leaves your
infrastructure, blocking prompt injection attempts, redacting PII, and
enforcing custom policy rules — all with single-digit-millisecond overhead.
┌──────────┐ ┌──────────────────┐ ┌────────────┐ ┌───────────────┐
│ Your │ ──▶│ guardrail-rs │ ──▶ │ Pipeline │ ──▶│ OpenAI / │
│ App │ │ (drop-in proxy) │ │ (Stages) │ │ Anthropic /… │
└──────────┘ └──────────────────┘ └────────────┘ └───────────────┘
│
▼
403 + JSON error
(blocked requests
never leave your
network)
Why guardrail-rs?
- No Python, no PyTorch, no GPU required. A single static binary (~15 MB), built from the Rust source in this repository.
- Fast. Regex injection scanning and PII redaction both run in single-digit microseconds; the full pipeline adds well under 1 ms p99 to request latency in the default (non-ONNX) configuration.
- Drop-in. Point your existing OpenAI/Anthropic SDK's
base_urlatguardrail-rs— no application code changes required. - Fails open by default. A misbehaving stage never takes down your
production traffic; configurable per-deployment via
pipeline.on_error. - Hot-reloadable configuration. Update rules and policies without dropping connections.
- Observable. Structured audit logs (never logging raw PII) and Prometheus metrics out of the box.
Quick start
# 1. Copy and edit the example configuration
# edit guardrail.toml: set [upstream].url
# 2. Validate the configuration
# or: cargo run -p guardrail-cli -- validate --config guardrail.toml
# 3. Run the proxy
# or: cargo run -p guardrail-cli -- run --config guardrail.toml
Then point your application at http://localhost:8080 instead of
https://api.openai.com:
=
Environment variable overrides
Configuration can be overridden without editing guardrail.toml:
| Variable | Overrides |
|---|---|
GUARDRAIL_UPSTREAM |
upstream.url |
GUARDRAIL_PORT |
server.port |
GUARDRAIL_LOG_LEVEL |
observability.log_level |
GUARDRAIL_OTLP_ENDPOINT |
observability.otlp_endpoint |
Hot reload (Unix)
Send SIGHUP to reload configuration without dropping connections:
# or: just reload
What gets checked
| Stage | What it does | Performance target |
|---|---|---|
regex_injection |
Fast regex scan for jailbreaks, prompt-extraction attempts, delimiter injection | < 50 µs / 8 KB |
onnx_injection (optional) |
DeBERTa-based semantic injection detection | < 5 ms / 512 tokens |
pii_redactor |
Detects & redacts emails, phone numbers, credit cards (Luhn-validated), SSNs, IPs, API keys | < 20 µs / 4 KB |
toxicity (optional) |
RoBERTa-based toxicity/harassment detection | < 5 ms / 512 tokens |
policy_engine |
Your custom rules: keyword blocks, token-count limits, required-system-prompt checks | negligible |
The onnx_injection and toxicity stages require building with
--features onnx and providing ONNX model files (see models/README.md).
Everything else works with zero external dependencies.
CLI
guardrail run --config guardrail.toml # start the proxy
guardrail validate --config guardrail.toml # check config without starting
guardrail check "some text" --config guardrail.toml
# run text through the pipeline
# and print the decision as JSON
Configuration
See guardrail.example.toml for a fully-annotated
reference configuration, and docs/ for detailed guides:
docs/architecture.md— pipeline design and stage contractdocs/configuration.md— full TOML schema referencedocs/policy-rules.md— writing custom policy rulesdocs/deployment.md— Docker, Kubernetes, and bare-metal deploymentdocs/onnx-models.md— enabling semantic classifiersdocs/threat-model.md— what guardrail-rs protects against (and what it doesn't)docs/stage-api.md— implementing custom pipeline stagesdocs/benchmarks.md— performance targets and how to run benchmarks
Examples
See examples/README.md for client examples (curl,
Python, Node.js, Anthropic SDK) against a running proxy. To embed
guardrail-rs as a library with no HTTP server at all:
Project layout
crates/
guardrail-core # Pipeline trait, request/decision types, policy engine
guardrail-classifiers # Regex injection scanner, PII redactor, ONNX classifiers
guardrail-config # TOML config schema, validation, hot-reload
guardrail-proxy # HTTP server, request forwarding, metrics, audit log
guardrail-cli # `guardrail` binary
guardrail-test-suite # End-to-end integration tests
Development
# Install just (task runner)
# Build
# Test (requires cargo-nextest: cargo install cargo-nextest)
# Lint
# Format
# Full CI check locally
# Generate coverage report (requires cargo-tarpaulin)
See justfile for all available recipes (just --list).
License
Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Contributing
Contributions are welcome! Please see CONTRIBUTING.md
for guidelines on submitting issues and pull requests, including how to add
new prompt-injection rules or PII entity types.