forms

Forms that work without a backend

Add one attribute to a form on your static site and every submission lands in your dashboard. No JavaScript, no embedded widget, no third-party service, and nothing for the person filling it in to sign up for.

index.html
<form harvis-form="contact">
  <input name="email" type="email" required>
  <textarea name="message"></textarea>
  <button>Send</button>
</form>
how it works

Three steps, and one of them is redeploying

There is no form builder to learn and no endpoint to copy. The attribute is the whole setup.

  1. 01

    Add the attribute

    Put harvis-form on any form in your HTML. Give it a name if the site has more than one. Leave action and method off — they get filled in when the page is served.

  2. 02

    Redeploy

    Drag the folder in again, or run npx harvis. Nothing to configure, no key to paste, no switch to flip in a dashboard first.

  3. 03

    Read what comes in

    Submissions appear under your site in the dashboard, newest first. Open a row to read the whole thing, or take the lot as a CSV.

the markup

The whole thing is two attributes

harvis rewrites the form on its way out of the server, so the page you wrote stays the page you wrote.

what you write
<form harvis-form="contact"
      data-harvis-redirect="/thanks.html">
  <input name="email" type="email" required>
  <button>Send</button>
</form>
what your visitors get
<form harvis-form="contact"
      data-harvis-redirect="/thanks.html"
      action="/__harvis/form/contact" method="post">
  <input type="hidden" name="_harvis_redirect" value="/thanks.html">
  <input type="text" name="_harvis_hp" tabindex="-1" aria-hidden="true" style="…">
  <input name="email" type="email" required>
  <button>Send</button>
</form>

The two attributes

harvis-form
Marks the form as one to collect. The value names it, so several forms on one site stay apart; leave the value off and it is collected under “default”.
data-harvis-redirect
Optional. The page on your site to send people to after they submit. Anything pointing off your site is ignored.
included

What you get

Everything below is on by default. There is no settings page for any of it.

  • No JavaScript

    The form posts the way HTML has always posted. It still works with scripts blocked, on a slow phone, and in a browser that renders text and nothing else.

  • Spam gets filtered

    Every form is served with a decoy field no person can see, and anything that fills it in is dropped without being told. Rate limits cap what one visitor, and one site, can send in an hour.

  • As many forms as you like

    Name them — a contact form and a signup form on the same site each keep their own list, and you can filter and export them separately.

  • Your own thank-you page

    Point the form at a page you wrote and that is where people land after sending. Leave it off and they get a plain confirmation page instead.

  • Export whenever you want

    One button gives you a CSV with a column for every field anyone has ever submitted, so a form that gained a question mid-life still opens as one table.

  • Nothing follows anyone around

    No tracking script, no cookie, no third party in the page. The visitor's address is hashed before it is stored, and only so the rate limit can tell two submissions apart.

limits

The limits

Generous for a contact form, tight enough that a script pointed at your site can't fill your inbox.

Fields per submission
30
Length of one field
5,000 characters
Size of one submission
64 KB
Submissions per site
60 an hour
Submissions per visitor
20 an hour
Kept per site
1,000, newest first
faq

Questions

What people ask before they put a form on a static site.

What is a static form?

A form on a site that has no server of its own. Normally that means the form has nowhere to send anything, which is why static sites usually borrow a third-party form service. harvis already serves every page of your site, so it can take the submission on the way past instead.

Do I need to know how to code?

You need to be able to add one word to a line of HTML. If an AI wrote your site, ask it to add the harvis-form attribute to the form — it knows how, because the instructions harvis publishes for AI assistants say so.

Does it work with JavaScript turned off?

Yes. That is the reason it is built this way. The form does an ordinary HTML post and the browser follows a redirect afterwards, exactly as forms worked before JavaScript existed.

Can I keep using my own endpoint or another form service?

Yes — just don't add the attribute. Forms without harvis-form are served exactly as you wrote them, action and all. On a form that does have it, harvis replaces the action, because adding the attribute is how you say where the submission should go.

Can people attach files?

Not yet. A file input on a collected form still works for the visitor, but the file is not stored — only the text fields are kept.

What happens to the submissions if I delete the site?

They go with it. Submissions belong to the site rather than to a deploy, so redeploying keeps them and deleting the site removes them for good. Export a CSV first if you want to keep them.

Put a site online and try it

Publishing is free and takes about two seconds. Add the attribute to a form, redeploy, and send yourself a test message.

Put a site online