A Self-Hosted Formspree Alternative You Actually Own
Formspree, Getform, and similar hosted form services solve a real problem: you have a static site and need somewhere for form submissions to go, without standing up a backend. They're quick to wire up. They're also a recurring bill for something as simple as storing a name and an email address, and every submission passes through infrastructure you don't control.
That tradeoff is fine for a weekend project. It gets harder to justify once a client's contact form, a lead-gen page, or an internal tool depends on it — and the free tier's submission cap or the surprise plan upgrade shows up at the worst time.
What "self-hosted" actually changes
Submify is a form backend you run yourself: a Go API, a Next.js dashboard, and PostgreSQL, packaged as one Docker Compose stack. The practical difference isn't philosophical — it's three concrete things:
- The database is yours. Submissions land in a Postgres instance on your own server. Nobody else has a copy.
- There's no submission cap tied to a bill. Storage is bounded by your disk, not by a pricing tier — Submify caps each project at 5,000 rows so you stay in control of that storage yourself.
- The code is inspectable. AGPL-3.0 licensed, source on GitHub. You can read exactly what happens to a submission between POST and database row.
The integration is the same shape
If you've wired a form to Formspree before, switching to Submify is mostly a find-and-replace. Both work by POSTing form data to an endpoint with an API key — the request just goes to a server you control instead:
fetch("https://<your-submify-host>/api/submit", {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": "pk_live_your_public_key",
},
body: JSON.stringify({
data: { name, email, message },
files: [],
}),
});The public key is safe to ship in browser code — it can only submit to that one project, not read anything back. Submissions show up in the dashboard immediately, with optional Telegram alerts if you want to know the moment one arrives. See the full API reference for signed requests and file uploads.
Deploying it
The entire stack — Nginx, the API, the dashboard, and Postgres — comes up with one command:
curl -fsSL https://raw.githubusercontent.com/Raktim94/Submify/main/install.sh | bashIt generates strong random secrets on first run and starts the containers. From there you register the first account, create a project, and copy its public key into your form. If you'd rather see each step before running it, the docs walk through the manual Compose setup too.
When a hosted service still makes sense
If you don't want to run a server at all — no VPS, no maintenance, no updates — a hosted form service is still the simpler choice, and that's a legitimate tradeoff. Submify is for the other case: you already have somewhere to run Docker, and you'd rather own the data and the cost curve than rent both indefinitely.
Install Submify or read the source on GitHub.