FRAMEWORK
Give your Jekyll site a form backend
Formstork receives the submissions from your Jekyll contact form, emails you each one, and keeps every message in a searchable dashboard. Jekyll builds static HTML, so there is no server to run and no backend code to write.
How it works
Jekyll compiles your Markdown and Liquid templates into static HTML at build time, and it is the engine behind GitHub Pages, which cannot run any server code. So a form on your page has markup but nowhere to send what visitors type. Formstork is the backend that receives the POST. You place a plain HTML form in a layout, an include, or a page, point its action at a Formstork endpoint, and add your access key as a hidden field. Formstork then emails you each submission, sets the visitor's email as the reply-to, and saves the message to a searchable, taggable dashboard. Because it is a normal form POST with no client JavaScript, it works on GitHub Pages, Netlify, Cloudflare Pages, or any static host. Turn on spam filtering, an autoresponder, or an integration like Slack or Google Sheets whenever you need it.
<!-- _includes/contact-form.html
Your access key is public, so it is safe to commit and ship. -->
<form action="https://api.formstork.com/submit" method="POST">
<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
<input type="text" name="name" placeholder="Your name" required />
<input type="email" name="email" placeholder="you@example.com" required />
<textarea name="message" placeholder="Your message" required></textarea>
<button type="submit">Send</button>
</form>
<!-- Include it anywhere with: {% include contact-form.html %} -->Works on GitHub Pages
GitHub Pages runs Jekyll but cannot execute any server code, so a form there has nowhere to POST on its own. Formstork is the backend that receives it, so your GitHub Pages site collects submissions with no serverless function and no form-handling service of your own.
Every message, kept and searchable
Beyond the inbox, Formstork stores each submission in a searchable, taggable dashboard you can filter and export to CSV or JSON. The free plan keeps 250 submissions a month with 90-day retention, and paid plans keep them forever.
Spam never reaches you
A hidden honeypot, a server-side content filter, and optional Turnstile, hCaptcha, or reCAPTCHA keep bots out. Flagged submissions are held back in your dashboard and never email you, so your inbox stays clean.
Set it up
- 1Add a plain HTML form to your Jekyll site, in an include like _includes/contact-form.html, a layout, or straight in a page, with fields like name, email, and message.
- 2Point the form's action at https://api.formstork.com/submit and add your access key as a hidden access_key field, or keep the key in _config.yml and read it with site.access_key. The short /f/YOUR_ACCESS_KEY URL works too.
- 3Run bundle exec jekyll serve and submit once to test. The message lands in your inbox and your Formstork dashboard, with the visitor's email set as the reply-to.
- 4Optional: turn on an autoresponder, or connect an integration like Slack or Google Sheets.
Frequently asked questions
How do I add a contact form to a Jekyll site?
Add a plain HTML form in an include, layout, or page, point its action at https://api.formstork.com/submit, and add your access key as a hidden access_key field. Formstork receives the POST, emails you the submission with the visitor's email as the reply-to, and stores it in your dashboard. Because Jekyll ships static HTML, this works with no server and no backend code.
Does it work on GitHub Pages?
Yes. GitHub Pages cannot run server code, but the form posts to Formstork, an external endpoint, so it does not need to. Your Jekyll site stays fully static and every submission still reaches your inbox and dashboard.
Is it free?
Yes, the free plan includes 250 submissions a month with a full dashboard and 90-day retention. Paid plans add more volume, forever retention, autoresponders, and file uploads or attachments.
Try Formstork free
250 submissions a month with a full dashboard. No credit card required.
Get your access keyRead the docs