Guides
Comparisons and how-tos for putting reliable forms on static sites.
Astro ships zero JavaScript by default — which is exactly why a contact form needs somewhere else to POST to. Here's a plain HTML form that works with static output, plus an optional fetch enhancement.
An honest, sourced roundup of Formspree, Basin, Forminit, Web3Forms, Formspark, Netlify Forms, and SubmissionBuddy — free tiers, pricing, and who each one is actually for.
Eleventy has no opinion about servers, backends, or forms — that's the point. Here's a clean contact form pattern using a Nunjucks template and a global data file for the endpoint.
Framer's native form component doesn't post to a URL you control — it posts to Framer's own handler, which then relays to a webhook you configure. Here's the exact setup, and what Framer expects your endpoint to do.
Hugo builds pure static HTML — there's no server behind it to receive a POST. Here's a zero-JavaScript contact form for Hugo, with the endpoint pulled from your site config.
Jekyll ships plain HTML with no server behind it. Here's a working contact form using an include, Liquid templating for the endpoint, and no JavaScript required.
Netlify Forms changed its pricing model in 2025 — new accounts get unlimited free submissions, but only as long as you stay on Netlify and only if your form markup matches what Netlify's build-time scanner expects. Here's a plain-HTML alternative that works the same way everywhere.
You don't need a Route Handler, a database connection, or an env var full of SMTP credentials to receive a contact form in Next.js. Here's the App Router version that works even on a static export.
React renders the form beautifully. It doesn't send email, store submissions, or filter spam. Here's a complete, working React contact form with useState, fetch, and success/error states — no backend of your own.
How SubmissionBuddy and Basin differ on free tiers, pricing, integrations, and architecture — with every Basin claim verified against their official pricing page and dated.
Getform rebranded to Forminit in January 2026. Here's how SubmissionBuddy compares to Forminit on free tiers, pricing, webhooks, and architecture — every claim verified and dated.
How SubmissionBuddy compares to Netlify's built-in form handling — pricing, portability, and what "free and unlimited" actually means, with every Netlify claim verified and dated.
How SubmissionBuddy and Web3Forms differ on free tiers, pricing, file uploads, and architecture — with every Web3Forms claim verified against their official pricing page and dated.
Prerendered SvelteKit pages have no +server.js to catch a form POST. Here's a progressively-enhanced +page.svelte contact form that works with adapter-static, no server route required.
v-model gives you reactive form fields in about three lines. It doesn't give you a place to send them. A complete Vue 3 script setup contact form using fetch, with honeypot spam protection and no backend of your own.
Webflow's free plan caps you at 50 total form submissions, and every submission lives inside Webflow's dashboard, not yours. Here's how to point a native Webflow form at SubmissionBuddy instead — no embed, no custom code.
Simply Static and similar plugins export your pages beautifully — and quietly strip out Contact Form 7, WPForms, or whatever plugin was rendering your contact form, because there's no PHP left to process the submission. Here's what to replace it with.
How SubmissionBuddy and Formspree differ on free tiers, pricing, data retention, and architecture — with every Formspree claim verified against their official docs and dated.
A practical how-to for collecting wedding RSVPs on a static wedding website — guest name, attending status, meal choice, plus-one, and song requests — with responses landing in email and a searchable, exportable dashboard.
Cloudflare Pages has no built-in form backend. Here are your three options — and how to have a working, spam-protected contact form live in five minutes without writing a Function.
A walkthrough of SubmissionBuddy's ingestion pipeline — why a submission is written to durable storage before anything else touches it, and what that buys you.