Quick answer
Save the YAML below as .github/ISSUE_TEMPLATE/bug_report.yml on your default branch. Issue forms must start with name, description and body; labels in the form are only applied if they already exist in the repo. GitHub lists issue forms as public preview (checked 23 October 2026).
bug_report.yml (issue form)
name: Bug report
description: Something does not work as expected.
title: 'Bug: [Area]: [what goes wrong] when [trigger]'
labels:
- bug
- needs-triage
body:
- type: markdown
attributes:
value: |
The default for anything that works incorrectly. If it fits a more specific template below, use that instead.
- type: input
id: summary
attributes:
label: Summary
description: 'One sentence: what breaks and who it affects.'
validations:
required: true
- type: textarea
id: environment
attributes:
label: Environment
description: Version or build, URL or screen, browser or device + OS, account/plan, feature flags.
value: "Build: \nURL / screen: \nBrowser or device + OS: \nAccount / plan: \nFlags: \n"
validations:
required: true
- type: textarea
id: steps
attributes:
label: Steps to reproduce
description: Start from a known state. One action per step.
value: "1. Logged in as \n2. \n3. \n"
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected result
description: What should happen. Link the spec or last working version if you can.
validations:
required: true
- type: textarea
id: actual
attributes:
label: Actual result
description: What happens instead. Paste the exact error text.
validations:
required: true
- type: dropdown
id: frequency
attributes:
label: How often does it happen?
options:
- Always (every try)
- Often (more than half of tries)
- Sometimes (less than half)
- Once so far
validations:
required: true
- type: dropdown
id: severity
attributes:
label: Severity (see the severity guide)
description: Triage may change it.
options:
- 'S1 Critical: data lost/exposed or core flow blocked, no workaround'
- 'S2 Major: core feature wrong or failing for a group'
- 'S3 Minor: works with an easy workaround'
- 'S4 Cosmetic: looks or reads wrong only'
- Not sure (triage will set it)
validations:
required: true
- type: textarea
id: evidence
attributes:
label: Evidence
description: Drag in a screen recording or screenshot. Add console errors, request IDs or log links.
validations:
required: false
- type: textarea
id: logs
attributes:
label: Console or log output
description: Paste text, not screenshots of text. Remove secrets and personal data.
render: shell
validations:
required: false
- type: input
id: workaround
attributes:
label: Workaround
description: What users can do meanwhile, or "none known".
validations:
required: false
- type: checkboxes
id: checks
attributes:
label: Before you submit
options:
- label: I searched existing issues and this is not a duplicate
required: true
- label: I removed passwords, tokens and personal data from attachments
required: trueconfig.yml (optional)
Turns off blank issues and sends security reports and support questions to the right place. Replace OWNER/REPO and the support link.
blank_issues_enabled: false
contact_links:
- name: Report a security vulnerability (private)
url: https://github.com/OWNER/REPO/security/advisories/new
about: Please do not open a public issue for security problems.
- name: Customer support
url: https://example.com/support
about: Account or billing questions go to support. Replace this link.bug_report.md (classic Markdown template)
Use this if you prefer a plain template, or for GitLab (.gitlab/issue_templates/Bug.md, without the front matter).
---
name: Bug report
about: Something does not work as expected.
title: "Bug: [Area]: [what goes wrong] when [trigger]"
labels: bug, needs-triage
---
### Summary (required)
<!-- One sentence: what breaks and who it affects. -->
### Environment (required)
<!-- Version or build, URL or screen, browser or device + OS, account/plan, feature flags. -->
Build:
URL / screen:
Browser or device + OS:
Account / plan:
Flags:
### Steps to reproduce (required)
<!-- Start from a known state. One action per step. -->
1. Logged in as
2.
3.
### Expected result (required)
<!-- What should happen. Link the spec or last working version if you can. -->
### Actual result (required)
<!-- What happens instead. Paste the exact error text. -->
### How often does it happen? (required)
<!-- Tick one -->
- [ ] Always (every try)
- [ ] Often (more than half of tries)
- [ ] Sometimes (less than half)
- [ ] Once so far
### Severity (see the severity guide) (required)
<!-- Triage may change it. -->
<!-- Tick one -->
- [ ] S1 Critical: data lost/exposed or core flow blocked, no workaround
- [ ] S2 Major: core feature wrong or failing for a group
- [ ] S3 Minor: works with an easy workaround
- [ ] S4 Cosmetic: looks or reads wrong only
- [ ] Not sure (triage will set it)
### Evidence
<!-- Drag in a screen recording or screenshot. Add console errors, request IDs or log links. -->
### Console or log output
<!-- Paste text, not screenshots of text. Remove secrets and personal data. -->
```shell
```
### Workaround
<!-- What users can do meanwhile, or "none known". -->
### Before you submit (required)
- [ ] I searched existing issues and this is not a duplicate
- [ ] I removed passwords, tokens and personal data from attachmentsWhy a form beats a blank issue
- Required fields stop "it doesn't work" issues with no steps.
- Dropdowns for frequency and severity make triage and filtering consistent.
- The duplicate and secrets checkboxes cut noise and keep tokens out of public issues.
- Responses are converted to Markdown in the issue body, so the issue reads normally afterwards.
Record the video part
The Evidence field accepts drag-and-drop; a short clip of the bug saves a round of questions. Bobbin is a free Chrome extension that records your screen, a window or a tab with your microphone and an optional webcam bubble. No account, no watermark, no time limit, and nothing is uploaded: the file stays on your computer.
- Click the Bobbin icon in Chrome's toolbar and choose Record screen, window or tab.
- Pick your microphone and turn on the camera if you want the webcam bubble.
- Press Start recording, choose what to share in Chrome's picker, and wait for the 3-second countdown.
- Pause with Alt+Shift+P, stop with Alt+Shift+S, then press Download to save the file.
To keep other tabs and notifications out of it, share just the Chrome tab (the webcam bubble appears only in screen and window recordings). Bobbin saves MP4 where your browser supports it (Chrome 126 or newer), WebM otherwise, and tells you which it used.
File size: our 60-minute 1080p test came to about 246 MB (roughly 4 MB a minute) on a simple synthetic screen; busy real screens can be larger, so a 1–2 minute clip is usually small enough to attach.
From The Bug Report & QA Kit
The kit has 9 GitHub issue forms, config.yml, a PR template and a script that creates the labels. The full kit: 10 bug templates for GitHub, Jira, Linear and Markdown, 9 release checklists (126 checks), the severity guide, 8 bug-video scripts and trackers.
See the QA kit ($15, one-time) PDF + ZIP · 7-day refund · more free samples on the page
Checked on 23 October 2026 from their own pages: GitHub Docs: Syntax for issue forms. Features change; check the linked page before you rely on it.
Loom, Vidyard, Tella, Tango, Screencastify, Screenity, Zoom and Slack are trademarks of their respective owners. Bobbin is not affiliated with them. Prices and plan limits from their public pages as of 22 Oct 2026.