Self-Hosting Overview

formdata.dev runs entirely on Cloudflare's developer platform. Self-hosting gives you full control over your data pipeline, secrets, and billing.

Prerequisites

Requirement Purpose
Cloudflare account Workers, D1, KV, Queues, Durable Objects
Node.js 18+ Build tooling and Wrangler CLI
Wrangler CLI Deploy and manage Workers (npm i -g wrangler)
A domain on Cloudflare Required for custom hostname provisioning (subdomain feature)

Cloudflare Services Used

Service Binding Purpose Free Tier
Workers HTTP routing, ingestion, admin API 100k requests/day
D1 DB Organization, form, destination, key storage 5 GB
KV FORM_KV Edge form config cache for fast ingestion 100k reads/day
Queues DELIVERY_QUEUE Async delivery with retry and DLQ 1M messages/month
Durable Objects MCP_AGENT MCP agent for AI-driven tenant management Included with Workers Paid

Cost Considerations

For most use cases, formdata.dev fits within Cloudflare's free tier:

  • Low-volume sites (under 100k submissions/day): Free tier covers Workers, KV reads, and Queue messages
  • D1 storage: Minimal — each form config is a few hundred bytes. 5 GB free tier is more than enough for thousands of organizations
  • KV writes: Only happen on admin mutations (form create/update/delete), not on submissions. Submissions only read from KV.
Workers Paid Plan

Durable Objects (used for the MCP agent) require the Workers Paid plan ($5/month). If you do not need MCP tools, you can remove the Durable Object binding and the MCP routes to stay on the free tier.

What You Get

By self-hosting, you control:

  • Secrets — SMTP passwords, captcha secrets, and API tokens stay in your Cloudflare account
  • Data residency — Choose your D1 location and KV edge locations
  • Custom domain — Use your own domain instead of formdata.dev
  • Queue configuration — Adjust retry counts, batch sizes, and DLQ behavior
  • Zero vendor lock-in — The entire codebase is open and runs on standard Cloudflare primitives