Svelte forms can post via fetch with a few lines.
<script>
let status = "idle";
async function submit(e) {
status = "sending";
const body = Object.fromEntries(new FormData(e.currentTarget));
const res = await fetch("https://forms.elimbi.com/submit", {
method: "POST",
headers: { "Content-Type": "application/json", Accept: "application/json" },
body: JSON.stringify({ ...body, access_key: "YOUR-ACCESS-KEY" }),
});
status = (await res.json()).success ? "sent" : "error";
}
</script>
{#if status === "sent"}<p>Thanks!</p>{:else}
<form on:submit|preventDefault={submit}>
<input name="name" required />
<input name="email" type="email" required />
<textarea name="message" required></textarea>
<input type="checkbox" name="botcheck" style="display:none" />
<button disabled={status === "sending"}>Send</button>
</form>{/if}Works with adapter-static because nothing runs on your server.
access_key — your key (required).email — if present, FormDrop sets it as Reply-To so you can answer directly.subject — optional email subject.redirect — optional thank-you page URL for plain HTML posts.botcheck — hidden honeypot; if a bot fills it, the submission is silently dropped.Every other field is included in the email and saved in your dashboard log. Send Accept: application/json to get a JSON reply instead of a redirect.
Yes: 250 submissions/month and unlimited forms on the free plan. Pro is $9/mo for 10,000/month.
Not currently — FormDrop handles text fields. Link to a file share instead.
The plain HTML form version does; the fetch version needs JS.