A super powerful programmable protocol-aware proxy for cracked security engineers who want to enforce least privilege at the most granular level for every identity.
Formal is a single stateless binary you deploy in your VPC via Terraform, Kubernetes, or Docker. Point your connection strings through Formal instead of directly to your datastores. Every identity — engineer, BI tool, CI/CD pipeline, AI agent — connects through the proxy, where policies are evaluated in real-time. No application changes, no SDK, up and running in under an hour.
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
Drop a single stateless binary into your VPC via Terraform, Kubernetes, or Docker. Up and routing traffic in under an hour.
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 across every protocol is evaluated in real-time. Complete visibility, automatic compliance, and least-privilege enforcement on autopilot.
Formal is API-first. Choose your IaC, pick your VPC, and deploy a single distroless Docker 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 }
Not a network-layer firewall. Formal understands Postgres wire protocol, MySQL protocol, MongoDB wire protocol, and more — enabling query-level decisions.
Point your connection string through Formal. No SDK, no agent, no code changes. Works with every ORM, driver, and client library.
Your data never leaves your infrastructure. Formal runs as a single stateless binary in your cloud account. No data exfiltration risk.
Inline evaluation with minimal latency. Policy decisions happen in microseconds. Connection pooling and protocol optimization built in.
Deploy in under an hour. No agents, no code changes — just a proxy that understands your protocols.