MuxForms bug report forms collect steps to reproduce, expected vs actual, severity, and environment metadata from docs embeds and in-app JSON—one engineering inbox instead of scattered email, with webhooks to Linear or Jira when you outgrow search.
Use case
“It broke” is not a ticket. Engineers need steps, environment, and severity—not a one-line email that support forwarded without context.
| Field | Purpose |
|---|---|
| steps | Reproduction path |
| severity | Triage |
| app_version / os | Hidden from mobile |
| screenshot_url | Evidence link |
Bug reports sit between feedback and support: users know something failed, but reproducing it requires structure. MuxForms enforces title, steps to reproduce, and optional expected vs actual fields before a row hits engineering@.
Ship the same schema on your docs site (embed.js) and inside the product (POST JSON). Hidden `app_version`, `os`, and `build_number` fields let mobile clients attach metadata automatically so QA does not ask “which version?” on every thread.
Severity select helps on-call triage without adopting a full issue tracker on day one. Critical rows can webhook to Slack #bugs; everything else stays searchable in the inbox until you wire Linear or Jira.
Optional email supports logged-out reporters on marketing sites; require email on in-app forms when you need follow-up. Screenshot links use `url` fields until native file upload matches your plan.
Separate from the general feedback use case: bugs expect reproduction steps and severity; feedback can stay lightweight ratings and comments. Two forms, one account, shared notify if you prefer.
Rate limits and honeypot matter on public bug URLs—scrapers love `/report-a-bug`. Turnstile on the public embed; ingest secret auth on authenticated in-app submit.
422 validation teaches client apps to show field errors when steps are empty—map API errors to your native UI per the React Native collecting-forms guide.
Create a form named Engineering — Bug report with these fields, then paste the embed on your page. Notify engineering@; webhook to Linear/Jira optional; auto-fill hidden version fields from mobile; public docs embed shares form id with app.
| Field | Type | Required |
|---|---|---|
| Emailemail | No | |
| Summarytitle | text | Yes |
| Steps to reproducesteps | textarea | Yes |
| Expected behaviorexpected | textarea | No |
| Actual behavioractual | textarea | No |
| Severityseverity | select | Yes |
| Screenshot or screen recording linkscreenshot_url | url | No |
| Page URLpage_url | url | No |
| App versionapp_versionhidden | text | No |
| OSoshidden | text | No |
| Build numberbuild_numberhidden | text | No |
| Leave blank_hphidden | text | No |
Illustrative preview—wire your form id after signup.
{
"name": "Engineering — Bug report",
"fields": [
{
"name": "email",
"label": "Email",
"type": "email",
"required": false,
"placeholder": "For follow-up"
},
{
"name": "title",
"label": "Summary",
"type": "text",
"required": true,
"placeholder": "Short description"
},
{
"name": "steps",
"label": "Steps to reproduce",
"type": "textarea",
"required": true
},
{
"name": "expected",
"label": "Expected behavior",
"type": "textarea",
"required": false
},
{
"name": "actual",
"label": "Actual behavior",
"type": "textarea",
"required": false
},
{
"name": "severity",
"label": "Severity",
"type": "select",
"required": true,
"options": [
"Low",
"Medium",
"High",
"Critical"
]
},
{
"name": "screenshot_url",
"label": "Screenshot or screen recording link",
"type": "url",
"required": false
},
{
"name": "page_url",
"label": "Page URL",
"type": "url",
"required": false,
"placeholder": "Where it happened"
}
]
}<div data-form-id="FORM_UUID"></div> <script src="https://www.muxforms.com/embed.js" defer></script>
Then clone the pattern for the next site or app.
Upgrade to Pro