The HTML Web Form Generator That Tests Itself
Every form builder on the market generates HTML and hands it to you untested. mk0r generates the form, then opens a real Chromium browser inside a cloud sandbox and verifies every field works before you ever see the code.
Build a Form NowWhat Every Other Form Generator Skips
Search for "HTML web form generator" and you will find dozens of tools. Basin, Jotform, Paperform, Formcarry, formBuilder. They all work roughly the same way: you drag fields onto a canvas, configure labels and validation rules, and copy the generated HTML.
None of them test the output. You get markup, paste it into your site, and discover problems yourself: a required field that does not prevent submission, a date picker that accepts invalid input, a submit button that does nothing because the action URL is wrong. The gap between "generated" and "working" is yours to close.
Traditional form generators vs. mk0r
You arrange fields visually, configure each one, export static HTML, paste it into your site, then manually test every field and submission path.
- Output is untested markup
- Validation logic is your problem
- Submission handling not included
- Broken forms discovered by users
How mk0r Builds and Tests Your Form
When you type something like "build me a contact form with name, email, and message fields, all required, with email validation," here is what actually happens inside the system.
Form generation pipeline
Inside the VM
Sandbox boots from a pre-warmed snapshot
A Freestyle VM with Node.js 20, Vite, React, TypeScript, and Tailwind CSS v4 is ready in seconds. The snapshot is pre-built by CI so there is no cold start.
AI agent receives your prompt
Claude reads your form description along with coding standards from the project's CLAUDE.md: max 3 colors, functional React components, mobile-first Tailwind, specific button labels like 'Send Message' instead of generic 'Submit.'
Form component is generated
The agent creates a .tsx file with React hooks for state management, Tailwind for styling, and proper validation logic. The component is imported into App.tsx and the Vite dev server hot-reloads.
Playwright MCP opens Chromium
The agent uses @playwright/mcp@0.0.70 connected via CDP at port 9222 to launch a real Chromium browser. It navigates to localhost:5173, takes a snapshot of the DOM, fills in every field, and clicks the submit button.
Console is checked for errors
After interaction, the agent reads browser_console_messages to verify no JavaScript errors were thrown. If something fails, it fixes the code and re-tests. You only see the final, working result.
50 Lines of Config vs. One Sentence
Here is what a typical drag-and-drop form builder requires you to configure, compared to what you type into mk0r.
Building a contact form
<form action="/submit" method="POST">
<div class="form-group">
<label for="name">Full Name</label>
<input type="text" id="name"
name="name" required
minlength="2" maxlength="100"
placeholder="Jane Smith" />
<span class="error">
Name is required
</span>
</div>
<div class="form-group">
<label for="email">Email</label>
<input type="email" id="email"
name="email" required
pattern="[^@]+@[^@]+\.[^@]+"
placeholder="jane@co.com" />
<span class="error">
Enter a valid email
</span>
</div>
<div class="form-group">
<label for="msg">Message</label>
<textarea id="msg" name="msg"
required minlength="10"
rows="4"></textarea>
<span class="error">
Message must be 10+ chars
</span>
</div>
<button type="submit">
Send Message
</button>
</form>
<!-- Plus CSS, plus JS for
validation, plus testing... -->Try it yourself
No account, no setup. Type what form you need and watch it build in real time.
Generate a Form →The Technical Detail No Other Generator Has
The VM base image (defined in src/core/freestyle.ts) installs @playwright/mcp@0.0.70 alongside Chromium. When the ACP session starts, it configures a Playwright MCP server with --cdp-endpoint http://127.0.0.1:9222, giving the AI agent full browser automation capabilities.
This means the agent does not just generate code and hope it works. It opens your form in a real browser, fills in test data, triggers validation errors on purpose to confirm they appear, submits valid data to confirm the success path, and reads the browser console to catch any runtime exceptions. If any step fails, it edits the code and tries again.
What the agent checks on every form
- All required fields prevent empty submission
- Email fields reject malformed input
- Validation error messages appear inline
- Submit button triggers the correct action
- No JavaScript errors in the browser console
- Form renders correctly on mobile viewport
Two Ways to Generate Forms
Quick Mode
Generates a single standalone HTML file with inline CSS and JavaScript. Streams to your screen in under 30 seconds. Perfect for simple contact forms, email signups, or feedback widgets you can paste into any website.
average generation time
VM Mode
Boots a full cloud sandbox with Vite, React, TypeScript, Tailwind CSS v4, and Playwright. The AI agent writes your form, tests it in a real browser, and iterates until it works. You watch everything via live screencast.
of forms browser-tested
Forms You Can Generate Right Now
These are not templates. Each one is generated fresh from your description, with validation and styling tailored to your specific requirements.
Contact forms
Name, email, message with validation. Specify your endpoint and the agent wires up the fetch call.
Multi-step registration
Step indicators, field groups, back/next navigation, final review screen. All state managed with React hooks.
Survey forms
Conditional logic, branching questions, progress tracking. The agent tests every branch path.
Order forms
Product selection, quantity inputs, price calculation, shipping fields. Real-time total updates.
Feedback widgets
Star ratings, text areas, emoji selectors. Compact enough to embed in a modal or sidebar.
Email signup forms
Single field, inline validation, success state animation. Under 20 lines of generated code in Quick mode.
Frequently asked questions
What types of HTML forms can mk0r generate?
Contact forms, multi-step registration flows, survey forms with conditional logic, order forms with validation, feedback widgets, email signup forms, and more. In VM mode, you get a full React + TypeScript form component with Tailwind styling, not just raw HTML.
How does the automated form testing work?
In VM mode, the AI agent has access to Playwright MCP connected to a real Chromium instance inside the sandbox. After generating your form, the agent navigates to the dev server at localhost:5173, fills in fields, clicks submit, and checks the console for errors. You see the entire process via live screencast.
Do I need to sign up or create an account?
No. mk0r requires zero signup. Open the site, type what form you need, and watch it build. No email, no password, no credit card.
Can I get just standalone HTML instead of React?
Yes. Quick mode generates a single self-contained HTML file with inline CSS and JavaScript. It streams in under 30 seconds. Use this when you need a form you can paste directly into any website.
How does mk0r compare to drag-and-drop form builders?
Traditional form builders like Jotform, Basin, or Paperform give you a visual canvas to arrange fields. mk0r takes a text description and generates the entire form, including validation logic and submission handling. The output is real source code you own and can modify, not an embedded widget tied to a platform.
What about form submission and backend handling?
In Quick mode, the generated HTML includes JavaScript for client-side validation and you wire up your own endpoint. In VM mode, the agent can scaffold a complete form with state management, error handling, and fetch calls to any API endpoint you specify.
Can I iterate on the generated form?
Yes. After the initial generation, you send follow-up messages like 'add a phone number field with validation' or 'make the submit button disabled until all required fields are filled.' The agent modifies the code and re-tests.
Stop testing forms yourself
Describe the form. Let the AI build it, test it, and fix it. Get code that works on the first paste.
Generate Your Form