Plugin Ecosystem

51 Built-in Plugins

Authentication, rate limiting, AI/LLM, observability, transformation — every capability you need, built in and production-ready.

🔐 Authentication
mtls_auth
Priority: 100
Mutual TLS client certificate authentication. Validates client certificates against a trusted CA, checks CRL for revoked certs.
HTTPTCP
jwks_auth
Priority: 110
JWT validation using a remote JWKS endpoint. Caches public keys with configurable TTL. Supports RS256, ES256, RS512.
HTTPgRPC
jwt_auth
Priority: 115
Stateless JWT validation with a shared secret. HS256 support. Validates expiry, issuer, audience, and custom claims.
HTTPgRPCWebSocket
key_auth
Priority: 120
API key authentication via header or query parameter. Keys stored per consumer. Supports key rotation without downtime.
HTTPWebSocket
ldap_auth
Priority: 125
LDAP/Active Directory authentication. Bind-and-search flow with connection pooling. Group membership checks.
HTTP
basic_auth
Priority: 130
HTTP Basic Authentication. Credentials stored per consumer with bcrypt hashing. WWW-Authenticate header on 401 responses.
HTTP
hmac_auth
Priority: 135
HMAC request signing verification. Validates signature over request method, path, and timestamp. Prevents replay attacks with timestamp window.
HTTP
soap_ws_security
Priority: 140
WS-Security header validation for SOAP APIs. Supports UsernameToken and X.509 certificate tokens.
HTTP
🛡 Authorization
access_control
Priority: 200
Consumer-level access control lists. Grant or deny specific consumers access to specific routes or operations.
HTTPgRPC
ip_restriction
Priority: 50
IP allowlist and denylist with CIDR notation support. Applied before authentication for zero-cost blocking of unwanted sources.
HTTPTCPUDP
bot_detection
Priority: 60
User-agent pattern matching and behavioral heuristics to detect and block automated/bot traffic before it reaches backends.
HTTP
Rate Limiting
rate_limiting
Priority: 300
Token bucket rate limiting for HTTP. Per-consumer, per-IP, or global limits. Configurable window (second/minute/hour/day). Returns 429 with Retry-After header.
HTTPgRPC
ws_rate_limiting
Priority: 305
Rate limiting for WebSocket connections. Limits messages per second per connection or per consumer. Closes connection on sustained violation.
WebSocket
udp_rate_limiting
Priority: 310
UDP packet rate limiting per source IP. Sliding window counter with configurable burst allowance.
UDP
tcp_connection_throttle
Priority: 315
Limit maximum concurrent TCP connections per source IP or globally. Immediate RST on limit exceeded.
TCP
🤖 AI / LLM
ai_token_metrics
Priority: 400
Track prompt tokens, completion tokens, and total usage per LLM request. Export to Prometheus or structured logs for cost attribution and budgeting.
HTTPOpenAI API
ai_request_guard
Priority: 410
Model access control. Restrict which consumers can use which AI models. Enforce model allowlists and denylists at gateway level before requests reach providers.
HTTP
ai_rate_limiter
Priority: 420
Token-bucket rate limiting based on LLM token count rather than request count. Set per-consumer token budgets per minute, hour, or day to control API costs.
HTTP
ai_prompt_shield
Priority: 430
Prompt injection detection and content filtering. Block requests with forbidden patterns, jailbreak attempts, or PII before reaching LLM providers.
HTTPSecurity
🔄 Transformation
request_transformer
Priority: 500
Add, remove, or rename request headers. Modify query parameters. Set or override request body fields.
HTTPgRPC
response_transformer
Priority: 505
Add, remove, or modify response headers. Inject response body fields. Strip sensitive upstream headers before returning to clients.
HTTP
serverless_function
Priority: 510
Execute a serverless function as part of request processing. Call AWS Lambda, GCP Functions, or custom HTTP functions mid-pipeline.
HTTP
grpc_deadline
Priority: 515
Inject or enforce gRPC deadline headers. Prevent unbounded gRPC streams from consuming backend resources.
gRPC
response_caching
Priority: 520
In-memory response caching with TTL. Configurable cache key (path, headers, query params). Cache-Control header awareness.
HTTP
response_size_limiting
Priority: 525
Limit maximum response body size. Truncates or rejects oversized responses before streaming to clients.
HTTP
request_size_limiting
Priority: 530
Reject requests with bodies exceeding the configured maximum size. Returns 413 before the body is fully read.
HTTP
ws_message_size_limiting
Priority: 535
Limit WebSocket message frame size. Closes connection with 1009 code on frames exceeding the configured limit.
WebSocket
🏳 Routing / Protocol
grpc_method_router
Priority: 600
Route individual gRPC service methods to different upstreams. Override the default upstream per gRPC method or service.
gRPC
graphql
Priority: 605
GraphQL-aware request handling. Query complexity limits, introspection blocking, operation type filtering (query/mutation/subscription).
HTTP
cors
Priority: 610
Cross-Origin Resource Sharing. Configurable allowed origins, methods, headers. Preflight request handling with cache control.
HTTP
spec_expose
Priority: 50
Serve API specification documents (OpenAPI, WSDL, WADL) on a /specz sub-path. Unauthenticated endpoint that short-circuits before authentication.
HTTPgRPC
📊 Observability
stdout_logging
Priority: 700
Structured JSON access logging to stdout. Configurable fields: method, path, status, latency, upstream, consumer ID.
HTTPgRPC
http_logging
Priority: 705
POST structured log entries to an external HTTP log collector endpoint. Batching and retry on failure.
HTTP
tcp_logging
Priority: 710
Send log entries to a TCP log collector (e.g., Logstash). Persistent connection with reconnect on failure.
HTTP
loki_logging
Priority: 715
Ship structured logs to Grafana Loki. Label extraction for multi-tenant log routing and filtering.
HTTPgRPC
udp_logging
Priority: 720
Send log entries via UDP to a syslog or custom UDP collector. Fire-and-forget, no request latency impact.
HTTP
ws_logging
Priority: 725
Log WebSocket connection lifecycle events: open, close, error, message count, bytes transferred.
WebSocket
ws_frame_logging
Priority: 730
Log individual WebSocket frame contents. Configurable sampling rate. For debugging and audit purposes.
WebSocket
statsd_logging
Priority: 735
Emit request metrics via UDP StatsD protocol. Compatible with Datadog, InfluxDB, Telegraf, and standard StatsD collectors.
HTTPgRPC
prometheus_metrics
Priority: 740
Expose Prometheus-format metrics at /metrics. Request count, latency histograms, upstream health, connection pool stats, plugin execution times.
HTTPgRPCWebSocket
otel_tracing
Priority: 745
OpenTelemetry distributed tracing with OTLP export. Automatic span creation, upstream correlation, W3C trace context propagation.
HTTPgRPC
transaction_debugger
Priority: 750
Per-request debug traces showing every plugin execution, timing breakdowns, routing decisions, and upstream response details. Essential for troubleshooting.
HTTPgRPC
Request Control
correlation_id
Priority: 800
Generate or propagate a unique request ID. Inject as X-Correlation-ID header upstream and include in log entries for distributed tracing.
HTTPgRPC
request_termination
Priority: 810
Immediately terminate requests with a configurable status code and body. Useful for maintenance mode, staged rollouts, or A/B testing.
HTTP
body_validator
Priority: 820
JSON schema validation of request bodies. Reject malformed payloads before they reach backends. Configurable error response format.
HTTP

