Least privilege, enforced at the wire-protocol level — on autopilot.
A programmable reverse proxy that parses 15+ wire protocols and enforces security policies inline — query-level, every identity, sub-10ms.

Deploy a single stateless binary in your VPC via Terraform, Kubernetes, or Docker. Point connection strings through Formal instead of directly to your datastores. Every identity — engineer, BI tool, CI/CD pipeline, AI agent — hits the proxy, where policies evaluate in real time. No app changes, no SDK. See the quickstart guide →
Authenticate / Authorize Mask / Filter / Rewrite Log / Monitor / Alert +------------------+ +------------------+ +------------------+ | Identities | ---> | Formal Proxy | ---> | Resources | +------------------+ +------------------+ +------------------+ Response path: identities <--- formal proxy <--- resources Examples: idp users, CI/CD, BI tools, AI agents | postgres, mysql, mongodb, snowflake, k8s, http, mcp
One stateless binary in your VPC via Terraform, Kubernetes, or Docker. Most teams route first traffic in under an hour — Notion secured hundreds of datastores in days. Read how →
Use the no-code editor or write Rego policies. Set masking rules, access controls, and approval workflows. Test with dry-run before going live.
Every query, every protocol, evaluated in real time. Full visibility, automatic compliance, least privilege on autopilot.
Security as Code
API-first. Choose your IaC, pick your VPC, deploy a single distroless image to protect your entire stack.
See docs →# Connect a resource resource "formal_resource" "production_pg" { name = "production-postgres" technology = "postgresql" hostname = "db.internal.company.com" port = 5432 } # Mask PII for non-privileged users (Rego) resource "formal_policy" "mask_pii" { name = "mask-pii-data" description = "Mask PII fields for non-privileged users" status = "active" module = <<-EOT package formal.v2 import future.keywords.if import future.keywords.in response := { "action": "mask", "type": "nullify", "columns": pii_columns } if { not "pii_access" in input.user.groups pii_columns := [col | col := input.columns[_] col.data_label in ["email", "ssn", "phone"] ] count(pii_columns) > 0 } EOT }
Protocol-native
Not a network-layer firewall. Formal understands Postgres wire protocol, MySQL protocol, MongoDB wire protocol, and more — enabling query-level decisions.
Zero application changes
Point your connection string through Formal. No SDK, no agent, no code changes. Works with every ORM, driver, and client library.
Deployed in your VPC
Data never leaves your infrastructure. Single stateless binary in your cloud account. Zero exfiltration risk.
Sub-10ms p50 overhead
Single-digit milliseconds at p50. Compiled Go, stateless, with connection pooling and protocol optimization built in.
Ready to secure your AI, data and infra?
No agents, no code changes — just a proxy that understands your protocols.


