GitHub Bug Report Issue Template Builder

Generate a bug_report.yml issue form for your GitHub repo

Creates a structured GitHub issue form (bug_report.yml) with Steps to Reproduce, Expected and Actual Behavior, Environment, and Screenshots fields using the modern YAML issue-form schema, ready to drop into .github/ISSUE_TEMPLATE. It runs free in your browser on Gera Tools, with nothing uploaded.

Last updated Source: Gera Tools

Where does this file go in my repo?

Place it at .github/ISSUE_TEMPLATE/bug_report.yml. GitHub automatically detects files in that folder and offers them as choices when a user clicks New Issue.

GitHub issue forms turn vague bug reports into structured, validated submissions. This builder generates a complete bug_report.yml with the sections maintainers actually need — reproduction steps, expected versus actual behavior, environment, and screenshots — using the modern YAML issue-form schema.

How it works

The file is a YAML document with top-level metadata (name, description, title, labels, assignees) and a body array of typed fields. Each field has a type (textarea, input, dropdown, or markdown), an id, and attributes like the label and placeholder. Required fields set validations.required: true:

- type: textarea
  id: steps
  attributes:
    label: Steps to Reproduce
    placeholder: |
      1. Go to '...'
      2. Click on '...'
      3. See error
  validations:
    required: true

GitHub reads any file under .github/ISSUE_TEMPLATE/ and presents it as a guided form when someone opens a new issue, applying your default labels and assignees automatically.

Why use a YAML form instead of a Markdown template?

Older GitHub issue templates are Markdown files that pre-fill the issue body with headings and placeholder text. Reporters can delete or ignore the structure entirely, producing reports like “it doesn’t work” with no reproduction steps.

YAML issue forms are different: GitHub renders them as real HTML form fields — text areas, dropdowns, checkboxes — and can block submission until required fields are filled. The result is that maintainers consistently receive the minimum information they need to investigate the bug.

A complete bug report form

name: Bug Report
description: File a bug report
title: "[Bug]: "
labels: ["bug", "needs-triage"]
assignees: []
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to fill out this bug report!

  - type: textarea
    id: steps
    attributes:
      label: Steps to Reproduce
      placeholder: |
        1. Go to '...'
        2. Click on '...'
        3. See error
    validations:
      required: true

  - type: textarea
    id: expected
    attributes:
      label: Expected Behavior
      placeholder: What did you expect to happen?
    validations:
      required: true

  - type: textarea
    id: actual
    attributes:
      label: Actual Behavior
      placeholder: What actually happened?
    validations:
      required: true

  - type: input
    id: version
    attributes:
      label: Version
      placeholder: "e.g. 2.1.0"
    validations:
      required: false

  - type: textarea
    id: environment
    attributes:
      label: Environment
      placeholder: OS, browser, Node version, etc.

  - type: textarea
    id: screenshots
    attributes:
      label: Screenshots or Logs
      placeholder: Paste any relevant output or drag images here.

Field types and when to use them

TypeBest for
textareaMulti-line free text — reproduction steps, logs, descriptions
inputShort single-line values — version numbers, URLs, identifiers
dropdownConstrained choices — severity, component, OS
checkboxesAgreements or multi-select options
markdownStatic instructional text that is not submitted with the issue

Tips and notes

Keep at least the reproduction steps and the description required — those two fields prevent the most common “cannot reproduce” back-and-forth. The title prefix (for example [Bug]: ) makes bugs easy to filter in your issue list. If you also add a config.yml in the same folder, set blank_issues_enabled: false to force every report through a form rather than allowing a blank issue.