GitHub Issue Template in Markdown

Issue templates transform vague bug reports into actionable problem descriptions. Without a template, a developer encountering a bug writes whatever comes to mind: "it's broken" or "the login page doesn't work." With a template that prompts for specific information, the same developer writes the exact steps to reproduce the issue, what they expected to happen, what actually happened, and their browser and OS version. The difference in maintainer productivity is dramatic. This template guides reporters through the five sections that make a bug report useful: a clear description of the bug itself, numbered steps to reproduce it, the expected behavior, the actual behavior, any relevant screenshots, and the technical environment. Each section is preceded by a bold prompt explaining what to include, making it easy for reporters who aren't sure what information is relevant. Steps to reproduce is the most critical section: without reproducible steps, a maintainer has no way to confirm the bug exists, to test a fix, or to determine whether the bug reappears after a fix. Asking for numbered steps with specific actions ("Go to '...' > Click on '...' > Scroll to '...' > See error") encourages the level of specificity needed for reproduction. Expected vs Actual behavior is more than just semantic structure — it forces the reporter to explicitly state what they think should happen, which is often not obvious. What a reporter considers a bug (the behavior they expected) might be intentional design, and understanding the expectation helps maintainers decide whether to fix a bug or improve documentation. The Environment section (OS, browser, version) is essential for isolating platform-specific bugs. A bug that only occurs on Safari 17 on macOS with a specific screen reader enabled requires completely different investigation than a bug that occurs on all browsers. Without this information, maintainers waste time reproducing on the wrong platform. GitHub placement: save the file as .github/ISSUE_TEMPLATE/bug_report.md. GitHub then shows a template chooser to new issue authors rather than an empty text field. You can also add YAML front matter to the template file to set the issue title prefix, add labels automatically, and assign the issue to specific team members. Advanced GitHub issue forms: newer GitHub projects use YAML-based issue forms (.github/ISSUE_TEMPLATE/bug_report.yml) that render a structured form with dropdowns, checkboxes, and text inputs. These are more constraining than Markdown templates but ensure reporters can't skip required fields or ignore the structure. Tips: add a "checklist before submitting" section at the top that asks reporters to confirm they've searched for existing issues, checked the documentation, and tried the latest version. This reduces duplicate reports significantly.

Example
## Bug Report

**Describe the bug**
A clear and concise description of what the bug is.

**Steps to Reproduce**

1. Go to '...'
2. Click on '...'
3. Scroll down to '...'
4. See error

**Expected Behavior**
What you expected to happen.

**Actual Behavior**
What actually happened.

**Screenshots**
If applicable, add screenshots.

**Environment**

- OS: [e.g. macOS 14, Windows 11]
- Browser: [e.g. Chrome 124, Safari 17]
- Version: [e.g. 2.1.0]

**Additional Context**
Any other context about the problem.
[ open in Markdown Formatter → ]

FAQ

How do I add an issue template to GitHub?
Create the file at .github/ISSUE_TEMPLATE/bug_report.md in your repository. GitHub automatically presents it as a template when contributors open new issues.
Can I have multiple issue templates?
Yes. Add multiple Markdown files to .github/ISSUE_TEMPLATE/ and GitHub shows a template chooser when opening a new issue. Create separate templates for bug reports, feature requests, and questions.
What is the difference between issue templates and issue forms?
Issue forms use YAML to define structured fields (dropdowns, checkboxes, text inputs) that GitHub renders as a form. Markdown templates provide a pre-filled text editor instead.

Related Examples