Subprocessors
5 current or deployment-selected subprocessors, derived by reading the dependency manifest, host configuration, and modules that open outbound connections. Each row names the file that establishes it.
The vendors that can see ControlFrame data
| Vendor | Purpose | Data categories | Region | DPA |
|---|---|---|---|---|
| Netlifyalways in the path | Application hosting, serverless functions, CDN, DNS, and private aggregate storage for controlframe.ai | HTTP request metadata used for hosting and edge abuse limiting, function execution logs, session cookies in transit, identifier-free public homepage Web Vitals histograms, and — where object storage falls back to Netlify Blobs — evidence artifacts and run records | Provider-operated edge and hosting regions; no contractual residency restriction recorded | not recorded |
| Supabasealways in the path | Managed PostgreSQL for the control plane, and its managed backups | All tenant application data: organizations, projects, identities and sessions, audit runs, control results, evidence object metadata and content digests, the hash-chained access log | AWS us-east-2 (United States) | not recorded |
| Anthropicreached only on a specific path | Managed frontier inference for agentic evidence planning and run review | Prompt content for the routed purpose. Payloads classified `restricted` are denied to this boundary by default and the denial is recorded | Provider-operated regions; no contractual residency restriction recorded | not recorded |
| Resendalways in the path | Transactional email for invitations, account verification, password reset, engagement and recipient-mailbox delivery, and inquiry follow-up | Recipient name and email address, organization and role context where included, time-bounded invitation/verification/reset/recipient links, engagement or mailbox delivery context, and fields submitted through the public inquiry flow | Provider-operated regions; no contractual residency restriction recorded | not recorded |
| S3-compatible object storagenamed by the deployment | Evidence artifacts, export packages, and content-addressed objects | Evidence artifacts and export packages, stored under tenant-scoped keys | Named by the operator at deployment time; the platform ships no default | not recorded |
Where each row came from
- NetlifyProvider-operated edge and hosting regions; no contractual residency restriction recorded
- netlify.toml
- @netlify/plugin-nextjs (package.json)
- @netlify/blobs in lib/audit-platform/storage.ts, lib/runs/blobs-store.ts, lib/gtm/lead-capture.ts, lib/observability/public-web-vitals-store.server.ts
- SupabaseAWS us-east-2 (United States)
- prisma/schema.prisma (datasource db, provider postgresql, url env DATABASE_URL)
- docs/DESIGN-CREDENTIALS-AND-TRUST.md §B3
This is the database the tenant shield protects. The runtime connects to it as controlframe_app, which is neither a superuser nor BYPASSRLS.
- AnthropicProvider-operated regions; no contractual residency restriction recorded
- @anthropic-ai/sdk in lib/ai/model-router.ts
- lib/ai/egress-gate.ts (deny-by-default for restricted payloads to external-managed boundaries)
Reached only when the deployment routes to the managed-frontier mode. A deployment pointed at a customer-controlled model endpoint does not reach this vendor at all.
- ResendProvider-operated regions; no contractual residency restriction recorded
- https://api.resend.com/emails in lib/auth/auth-email-transport.ts
- lib/auth/invitation-email.ts, lib/auth/email-verification.ts, and lib/auth/password-reset-email.ts
- engagement and recipient-mailbox email call sites through the shared auth email transport
- https://api.resend.com/emails in lib/gtm/lead-notification.ts
- S3-compatible object storageNamed by the operator at deployment time; the platform ships no default
- @aws-sdk/client-s3 in lib/audit-platform/storage.ts
- CONTROLFRAME_OBJECT_STORAGE_{PROVIDER,BUCKET,REGION,ENDPOINT}
Provider, endpoint, region and bucket are all supplied by the deployment. An Enterprise customer pointing this at their own bucket in their own region makes this row theirs rather than ours — which is the intended arrangement, and the reason it is listed as a shape instead of a named vendor.
What is deliberately not on this list
- Systems ControlFrame collects evidence from
- They are the customer's own targets, configured and credentialed by the customer. ControlFrame is not their processor; it is a client of them on the customer's instruction.
- The private runner
- It runs inside the customer's boundary and is operated by the customer, so the runner itself is not a subprocessor. Credentials and signing private keys remain runner-side; legacy-selected artifact bytes may enter ControlFrame's governed custody, while Runner v2 is currently verify-only and cannot collect or transfer artifacts.
- Build and development tooling
- It never holds production data. A subprocessor list that includes a linter is a list nobody reads carefully.
How a change to this list reaches you
Notification of change is a standard DPA clause, and a list published without a notification path does not satisfy it. Today the path is the contact channel named in the privacy notice; a dedicated subprocessor-change subscription is not yet provisioned. This page states that rather than implying one exists.
Read the effective privacy notice · Back to the trust center