Feature

A contact form is not a backend project.

Every site on slew accepts form submissions — static sites included. Point a plain HTML form at a path on your own site and you're done: no JavaScript, no third-party form service, no serverless function to write for a contact page.

The whole integration

<form action="/_slew/forms/contact" method="POST">
  <input name="email" type="email" required>
  <textarea name="message"></textarea>
  <button>Send</button>
</form>

The form registers itself at the first submission — there is no build-time scanning of your HTML to silently miss a JavaScript-rendered form. The endpoint lives on your own domain, so nothing is cross-origin and no external service shows up in your markup. Submissions land in the console, and you get an email within the minute.

Made for client work

Route a form's notifications to the client's inbox, keep the submission history in the console with CSV export, and set a retention window so old submissions delete themselves. Form data is usually personal data — it stays on EU infrastructure, no visitor IP addresses or user agents are stored with it, and the retention window is the GDPR conversation with your client already answered.

Included means included

Forms come with every plan, the free one included. No per-submission pricing that turns a successful campaign into a surprise invoice — plans hold a monthly allowance (100 on Free, 1,000 on Pro) and at the top of it submissions pause until the month rolls over or the plan grows. Spam is filtered with an invisible honeypot field and per-visitor rate limits, quietly.

Frequently asked

Does this work on a purely static site?
Yes — that is the point. The platform answers POST /_slew/forms/<name> on every site it serves, so a static HTML page gets working forms with no code.
Can I use it from JavaScript?
Yes: POST JSON to the same path and you get { "ok": true } back. Works from React, htmx, or a plain fetch().
Where does the data live?
On slew’s EU infrastructure, alongside everything else. Export any form’s history as CSV, delete submissions individually, or set a retention window to have them delete themselves.
What about spam?
Add the documented hidden honeypot field and bot submissions are silently dropped; per-visitor rate limits cap the rest. No CAPTCHA to put in front of your visitors.
Migrating from Netlify Forms?
Change the form’s action to /_slew/forms/<name> and drop the data-netlify attribute — the docs page has the two-line diff.