TanStack Contact Form Without a Server Route
TanStack Start and Router already give you file routes. Point the form at a Formbold endpoint with fetch and Accept: application/json, and skip writing your own API route. Free covers 250 submissions a month and 10 forms.
What does a TanStack Start contact form look like?
Same createFileRoute pattern as the homepage tab, with loading state and a JSON POST. Replace FORM_ID. Works in TanStack Start and any TanStack Router app that can call fetch in the browser.
How do I wire Formbold into a TanStack route?
One form in the dashboard, one endpoint in the route, one test submit.
Create the Formbold form
In All Forms, create a form named after the route, for example Contact. Copy https://formbold.com/s/FORM_ID from Form Setup.
Drop it into createFileRoute
Put the component on /contact (or any path). Every input needs a name attribute so FormData keys match what you see in the dashboard.
Submit once from the app
Run the TanStack Start or Vite dev server, send a test, then open Submissions. The email arrives on the same event.
Why use Formbold with TanStack instead of a server function?
You already have routing. You still need somewhere to keep entries, send mail and filter spam.
No /api route of your own
The browser talks to Formbold. You do not need a TanStack server function just to accept a contact message.
Email on every plan
Each submission emails you with your field names as labels. Free includes that.
Spam controls in Settings
Turn on Basic Spam Filter, or add Custom reCAPTCHA when bots show up.
File uploads on paid plans
Starter and up accept files at 10 MB, 25 MB or 50 MB depending on the plan.
Slack, Sheets and webhooks
Starter and higher connect Slack, Notion, Google Sheets and webhooks without another worker.
What do TanStack developers ask first?
Common gotchas once the route is live.