Plugin Config Reference

jwt_auth
yaml
- name: jwt_auth
  priority: 115
  config:
    secret: "${JWT_SECRET}"
    algorithm: HS256
    header: Authorization
    bearer_prefix: "Bearer "
    claims:
      iss: "my-auth-service"
      aud: "ferrum-edge"
rate_limiting
yaml
- name: rate_limiting
  priority: 300
  config:
    limit_by: consumer  # ip | global | consumer
    requests: 1000
    window: minute      # second | minute | hour | day
    error_code: 429
    error_message: "Rate limit exceeded"
key_auth
yaml
- name: key_auth
  priority: 120
  config:
    header: X-API-Key
    # OR use query param:
    # query_param: api_key
    hide_credentials: true
cors
yaml
- name: cors
  priority: 610
  config:
    origins:
      - "https://app.example.com"
      - "https://admin.example.com"
    methods: [GET, POST, PUT, DELETE, OPTIONS]
    headers: [Content-Type, Authorization]
    max_age: 3600
    credentials: true
prometheus_metrics
yaml
- name: prometheus_metrics
  priority: 740
  config:
    latency_buckets:
      - 0.005
      - 0.01
      - 0.025
      - 0.05
      - 0.1
      - 0.5
      - 1.0
    labels:
      - proxy_name
      - consumer_id
      - status_code
otel_tracing
yaml
- name: otel_tracing
  priority: 745
  config:
    endpoint: "http://otel-collector:4317"
    service_name: "ferrum-edge"
    propagation: w3c  # b3 | jaeger | w3c
    sample_rate: 1.0  # 0.0 to 1.0
ai_prompt_shield
yaml
- name: ai_prompt_shield
  priority: 430
  config:
    forbidden_patterns:
      - "ignore previous instructions"
      - "jailbreak"
      - "\\bSSN\\b"
    action: block  # block | sanitize | log
    error_code: 400
    error_message: "Request blocked by content policy"
ip_restriction
yaml
- name: ip_restriction
  priority: 50
  config:
    allow:
      - "10.0.0.0/8"
      - "192.168.1.100"
    # deny:  # use allow OR deny, not both
    #   - "203.0.113.0/24"
    error_code: 403

Need a Custom Plugin?

Write custom plugins in Rust and auto-discover them at build time. Full access to every request lifecycle hook.

Read the Plugin Development Guide →