splitforms.com
PLATFORMS · 25 FRAMEWORKS

Contact form for every platform.

Pick your stack. Each guide ships with a working code example, the 3-step setup, and best practices for that framework. Free for 500 submissions/month — no credit card required.

25+
frameworks supported
500
submissions / mo, free
0
lines of backend code
14ms
median latency, edge
§ 02Frameworks25 guides · same backend

HTML contact form

The simplest possible setup. Drop one `<form>` tag into your HTML and submissions land in your dashboard. Starter adds inbox delivery. No JavaScript, no backend, no server to maintain. Works on GitHub Pages, S3, Cloudflare Pages, plain Apache — anywhere static HTML can be served.

Read the guide →

Next.js contact form

Add a free Next.js contact form to your app in three steps — client component or server action, both supported. No API route to maintain, no backend code to ship.

Read the guide →

React contact form

Drop a free React contact form into any app — Vite, Create React App, Remix, Gatsby. One fetch call, full state handling, spam filtering, and Starter webhooks when you need downstream delivery.

Read the guide →

Vue contact form

Composition API, Options API, Nuxt, Vite — every Vue setup works with one tiny single-file component. Submit a form, get email notifications, dashboard analytics, and webhooks. No backend, no SDK, no $30/mo plan.

Read the guide →

Astro contact form

Astro&apos;s zero-JS-by-default philosophy pairs perfectly with the splitforms endpoint. Use a pure HTML form for static pages, an Astro Action for SSR, or a React/Vue/Svelte island for client-side interactivity. Same backend, three patterns, zero hydration cost when you don&apos;t need it.

Read the guide →

Svelte contact form

SvelteKit, classic Svelte, Vite, Astro islands — pick your flavor. One reactive component, full form handling, no backend route. Works with Svelte 4 stores and Svelte 5 runes.

Read the guide →

Webflow contact form

Webflow&apos;s built-in forms cap free submissions and gate webhooks behind paid plans. Point your existing Form Block at the splitforms endpoint instead — same drag-and-drop designer, real backend, 500 submissions/month free, and signed webhooks from Starter.

Read the guide →

Carrd contact form

Carrd&apos;s native form widget needs a Pro Standard plan AND a Mailchimp/SendGrid/Basin integration to actually email you. Skip both. Set the form Type to &quot;Custom&quot; and point it at the splitforms endpoint — 60 seconds, 500 free submissions per month.

Read the guide →

WordPress contact form

Skip Contact Form 7, WPForms, Gravity Forms, Forminator, and the rest of the bloated plugin economy. One `<form>` tag in your theme or a Custom HTML block sends submissions to your inbox plus the splitforms dashboard. No plugin, no `wp_options` clutter, no database table, no PHP cron job.

Read the guide →

Tailwind CSS contact form

A polished, accessible, dark-mode-ready Tailwind contact form template. Drop into any project that has Tailwind configured — Next.js, React, Astro, Vue, Svelte, plain HTML. Includes focus rings, validation states, loading spinner, and a working backend.

Read the guide →

AJAX (vanilla JS) contact form

No framework? No problem. Submit a form via the native `fetch()` API and show inline success/error messages — pure browser JavaScript, zero dependencies, no jQuery, no axios. Works in every modern browser back to Edge 18.

Read the guide →

Hugo contact form

Hugo builds blazing-fast static sites — but ships zero backend. Drop a partial or shortcode in your theme, pull the access key from site params, and you have a working contact form without spinning up a Cloud Run service or wiring Netlify Functions. Pure HTML, zero JavaScript, full spam protection.

Read the guide →

Gatsby contact form

Gatsby is React under the hood, so any React form works — but the build is static. Use the splitforms endpoint to skip Netlify Forms (which limit submissions on free tier), Lambdas, Gatsby Functions, and AWS API Gateway entirely. One React component, 500 free submissions per month, dashboard included.

Read the guide →

Eleventy contact form

11ty&apos;s beauty is its simplicity — and a contact form should match. One Nunjucks (or Liquid) include, one form tag, no serverless function in sight. Pull the access key from global data, render zero JavaScript, and ship submissions straight to your inbox.

Read the guide →

SvelteKit contact form

Use SvelteKit&apos;s progressive-enhancement form actions for a no-JS-required experience, or a plain client-side fetch for tight control over loading state. Both patterns work with the splitforms endpoint — standard FormData in, JSON out, every adapter supported.

Read the guide →

Framer contact form

Framer&apos;s built-in forms send to a single email, gate webhooks behind paid plans, and limit free submissions. Paste a Code Component instead — same canvas drag-and-drop, real backend, 500 submissions/month free, dashboard search, and signed webhooks from Starter.

Read the guide →

Nuxt contact form

Nuxt 3, Nuxt Content, Nuxt Studio, Nuxt UI — all flavors work. Use a Vue 3 Composition API page, pull your key from runtimeConfig.public, and skip writing a `/server/api` route. Or use a Nitro server route to keep the key server-side. Both patterns supported.

Read the guide →

Alpine.js contact form

Alpine.js's tiny footprint pairs naturally with splitforms — declare `x-data` for state, `@submit.prevent` for the handler, and POST to splitforms. No build step, no SPA framework, no server route.

Read the guide →

Bootstrap contact form

Bootstrap 5's form components handle the UI; splitforms handles the backend. Use `.form-control` + `.was-validated` for native validation, POST to splitforms, and ship a working contact form in minutes.

Read the guide →

Jekyll contact form

Jekyll-built static sites have no backend by design — splitforms gives them one. Drop the form into a Liquid template, point the action at splitforms, and your GitHub Pages or S3-hosted Jekyll site has a working contact form in seconds.

Read the guide →

Vite contact form

Vite's fast HMR and zero-config bundling pair well with splitforms. Whether you're building vanilla, React, Vue, Svelte, or Solid on top of Vite, the same fetch-based pattern works — read your access key from `import.meta.env`, POST to splitforms.

Read the guide →

JavaScript contact form

Plain HTML form plus a few lines of vanilla JavaScript — no framework, no library, no build step. fetch() POSTs the FormData to splitforms; you get the response inline and update the DOM. Zero dependencies.

Read the guide →

Cloudflare Pages contact form

Cloudflare Pages doesn't ship a built-in form handler the way Netlify does. splitforms fills the gap — your static Pages site POSTs the form to splitforms, and you skip writing a Worker for it. Works with Pages Functions too if you prefer a server-side proxy.

Read the guide →

Netlify contact form

Netlify Forms works but has a 100-submission/month free cap, no spam dashboard you can train, and submissions can't be re-delivered. splitforms swaps in cleanly: same Netlify deploy, 5x larger free tier with a real dashboard, and signed webhooks from Starter.

Read the guide →

Vercel contact form

Vercel has no built-in form handler — every form needs a backend API route or third-party service. splitforms is the cheapest path: direct POST from any Vercel deploy (Next.js, SvelteKit, Astro, Nuxt, static) with no `/api` route required.

Read the guide →
✻ ✻ ✻

Ship a contact form in 60 seconds.

500 free submissions per month. No credit card. Pick your framework above and copy the working snippet.

Get free access key →Read the docs