Your forms are software.
Define forms in JSX. Self-host with Docker. Get backend validation, autosave, and conditional logic — on infrastructure you control.
One component = UI + server validation + zero duplication.
import { Form, Section, Question, Row } from '@formdsl/react' export default function Onboarding() { return ( <Form id="onboarding" version="2.1" autoSave> <Section title="Company"> <Question id="name" type="text" required label="Legal Entity Name" /> <Row> <Question id="ein" type="text" format="ein" required label="EIN" /> <Question id="state" type="select" label="State" options={usStates} /> </Row> </Section> <Section title="Contact"> <Question id="email" type="email" required label="Work Email" /> <Question id="phone" type="tel" format="phone" label="Phone" /> </Section> </Form> ) }
Complete control. Zero vendor lock-in.
FormDSL runs on your servers with your database. No data leaves your network. No per-submission fees. No limits you didn't set yourself.
Data sovereignty
Submissions stay in your PostgreSQL. Your data, your jurisdiction. Upgrade to Pro for AES-256-GCM encryption at rest.
No usage limits
Unlimited forms, unlimited submissions. No per-submission fees. No metered billing. Scale on your terms.
Single Docker command
PostgreSQL + FormDSL in one docker-compose.yml. Auto-migration on startup. Health checks built in.
Network isolation
Run behind your firewall or VPN. No external service dependencies required. Only PostgreSQL is needed.
Full audit trail
Every keystroke captured in input logs. Session replay for compliance. All on disk you own.
Source available
Form engine is MIT-licensed. Server and dashboard are source-available under ELv2. Audit every line of code — including the encryption implementation.
One source of truth. Three outputs.
Your JSX component is the single definition for your form. From it, we derive the client UI, the server validation contract, and the encryption schema. No duplication. No drift.
JSX Component
You write this
Client UI
Renders the form
Server Manifest
Validates submissions
Encrypted Storage
AES-256-GCM at rest (Pro)
Running in two minutes.
One Docker Compose file, a few env vars. FormDSL auto-migrates the database, creates your admin account, and starts serving.
- Set
ADMIN_EMAILandADMIN_PASSWORD - Auto-generated encryption key on first boot
- Database migrations run automatically
- Health check endpoint at
/health - Optional: S3 for file attachments, OAuth for social login
$ docker compose up -d Creating formdsl-db ... done Creating formdsl-app ... done $ open http://localhost:3000 ✓ Dashboard ready ✓ PostgreSQL connected ✓ Encryption key active ✓ Migrations applied FormDSL is running at http://localhost:3000 Admin: admin@example.com $ _
Everything complex forms need. Already built.
The hard parts of forms — autosave, conditional logic, repeatable sections, file uploads — are handled by the engine. You declare intent.
Autosave
Saves from the first keystroke. Configurable debounce, per-field checkmarks or toast feedback.
Conditional logic
showIf, requiredIf, disabledIf — on fields and entire sections. Chain conditions naturally.
Repeatable sections
Card or table layout. Add, remove, reorder items. Nested repeats supported. Undo on removal.
File uploads
Drag-and-drop with progress, accept filters, size limits, and server-side storage via S3.
Input masking
SSN, EIN, phone, currency — built-in formats with visibility toggle for sensitive fields.
Calculated fields
Formula-driven values. Reference other fields with tokens. Line totals, running sums, invoice math.
Multi-section navigation
Sidebar, stepper, or tabs. Progress tracking, completion indicators, section-gated validation.
Review & remarks
Auto-generated review summary. Per-field comments and annotations for collaborative workflows.
Session replay
Full input log captured. Replay exactly what the user did — for debugging, audits, or support.
Server validation, for free.
When you deploy, the CLI extracts a validation manifest from your JSX. Your server uses it to validate every submission — same rules, no separate schema, no drift between client and server.
- Required, minLength, pattern, min/max
- Conditional required (requiredIf)
- Select options validated against manifest
- Repeat item validation
- Answers encrypted after validation passes (Pro)
// You write the JSX <Question id="email" type="email" required /> <Question id="amount" type="number" min={1} max={10000} /> // CLI extracts this manifest { fields: [ { id: "email", type: "email", required: true }, { id: "amount", type: "number", min: 1, max: 10000 } ] } // Your server validates every submission // against this manifest automatically // Then encrypts with AES-256-GCM
Infrastructure you don't have to build.
Encryption, environments, webhooks, exports, team management — the backend you'd spend months building. Self-host and run on your terms.
Encryption at rest PRO
Per-form AES-256-GCM. HKDF-derived keys. Your master key never leaves your server.
Environments
1 production environment free. Unlimited dev, staging, and custom environments with Pro.
API keys
Secret keys for server access. Publishable keys for client embeds. Scoped per environment.
Webhooks PRO
HMAC-signed payloads. Automatic retry with exponential backoff. Full delivery log.
CSV export PRO
RFC 4180 compliant. Handles nested data, repeats, and all field types cleanly.
Session replay PRO
Every keystroke, navigation event, and timing captured. Replay submissions for audits.
Team management PRO
Invite members, assign roles. Controlled registration — only invited users can join.
Identity verification PRO
JWT-based submitter identity. HMAC-SHA256 signing secrets per environment.
Deploy to your server with one command.
Point FORMDSL_URL at your instance.
The CLI auto-discovers your form components, extracts validation
manifests, and deploys. Works with React and SolidJS.
- Auto-discovers
*.tsxform components - Extracts manifest from JSX — no runtime needed
- Deploys to your self-hosted server
--draftflag for staging without publishing--hostedfor server-rendered form pages
$ export FORMDSL_URL=https://forms.yourcompany.com $ npx formdsl deploy Discovering forms... Found 3 forms in ./src/forms/ ✓ onboarding v2.1 · 14 fields · 3 sections ✓ kyc-business v1.0 · 22 fields · 5 sections ✓ support-ticket v3.2 · 8 fields · 2 sections Deployed to forms.yourcompany.com (production) $ _
Generate forms with AI. Review them like code.
The DSL is a constrained set of typed JSX components — exactly what LLMs are good at generating. Ask for a form, get inspectable code, deploy to your own server.
<Form id="kyc-onboarding" version="1.0"> <Section title="Entity Information"> <Question id="legal_name" type="text" required label="Legal Entity Name" /> <Question id="ein" type="text" format="ein" required label="EIN" /> <Question id="entity_type" type="select" required label="Entity Type" options={["LLC", "C-Corp", "Non-US"]} /> </Section> <Section title="Non-US Details" showIf={{ entity_type: "Non-US" }}> <Question id="country" type="select" required label="Country" /> <Question id="tax_id" type="text" required masked label="Tax ID" /> </Section> </Form>
Test locally, see it render instantly, then formdsl deploy.
The LLM generates valid JSX. You review it like any other PR.
Choose the edition that fits your team.
Start free with Community. Upgrade to Pro when you need advanced features. Or wait for Cloud — same codebase, zero ops.
| Capability | Community (Free) | Pro ($189) | Cloud (Coming Soon) |
|---|---|---|---|
| Forms & submissions | Unlimited | Unlimited | Plan-based |
| Autosave, conditions, repeats | Yes | Yes | Yes |
| Masking, calculated fields | Yes | Yes | Yes |
| Deploy CLI | Yes | Yes | Yes |
| Hosted pages | With badge | No badge | No badge |
| Templates | 14 included | 14 included | 14 included |
| Environments | 1 (production) | Unlimited | Unlimited |
| Admin users | 1 | Unlimited | Plan-based |
| Encryption at rest | — | AES-256-GCM | Yes |
| Webhooks | — | HMAC-signed + retry | Yes |
| Session replay | — | Full input log | Yes |
| Identity verification | — | JWT-based | Yes |
| Team management & roles | — | Yes | Yes |
| CSV / JSON export | — | Yes | Yes |
| Prefill / series | — | Yes | Yes |
| Audit log | — | Yes | Yes |
| Data location | Your infrastructure | Your infrastructure | Managed |
| Source code | SDK: MIT | SDK: MIT, Server: ELv2 | N/A |
| Updates | Community releases | 1 year of updates | Automatic |
| Support | Community | Priority (1 year) | Included |
| Price | Free | $189 one-time | TBD |
Start free. Upgrade when you need more.
Community edition is free forever with core features. Pro unlocks advanced capabilities with a one-time purchase.
- Unlimited forms & submissions
- Autosave, conditions, repeats
- Masking & calculated fields
- Deploy CLI
- Hosted pages (with badge)
- 14 form templates
- 1 environment (production)
- 1 admin user
- MIT-licensed form engine
- Community support
- Everything in Community, plus:
- Encryption at rest (AES-256-GCM)
- Webhooks (HMAC-signed + retry)
- Session replay & audit log
- Identity verification (JWT)
- Team management & roles
- CSV / JSON export
- Prefill / series
- Unlimited environments & admins
- Hosted pages without badge
- 1 year of updates & priority support
- All Pro features, fully managed
- Automatic updates & backups
- Managed PostgreSQL
- Uptime SLA
- SSO / SAML (Enterprise)
Open source engine. Source-available server.
The form engine (@formdsl/core, @formdsl/react) is MIT-licensed — use it freely in any project.
The server and dashboard are source-available under the Elastic License v2 (ELv2) — audit every line, including the encryption implementation.
One-time purchase, no subscription: set FORMDSL_LICENSE_KEY to activate Pro features.
The version you buy works forever — renewal ($79/yr) gives continued updates and priority support.
Your infrastructure, your choice.
FormDSL runs anywhere Docker runs. Only PostgreSQL is required. All other services — S3, OAuth, email — are optional.
Docker Compose
Single docker-compose.yml with PostgreSQL. The simplest path. Perfect for small teams and VPS hosting.
Railway / Fly.io
One-click deploy templates. Managed PostgreSQL add-on. Auto-scaling and zero-downtime deploys.
Kubernetes
Helm chart for production clusters. Horizontal scaling, rolling updates, persistent volumes.
Bare metal
Single binary via Bun compile. Systemd service file included. Minimal resource footprint.
Minimal dependencies
FormDSL needs only PostgreSQL to run. File storage (S3/R2), email (Resend), and OAuth (GitHub/Google) are all optional and configured via environment variables. No Redis, no message queue, no external cache.
Ready-made forms for every industry.
Start with a production-ready template and customize it in JSX. Each template includes field validation, conditional logic, and proper data types out of the box. All 14 templates are free and open-source.
Starter templates
Contact Form
Name, email, message with validation. The simplest starting point for any project.
Support & Feedback
Bug reports, feature requests, NPS surveys with conditional follow-up based on rating.
Event Registration
Conference signup, session selection, dietary preferences with repeatable attendee details.
Enrollment & Registration
Student applications, course registration with multi-step stepper navigation and review summary.
Simple Onboarding
Basic user or company onboarding. Multi-section with conditional logic and select fields.
Industry templates
KYC / AML Onboarding
Identity verification, beneficial ownership, document collection for financial compliance.
Insurance Application
Multi-step policy applications with conditional coverage sections, risk assessment, and repeatable dependents.
Patient Intake
Medical history, insurance details, consent forms. HIPAA-ready with encryption at rest and audit trail.
Employee Onboarding
Tax forms, emergency contacts, direct deposit, equipment requests. Prefill across annual reviews.
Legal Intake
Client questionnaires, case assessment, conflict checks with conditional matter-type routing.
Rental Application
Tenant screening, income verification, reference collection with repeatable prior addresses.
Permit & License Application
Business permits, building approvals, license renewals with revision request workflow.
Grant Application
Funding requests, project budgets, organizational details with calculated budget totals.
Vendor Onboarding
W-9 collection, banking details, compliance certifications with conditional international sections.
Every template is a plain JSX component. Fork it, customize it, version it in Git.
No drag-and-drop builder. No proprietary format. Just code you own.
All 14 templates are available in the templates directory on GitHub.
Stop rebuilding form infrastructure.
Start free with Community — unlimited forms, autosave, conditions, and server validation out of the box. Upgrade to Pro when you need encryption, webhooks, session replay, and team management. Define once in JSX, deploy to your own server.