Console→
Sub-20ms Edge Ingestion + Docker Self-Hosting·Cloudflare Workers • Bun + SQLite→

The form backend that doesn’t get in your way.

Drop one endpoint into React, Next.js, Astro, or static HTML. Deploy on Cloudflare Workers or self-host anywhere with Docker, native SQLite, zero-OAuth CRM connectors, and HMAC webhooks.

< 15ms
Edge P95 Ingestion
0 Lock-In
Cloudflare or Docker
100/100
OpenAPI 3.1 Spec
<!-- 1. Drop-in <1.5KB script -->
<script
  src="https://api.entrywise.si/embed.js"
  defer
></script>

<!-- 2. Bind any form with a single class -->
<form
  class="entrywise-form"
  data-form-key="ew_live_79a2f8c1"
>
  <input type="email" name="email" required />
  <textarea name="message" required></textarea>
  <button type="submit">Submit</button>
</form>
POST/f/ew_live_79a2
201 Created11ms · FRA Edge
├─ verify: Turnstile OK · RFC 7807 schema valid
├─ sqlite: committed record sub_91fa8c04
└─ queue: dispatched sheets, notion, slack
01 / Architecture

Built like infrastructure, not a form builder

Every ingestion route validates payloads at the edge, commits synchronously to SQLite, and fans out to your downstream connectors asynchronously.

01< 1.5KB GZIPPED

Class-Name Auto-Binder

Load /embed.js and add class="entrywise-form" (or your own custom selector). Automatically handles AJAX submission, loading states, and inline confirmation without React boilerplate.

data-form-key="ew_live_*"
02RFC 7807 ERRORS

Auto-Schema Discovery

Start in flexible mode and EntryWise infers field types (email, number, boolean, string) on your first submission. Lock the schema in one click to enforce strict validation.

application/problem+json
03ZERO OAUTH TOKENS

Direct Database & Sheet Connectors

Sync submissions directly to Airtable Bases, Notion Databases, and concurrency-safe Google Sheets (LockService 30s mutex) without fragile OAuth refresh tokens.

5 native downstream targets
04MULTI-PROVIDER

Pluggable Email Routing

Dispatch team alerts and branded {{field}} auto-responders through Cloudflare Send Email, Resend, SMTP2GO, MailerSend, or any custom HTTP mail webhook.

DEFAULT_EMAIL_PROVIDER=*
05PRIVACY-FIRST

Turnstile, Spam Quarantine & GDPR

Verify Cloudflare Turnstile tokens at the edge, block disposable email domains, quarantine keyword spam for 1-click recovery, and enable Zero-IP storage mode for strict GDPR compliance.

store_ip: false (Zero-PII)
06SANDBOX VERIFICATION

1-Click Pipeline Smoke Testing

Append ?mock=true or trigger a smoke test from the Console to verify your entire D1/SQLite, webhook, and email pipeline. Purge all is_test=1 records in one click before launch.

POST /f/:key?mock=true
02 / Runtime Portability

One codebase. Two production runtimes.

Read Self-Hosting Guide →
Option A · Edge Serverless

Cloudflare Workers & D1 SQLite

Zero-cold-start deployment across 330+ edge locations using native Cloudflare D1, Queues, KV rate limiting, and Send Email bindings.

bunx wrangler d1 create entrywise
bunx wrangler d1 migrations apply entrywise --remote
bunx wrangler deploy
DATABASE
Cloudflare D1 (Edge SQLite)
QUEUE & EMAIL
CF Queues + CF Send Email
Option B · Zero Cloudflare Lock-In

Standalone Docker & Bun Runtime

Run on any VPS, Railway, Fly.io, or Kubernetes cluster. Uses bun:sqlite in WAL mode, in-memory or HTTP queues, and pluggable email drivers.

QUEUE_DRIVER=memory \
DEFAULT_EMAIL_PROVIDER=resend \
RESEND_API_KEY=re_live_xxx \
docker compose up -d
DATABASE
Local SQLite (WAL + Foreign Keys)
QUEUE & EMAIL
Memory/HTTP + Resend/SMTP2GO
03 / HTML Directives

Declarative form behavior from pure HTML

Reserved underscore fields control routing, headers, and bot defense without server code.

_gotchaHoneypot bot trap; non-empty values drop silently
_subjectOverrides notification email subject line dynamically
_replytoSets Reply-To header so 1-click reply emails the lead
_ccComma-separated teammate emails (capped at 5)
_redirectCustom HTTP 303 redirect URL after form submission
?mock=trueFlags submission as is_test=1 for 1-click cleanup
04 / Downstream Fanout

Zero-OAuth connectors & signed webhooks

Every connector runs asynchronously in the background queue so ingestion stays under 20ms.

Salesforce Web-to-LeadOID Form-Encoded POST
Google Sheets30s LockService Mutex
Airtable BasePAT + Auto-Typecast
Notion DatabaseInternal Token + JSON Fallback
Slack & DiscordBlock Kit & Rich Embeds
Multi-Webhook FanoutHMAC-SHA256 Signed