Self-hosted form builder + submissions inbox. Pay once, own it forever — no Typeform subscription, no response caps.
Build beautiful "one question per screen" forms (or classic single-page forms), share a link or embed them anywhere, and collect unlimited responses into your own inbox — on your own server, with your own database. Typeform wants $348/yr and caps your responses. This runs on a $5 VPS forever.
- Drag-orderable field editor — 10 field types: short text, long text, email, number, dropdown, radio, checkboxes, date, file upload, star rating (1–5). Required toggle, placeholder, and help text per field.
- Two display modes — clean one-question-per-screen "Typeform-style" flow with keyboard navigation, or classic all-on-one-page. Per-form setting.
- Form settings — title, description, submit button text, success message or redirect URL, accent color, open/closed toggle.
- Submissions inbox — table view, detail drawer, one-click CSV export, delete, downloadable file answers.
- File uploads — stored locally with size and type limits. Your files never touch a third-party.
- Spam protection — honeypot field + per-IP rate limiting, client and server validation.
- Email notifications — bring your own SMTP, get an email per submission.
- Embed anywhere — copy-paste iframe snippet from the Share tab.
- Dark, modern UI — React + Tailwind + Framer Motion. Your respondents will think you're paying $29/mo.
- 100% local — SQLite database, local file storage, zero telemetry, zero external calls.
npm i
npm run build
npm start # → http://localhost:5305Copy .env.example to .env and set ADMIN_PASSWORD. Log in at /admin, build a form, share /f/your-slug.
Run it as a desktop app, or deploy to a $5 VPS when you need it public:
npm run desktop # Electron window, auto-logged-in, data in your user profiledocker compose up -d # SQLite db + uploads persisted in the form-data volume| Form Builder | Typeform | |
|---|---|---|
| Price | $39 one-time | $29/mo ($348/yr) |
| Responses | Unlimited | 100/mo (Basic) |
| Forms | Unlimited | Capped by plan |
| File uploads | Included, your disk | Higher tiers only |
| Data ownership | Your server, your SQLite file | Their cloud |
| One-question-per-screen UX | ✅ | ✅ |
| CSV export | ✅ | ✅ |
| Custom accent color / redirect | ✅ | Paid tiers |
| Works offline / air-gapped | ✅ | ❌ |
Don't want to touch a terminal? Grab the packaged one-click installer (plus updates and setup support) on Whop:
Pay once. Own it forever. No subscription.
- Backend: Node 20+, Express, better-sqlite3, Multer (uploads), Nodemailer (BYO SMTP)
- Frontend: React 18, Vite, Tailwind CSS v4, Framer Motion, Lucide icons
- Desktop: thin Electron wrapper around the same server (electron-builder NSIS config included)
- Storage: single SQLite file + local
uploads/folder — trivial to back up
All via .env (see .env.example):
| Var | Default | |
|---|---|---|
PORT |
5305 |
HTTP port |
ADMIN_PASSWORD |
change-me |
Admin login |
DATA_DIR |
./data |
SQLite db + uploads |
MAX_UPLOAD_MB |
10 |
Per-file upload limit |
SMTP_HOST/PORT/USER/PASS/FROM |
— | Optional email notifications |
npm run dev # Vite dev server on :5306, proxies /api to :5305
npm start # API server
npm test # end-to-end smoke test (boots real server, real submissions)MIT — see LICENSE.
