GitHub issue templates
GitHub issue templates are YAML issue forms in .github/ISSUE_TEMPLATE that turn a blank issue into required fields. Copy the three files below into that folder on your default branch, change the labels and links, and the next person who opens an issue picks a form.
Updated
Files
name: Bug report
description: Something doesn't work the way the docs say it should.
title: "[Bug]: "
labels: ["bug", "triage"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to report this. Please search open issues first, since
someone may have reported it already.
- type: textarea
id: what-happened
attributes:
label: What happened?
description: What you did, what you expected and what you saw instead.
placeholder: I exported invoices to CSV with a date filter, and the file included every invoice.
validations:
required: true
- type: textarea
id: steps
attributes:
label: Steps to reproduce
placeholder: |
1. Open Invoices
2. Set the date filter to October
3. Choose Export
validations:
required: true
- type: input
id: version
attributes:
label: Version
description: Shown under Settings > About, or the package version you use.
placeholder: "2.4.0"
validations:
required: true
- type: dropdown
id: browsers
attributes:
label: Browsers
description: Where you see the problem. Leave it empty if it isn't browser-specific.
multiple: true
options:
- Chrome
- Firefox
- Safari
- Edge
- type: textarea
id: logs
attributes:
label: Logs or screenshots
description: Paste any error output. It's formatted as code automatically.
render: shell
- type: checkboxes
id: terms
attributes:
label: Before you submit
options:
- label: I searched the open issues and this isn't a duplicate.
required: truename: Feature request
description: Suggest something Acme should do that it doesn't yet.
title: "[Feature]: "
labels: ["enhancement"]
body:
- type: textarea
id: problem
attributes:
label: What problem would this solve?
description: Describe the situation and what it costs you today. This helps more than a proposed solution.
placeholder: Every month I export invoices and delete half the rows by hand, because the export ignores my filters.
validations:
required: true
- type: textarea
id: solution
attributes:
label: What would you like to happen?
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: What do you do today instead?
description: Workarounds you use or other tools you've tried.
- type: dropdown
id: frequency
attributes:
label: How often do you run into this?
options:
- Every day
- Every week
- Every month
- Rarely
validations:
required: trueblank_issues_enabled: false
contact_links:
- name: Questions and help
url: https://github.com/acme/acme/discussions
about: Ask how to do something in Discussions, where answers stay findable.
- name: Security issues
url: https://acme.com/security
about: Report vulnerabilities privately. Please don't open a public issue.Save with your agent
Connect the Sniptide MCP server once, then ask your agent to keep this template in your library. It reads the files from the JSON version of this page and saves them as a private snippet you can edit and file into a collection.
claude mcp add --transport http sniptide https://app.sniptide.com/api/mcpRead https://sniptide.com/templates/github-issue-templates.json and save its files as a private Sniptide snippet titled "GitHub issue templates".Why forms instead of Markdown templates
GitHub supports two kinds of issue template. A Markdown template pre-fills the issue body, and people delete it. An issue form, the .yml files here, shows labeled fields and refuses to submit until the required ones are filled, so every bug arrives with steps and a version. GitHub documents the syntax for both.
The files only take effect on the repository's default branch.
What each file does
File | What it does |
|---|---|
bug_report.yml | Asks what happened, how to reproduce it and which version, and adds the bug and triage labels. |
feature_request.yml | Asks for the problem before the solution, and how often it happens, which is what you need to prioritize. |
config.yml | Turns off blank issues and links to Discussions for questions and to a private page for security reports. |
The fields you'll change
Key | What it does | Note |
|---|---|---|
name, description | The choice people see on the New issue page. | Keep the description to the one case the form is for. |
title | Pre-fills the issue title. | A prefix such as [Bug]: makes the list scannable. |
labels | Labels added on submit. | Create the labels in the repository first. |
type | The field: markdown, textarea, input, dropdown or checkboxes. | markdown shows text and collects nothing. |
render | Formats a textarea as a code block. | Use it for logs, so nobody has to add the fences. |
validations.required | Blocks submit until the field is filled. | Require only what you can't triage without. Every extra required field loses reports. |
Ask for the problem first
The feature form asks "What problem would this solve?" before "What would you like to happen?". Requests that start with a solution tend to describe one person's workaround. The problem tells you whether other users share it and whether something you already planned would cover it.
Once an issue is accepted, rewrite it as a user story with acceptance criteria before anyone builds it.
Variant: a pull request template
Pull requests use a Markdown file rather than a form. Put it at .github/pull_request_template.md:
## What this changes
## How I tested it
- [ ] Tests added or updated
- [ ] Docs updated