The form builder inside EmDash ships as a core feature, not a plugin. You don’t install anything extra. The portfolio template that ships with version 0.1.0 already includes a contact form with email, location, and social links pre-configured. But if you started with the blog template or a blank starter, here’s exactly how to build one from scratch.
Access the Form Builder
Log into your EmDash admin panel. Look at the left sidebar menu under “Content.” You will see a “Forms” entry between “Widgets” and “Sections.” Click it.
The form builder inside EmDash ships as a core feature, not a plugin.
The screen shows an empty table with a single button in the top right: “Create Form.” Click that.
Configure the Form Basics
A modal opens with three fields. “Name” — type “Website Contact Form.” “Submission Email” — enter the address where responses should arrive, like [email protected]codecode. “Success Message” — write “Thanks for reaching out. We will reply within 24 hours.”
Below those fields sits a toggle labeled “Enable Turnstile.” Turn it on. Turnstile is Cloudflare’s bot detection tool — it replaces CAPTCHA without requiring user interaction. This is built into EmDash, no plugin needed.
Add Form Fields
The form builder presents a blank canvas with an “Add Field” button. Click it.
A dropdown appears with five field types: Text, Email, Textarea, Select, and Checkbox. Build your form one field at a time.
Field 1: Choose “Text.” Label it “Full Name.” Mark it as required by toggling the switch next to “Required.” The placeholder reads “Your name” by default — leave it.
Field 2: Choose “Email.” Label it “Email Address.” Mark required. The system auto-validates this field format on submission — no regex writing needed.
Field 3: Choose “Textarea.” Label it “Message.” Set the row count to 5 using the number input. Mark required.
Field 4: Choose “Select.” Label it “Subject.” Add three options by typing into the list: “General Inquiry,” “Support Request,” “Partnership.” Mark the first option as default.
Field 5: Choose “Checkbox.” Label it “I agree to the privacy policy.” Mark required.
Click “Save Form” in the top right corner.
Place the Form on a Page
Navigate to “Pages” in the sidebar. Open the page where you want the form to appear — for a contact page, either create a new page or edit an existing one.
The editor uses block-based content (portable text, structured JSON). Type /codecode to open the block inserter. Choose “Form” from the list.
A dropdown shows all forms you have created. Select “Website Contact Form.” The block renders inside your editor as a placeholder — you see the field labels but not the live inputs.
Save the page. Visit the front end of your site. The form renders with all five fields, Turnstile protection active, and the submit button labeled “Send.”
Where Submissions Land
EmDash stores every submission inside the admin panel under “Forms” > “Submissions.” Each entry shows: the field values, the timestamp, and the IP address. You can mark submissions as read or delete them individually.
Submissions also forward to the email address you set during form creation. The email arrives as plain text with each field on its own line. No SMTP configuration required — EmDash uses Cloudflare’s email sending infrastructure by default.
What Happens When a Visitor Submits
The form posts to EmDash’s internal API endpoint. The runtime validates required fields, checks Turnstile, writes the submission to the D1 database, and fires the email send — all within a single request cycle. If the visitor leaves a required field empty, the form shows an inline error message below that specific field. No page reload needed.
One Caveat About Multi-Step Forms
The built-in form builder handles single-page submissions only. It does not support conditional logic — showing field B only when field A has a specific value — or multi-step workflows. For those scenarios, you would need a sandbox plugin that declares forms: writecodecode and email: sendcodecode capabilities, then builds the logic inside a dynamic worker. That is the point where EmDash’s “no plugin” promise meets its plugin architecture.
- How do I access the form builder in EmDash?Log into the EmDash admin panel and click 'Forms' under 'Content' in the left sidebar. Then click 'Create Form' to start building.
- What field types are available in EmDash's form builder?The form builder offers five field types: Text, Email, Textarea, Select, and Checkbox.
- How does EmDash handle form submissions?Submissions are stored in the admin panel under 'Forms' > 'Submissions' and forwarded to the email address set during form creation via Cloudflare's email infrastructure.